你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

快速入门:媒体组合输入、布局和输出简介

重要

本部分所述的功能目前为个人预览版。 个人预览版包括对测试用 SDK 和文档的访问权限,这些资源尚未公开提供。 通过填写相关表单获取 Azure 通信服务的预览访问权限,申请成为早期采用者。

Azure 通信服务媒组合成由三个部分组成:输入、布局和输出。 请跟随本文档详细了解可用选项以及如何定义每个部分。

先决条件

输入

若要检索在布局组合中使用的媒体源,需要定义输入。 输入可以是多源也可以是单源。

多源输入

Azure 通信服务组呼叫和 Azure 通信服务会议室通常由多个参与者组成。 我们将他们定义为多源输入。 可以在布局中将他们用作单个输入,或者将其解构来引用单个参与者。

Azure 通信服务群组呼叫 json:

{
  "inputs": {
    "groupCallInput": {
      "kind": "groupCall",
      "id": "5a22165a-f952-4a56-8009-6d39b8868971"
    }
  }
}

Azure 通信服务会议室输入 json:

{
  "inputs": {
    "roomCallInput": {
      "kind": "room",
      "id": "0294781882919201"
    }
  }
}

单源输入

与多源输入不同,单源输入引用单个媒体源。 如果单个源输入来自多源输入(例如 Azure 通信服务群组通话或会议室),它将在 call 属性中引入多源输入 ID。 下面是单源输入的示例:

参与者 json:

{
  "inputs": {
    "groupCallInput": {
      "kind": "groupCall",
      "id": "d9e13117-4679-47a5-8cd5-1c3fdbbe6a6e"
    },
    "participantInput": {
      "kind": "participant",
      "call": "groupCallInput",
      "id": {
        "communicationUser": {
          "userId": "8:acs:c3015709-b45a-4c9d-be36-26a9a108cd88_00000030-45lk-9dp0-04c8-3ed0023d0ds"
        }
      }
    }
  }
}

活跃演示者 json:

{
  "inputs": {
    "groupCallInput": {
      "kind": "groupCall",
      "id": "d9e13117-4679-47a5-8cd5-1c3fdbbe6a6e"
    },
    "activePresenterInput": {
      "kind": "activePresenter",
      "call": "groupCallInput"
    }
  }
}

主导发言人 json:

{
  "inputs": {
    "groupCallInput": {
      "kind": "groupCall",
      "id": "d9e13117-4679-47a5-8cd5-1c3fdbbe6a6e"
    },
    "dominantSpeakerInput": {
      "kind": "dominantSpeaker",
      "call": "groupCallInput"
    }
  }
}

布局

媒体组合支持多个布局。 其中包括网格、自动网格、演示、演示者和自定义。

网格

网格布局会将指定的媒体源组合到包含一定数量单元格的网格中。 可以自定义网格中的行数和列数,并指定应在网格的每个单元格中放置的媒体源。

示例网格布局 json:

{
  "layout": {
    "kind": "grid",
    "rows": 2,
    "columns": 2,
    "inputIds": [
      ["active", "jill"],
      ["jon", "janet"]
    ]
  },
  "inputs": {
    "meeting": {
      "kind": "groupCall",
      "id": "d9e13117-4679-47a5-8cd5-1c3fdbbe6a6e"
    },
    "active": {
      "kind": "dominantSpeaker",
      "call": "meeting"
    },
    "jill": {
      "kind": "participant",
      "call": "meeting",
      "id": {
        "communicationUser": {
          "userId": "8:acs:5110fbea-014a-45aa-a839-d6dc967b4175_00000030-45lk-9dp0-04c8-3ed0023d0ds"
        }
      }
    },
    "jon": {
      "kind": "participant",
      "call": "meeting",
      "id": {
        "communicationUser": {
          "userId": "8:acs:5110fbea-014a-45aa-a839-d6dc967b4175_00000090-20e2-430d-9c34-0e4b72c98636"
        }
      }
    },
    "janet": {
      "kind": "participant",
      "call": "meeting",
       "id": {
        "communicationUser": {
          "userId": "8:acs:5110fbea-014a-45aa-a839-d6dc967b4175_00000030-b1a5-4047-b238-e515602e9b94"
        }
      }
    }
  },
  "outputs": {
    "meeting": {
      "kind": "groupCall",
      "id": "d9e13117-4679-47a5-8cd5-1c3fdbbe6a6e"
    }
  }
}

示例网格布局 json 呈现主导发言人,并将其放在第一个单元格。 然后 jilljonjanet 填充接下来的三个单元格:A diagram showing an example of the grid layout.

如果输入中只定义三个参与者,则第四个单元格将留空。

自动网格

自动网格布局非常适合要在场景中显示所有源的多源方案。 此布局应是默认的多源场景,并根据源数进行调整。

示例自动网格布局 json:

{
  "layout": {
    "kind": "autoGrid",
    "inputIds": ["meeting"],
  },
  "inputs": {
    "meeting": {
      "kind": "groupCall",
      "id": "d9e13117-4679-47a5-8cd5-1c3fdbbe6a6e"
    }
  },
  "outputs": {
    "meeting": {
      "kind": "groupCall",
      "id": "d9e13117-4679-47a5-8cd5-1c3fdbbe6a6e"
    }
  }
}

示例自动网格布局包括 meeting 输入中的所有媒体源,并将其组合到优化的网格:A diagram showing an example of the auto grid layout.

呈现

演示布局呈现演示者,该演示者占了大部分场景。 其他源是观众成员,并排列在剩余空间中的行或列中。 观众的位置可以是 topbottomleftright 之一。

示例演示布局 json:

{
  "layout": {
    "kind": "presentation",
    "presenterId": "presenter",
    "audienceIds": ["meeting:not('presenter')"],
    "audiencePosition": "top"
  },
  "inputs": {
    "meeting": {
      "kind": "groupCall",
      "id": "d9e13117-4679-47a5-8cd5-1c3fdbbe6a6e"
    },
    "presenter": {
      "kind": "participant",
      "call": "meeting",
      "id": {
        "communicationUser": {
          "userId": "8:acs:5110fbea-014a-45aa-a839-d6dc967b4175_00000090-20e2-430d-9c34-0e4b72c98636"
        }
      }
    }
  },
  "outputs": {
    "meeting": {
      "kind": "groupCall",
      "id": "d9e13117-4679-47a5-8cd5-1c3fdbbe6a6e"
    },
  }
}

示例演示布局呈现 presenter 并将其余观众成员放在场景上部:A diagram showing an example of the presentation layout.

演示者

演示者布局是由两个输入组成的画中画布局。 一个源是场景的背景。 它表示正在呈现的内容或主演示者。 辅助源提供支持,裁剪并放置在场景的一角。 支持位置可以是 bottomLeftbottomRighttopLefttopRight 之一。

示例演示者布局 json:

{
  "layout": {
    "kind": "presenter",
    "presenterId": "presenter",
    "supportId": "support",
    "supportPosition": "topLeft",
    "supportAspectRatio": 3/2
  },
  "inputs": {
    "meeting": {
      "kind": "groupCall",
      "id": "d9e13117-4679-47a5-8cd5-1c3fdbbe6a6e"
    },
    "presenter": {
      "kind": "participant",
      "call": "meeting",
      "id": {
        "communicationUser": {
          "userId": "8:acs:5110fbea-014a-45aa-a839-d6dc967b4175_00000090-20e2-430d-9c34-0e4b72c98636"
        }
      }
    },
    "support": {
      "kind": "participant",
      "call": "meeting",
       "id": {
        "communicationUser": {
          "userId": "8:acs:5110fbea-014a-45aa-a839-d6dc967b4175_00000030-b1a5-4047-b238-e515602e9b94"
        }
      }
    }
  },
  "outputs": {
    "meeting": {
      "kind": "groupCall",
      "id": "d9e13117-4679-47a5-8cd5-1c3fdbbe6a6e"
    }
  }
}

示例演示者布局呈现 presenter 媒体源,它占了大部分场景。 根据 supportAspectRatio 来裁剪支持媒体源,并将其放在指定位置 topLeftA diagram showing an example of the presenter layout.

自定义

如果任何预定义布局都无法满足需求,可以使用自定义布局来适应确切的方案。 借助自定义布局,可以使用不同大小来定义源,并将其放置在场景的任何位置。

{
  "layout": {
    "kind": "custom",
    "inputGroups": {
      "main": {
        "position": {
          "x": 0,
          "y": 0
        },
        "width": "100%",
        "height": "100%",
        "rows": 2,
        "columns": 2,
        "inputIds": [ [ "meeting:not('active')" ] ]
        },
      "overlay": {
        "position": {
            "x": 480,
            "y": 270
          },
          "width": "50%",
          "height": "50%",
          "layer": "overlay",
          "inputIds": [[ "active" ]]
          }
    },
    "layers": {
      "overlay": {
        "zIndex": 2,
        "visibility": "visible"
      }
    }
  },
  "inputs": {
    "meeting": {
      "kind": "groupCall",
      "id": "d9e13117-4679-47a5-8cd5-1c3fdbbe6a6e"
    },
    "active": {
      "kind": "dominantSpeaker",
      "call": "meeting"
    }
  },
  "outputs": {
    "meeting": {
      "kind": "groupCall",
      "id": "d9e13117-4679-47a5-8cd5-1c3fdbbe6a6e"
    }
  }
}

以上自定义布局示例导致以下组合:A diagram showing an example of the custom layout.

输出

根据布局组合媒体后,可以通过各种方式将其输出给观众。 目前,可以将组合流发送给调用或 RTMP 服务器。

Azure 通信服务群组呼叫 json:

{
  "outputs": {
    "groupCallOutput": {
      "kind": "groupCall",
      "id": "CALL_ID"
    }
  }
}

Azure 通信服务会议室输出 json:

{
  "outputs": {
    "roomOutput": {
      "kind": "room",
      "id": "ROOM_ID"
    }
  }
}

RTMP 输出 json

{
  "outputs": {
    "rtmpOutput": {
      "kind": "rtmp",
      "streamUrl": "rtmp://rtmpendpoint",
      "streamKey": "STREAM_KEY",
      "resolution": {
        "width": 1920,
        "height": 1080
      },
      "mode": "push"
    }
  }
}

后续步骤

在本部分,你已了解如何执行以下操作:

  • 创建多源或单源输入
  • 创建各种预定义和自定义布局
  • 创建输出

你可能还想要: