对于一个音视频通话,你可以将其中的多路音视频流合为一路,并将合并得到的音视频流通过 RTMP 协议推送到指定的推流地址(通常是 CDN 地址)。
你可以使用 StartPushMixedStreamToCDN
这个 OpenAPI 实现这一功能。
同一 TaskId 不能同时开启合流转推和单流转推任务。
你可以调用 StartPushMixedStreamToCDN
接口,将指定音视频房间内的指定音视频流,按照指定的布局合为一路,并推送至指定的地址。
在一个房间内,你最多只能将 17 路流合为一路流。若超出最大合流数限制,会返回 InvalidParameter 错误。
在使用合流转推功能前,你必须已经在控制台上开启转推直播服务。
请求频率:QPS 不得超过 150。
下表仅列出该接口特有的请求参数和部分公共参数。更多信息请见公共参数。
参数 | 类型 | 是否必选 | 示例值 | 描述 |
---|---|---|---|---|
Action | String | 是 | StartPushMixedStreamToCDN | 接口名称。当前 API 的名称为 StartPushMixedStreamToCDN 。 |
Version | String | 是 | 2020-12-01 | 接口版本。当前 API 的版本为 2020-12-01 。 |
参数 | 类型 | 是否必选 | 示例值 | 描述 |
---|---|---|---|---|
AppId | String | 是 | Your_AppId | 你的音视频应用的唯一标志 |
BusinessId | String | 否 | Your_BusinessId | 业务标识 |
RoomId | String | 是 | Your_RoomId | 房间的 ID,是房间的唯一标志 |
TaskId | String | 是 | Your_TaskId | 合流转推任务 ID。你必须对每个合流转推任务设定 TaskId,且在后续进行任务更新和结束时也须使用该 TaskId。
[a-zA-Z0-9_@\-\.]{1,128} |
TargetStreams | Object | 否 | - | 你可以通过本参数设定需要转推的音视频流。如果参数为空,默认对房间内所有人进行转推。最多17路音视频流。此参数中的 stream 不得和 ExcludeStreams 中重复。 |
StreamList | Object[] | 否 | - | 由 Stream 组成的列表,可以为空。为空时,表示订阅房间内所有流。在一个 StreamList 中,Stream.Index 不能重复。 |
Index | Integer | 否 | 0 | 在自定义布局中,使用 Index 对流进行标志。后续在 Layout.regions.StreamIndex 中,你需要使用 Index 指定对应流的布局设置。 |
UserId | String | 是 | Your_UserId | 用户Id,表示这个流所属的用户。 |
StreamType | Integer | 否 | 0 | 流的类型,值可以取 0 或1 ,默认值为0 。0 表示普通音视频流,1 表示屏幕流。 |
ExcludeStreams | Object | 否 | - | 你可以通过本参数设定不需要转推的音视频流,即转推流的黑名单。参数默认为空。黑名单中的流不得超过 17 路。不支持将屏幕流添加到黑名单中。此参数中的 stream 不得和 TargetStreams 中重复。 |
StreamList | Object[] | 否 | - | 由 Stream 组成的列表,可以为空。为空时,表示订阅房间内所有流。在一个 StreamList 中,Stream.Index 不能重复。 |
Index | Integer | 否 | 0 | 在自定义布局中,使用 Index 对流进行标志。后续在 Layout.regions.StreamIndex 中,你需要使用 Index 指定对应流的布局设置。 |
UserId | String | 是 | Your_UserId | 用户Id,表示这个流所属的用户。 |
StreamType | Integer | 否 | 0 | 流的类型,值可以取 0 或1 ,默认值为0 。0 表示普通音视频流,1 表示屏幕流。 |
PushURL | String | 是 | rtmp://xxx/xxx | 推流 CDN 地址。仅支持 RTMP 协议。 |
Encode | Object | 否 | - | 音视频编码参数 |
VideoWidth | Integer | 否 | 640 | 输出画面的宽度。默认值为 640 ,范围为 [2, 1920] ,必须是偶数。值不合法时,自动调整为默认值。自定义布局下此参数不生效,整体画面宽度以 canvas 中的 Width 为主。 |
VideoHeight | Integer | 否 | 480 | 输出画面的高度,范围为 [2, 1920] ,必须是偶数,默认值为480 。值不合法时,自动调整为默认值。自定义布局下此参数不生效,整体画面高度以 canvas 中的 Height 为主。 |
VideoFps | Integer | 否 | 15 | 输出视频帧率。默认为 15 ,取值范围为 [1,60] 。值不合法时,自动调整为默认值。 |
VideoBitrate | Integer | 否 | - | 输出视频码率。取值范围 [1,10000] ,单位为 Kbps,默认值为自适应。值不合法时,自动调整为默认值。自适应码率模式下,RTC 默认不会设置超高码率。如果订阅屏幕流,建议自行设置高码率。不同场景下设置码率等视频发布参数,请参考设置视频发布参数。 |
VideoCodec | Integer | 否 | 0 | 视频编码协议。默认值为 0 ,可以取 0 或 1 。取 0 时使用 H.264 ,取 1 时使用 ByteVC1 编码器。 |
VideoGop | Integer | 否 | 4 | 输出视频 GOP。默认为 4 ,取值范围为 [1,5] ,单位为秒。值不合法时,自动调整为默认值。 |
AudioCodec | Integer | 否 | 0 | 音频编码协议。默认值为 0 ,此时使用 aac 编码协议。目前只支持 aac。值不合法时,自动调整为默认值。 |
AudioProfile | Integer | 否 | 0 | 音频配置文件类型,在使用 aac 编码时生效。取值范围为
|
AudioBitrate | Integer | 否 | - | 音频码率。取值范围为 当
当
当
|
AudioSampleRate | Integer | 否 | 48000 | 音频采样率。默认值 48000 ,取值为 [32000,44100,48000] ,单位是 Hz。值不合法时,自动调整为默认值。 |
AudioChannels | Integer | 否 | 2 | 音频声道数。
|
Layout | Object | 否 | - | 房间内多路流合为一路时的布局参数 |
LayoutMode | Integer | 否 | 0 | |
MainVideoStream | Object | 否 | - | 在垂直布局模式下生效,指定主画面流的属性。垂直布局时, MainVideoStream 和 MainVideoStreamIndex 必须填写其中一个。 |
Index | Integer | 否 | 0 | 在自定义布局中,使用 Index 对流进行标志。后续在 Layout.regions.StreamIndex 中,你需要使用 Index 指定对应流的布局设置。 |
UserId | String | 是 | Your_UserId | 用户Id,表示这个流所属的用户。 |
StreamType | Integer | 否 | 0 | 流的类型,值可以取 0 或1 ,默认值为0 。0 表示普通音视频流,1 表示屏幕流。 |
MainVideoStreamIndex | Integer | 否 | - | 在垂直布局模式下生效,指定主画面流的属性。如果此参数为空,则主画面为随机的一路流。该参数已废弃,当前版本 MainVideoStreamIndex 依然可用,但我们强烈建议你使用 MainVideoStream 参数。如果你同时指定了 MainVideoStream 和 MainVideoStreamIndex 的值,此时只有 MainVideoStream 生效。 |
CustomLayout | Object | 否 | - | 使用自定义布局模式时,使用此参数进行具体设置。 |
Canvas | Object | 否 | - | 整体屏幕(画布)的宽高以及背景色。 |
Width | Integer | 否 | 640 | 整体屏幕(画布)的宽度,单位为像素,范围为 [2, 1920] ,必须是偶数。默认值为 640 。值不合法时,自动调整为默认值。 |
Height | Integer | 否 | 480 | 整体屏幕(画布)的高度,单位为像素,范围为 [2, 1920] ,必须是偶数。默认值为 480 。值不合法时,自动调整为默认值。 |
Background | String | 否 | #000000 | 整体屏幕(画布)的背景色,用十六进制颜色码(HEX)表示。例如, #FFFFFF 表示纯白,#000000 表示纯黑。默认值为 #000000 。值不合法时,自动调整为默认值。 |
BackgroundImage | String | 否 | 无 | 背景图片的 URL。长度最大为 1024 byte。可以传入的图片的格式包括:JPG, JPEG, PNG。如果背景图片的宽高和整体屏幕的宽高不一致,背景图片会缩放到铺满屏幕。 如果你设置了背景图片,背景图片会覆盖背景色。 |
Regions | Object[] | 否 | - | 在自定义布局模式下,你可以使用
|
StreamIndex | Integer | 是 | 0 | 流的标识。这个标志应和 TargetStreams.StreamList.Stream.Index 对应。 |
LocationX | Float | 否 | 0 | 视频流对应区域左上角的横坐标相对整体画面的比例,取值的范围为 1920 , 视频流对应区域左上角的横坐标相对整体画面的比例为 0.33 ,那么该画布左上角的横坐标为 634 (1920*0.33=633.6,四舍五入取整)。 |
LocationY | Float | 否 | 0 | 视频流对应区域左上角的横坐标相对整体画面左上角原点的纵向位移,取值的范围为 [0.0, Canvas.Height) 。默认值为 0 。若传入该参数,服务端会对该参数进行校验,若不合法会返回错误码 InvalidParameter 。 |
WidthProportion | Float | 是 | 0.5 | 视频流对应区域宽度相对整体画面的比例,取值的范围为 (0.0, 1.0] 。 |
HeightProportion | Float | 是 | 0.5 | 视频流对应区域高度相对整体画面的比例,取值的范围为 (0.0, 1.0] 。 |
ZOrder | Integer | 否 | 0 | 当多个流的画面有重叠时,使用此参数设置指定画面的图层顺序。取值范围为 [0, 100] :0 表示该区域图像位于最下层,100 表示该区域图像位于最上层, 默认值为 0 。值不合法时,自动调整为默认值。 |
Alpha | Float | 否 | 1 | 画面的透明度,取值范围为 (0.0, 1.0] 。0.0 表示完全透明,1.0 表示完全不透明,默认值为 1.0 。值不合法时,自动调整为默认值。 |
RenderMode | Integer | 否 | 0 | 画面的渲染模式,值的范围为
目前 0 和 3 均为按照指定的宽高直接缩放,但我们推荐你使用 3 以便与客户端实现相同逻辑。不同渲染模式下,效果如下: |
SourceCrop | Object | 否 | - | 源流剪切功能,可以在源视频帧渲染之前进行裁剪,即预处理一次再渲染。转推直播和云端录制下, SourceCrop 对 AlternateImage 也生效。 |
LocationX | Float | 否 | 0 | 裁剪后得到的视频帧左上角的横坐标相对裁剪前整体画面的比例,取值的范围为 [0.0, 1.0) 。默认值为 0.0 。值不合法时,自动调整为默认值。 |
LocationY | Float | 否 | 0 | 裁剪后得到的视频帧左上角的纵坐标相对裁剪前整体画面的比例,取值的范围为 [0.0, 1.0) 。默认值为 0.0 。值不合法时,自动调整为默认值。 |
WidthProportion | Float | 否 | 0.5 | 裁剪后得到的视频帧宽度相对裁剪前整体画面宽度的比例,取值范围为 (0.0, 1.0] 。默认值为 1.0 。值不合法时,自动调整为默认值。 |
HeightProportion | Float | 否 | 0.5 | 裁剪后得到的视频帧高度相对裁剪前整体画面宽度的比例,取值范围为 (0.0, 1.0] 。默认值为 1.0 。值不合法时,自动调整为默认值。 |
AlternateImage | String | 否 | - | 补位图片的 url。长度不超过 1024 个字符串。
|
ApplySpatialAudio | Boolean | 否 | - | 该路流对应的用户是否开启空间音频效果。
true |
SpatialPosition | Integer[] | 否 | [0,0,0] | 空间音频下,房间内指定用户所在位置的三维坐标,默认值为 [0,0,0] 。数组长度为3 ,三个值依次对应X ,Y ,Z ,每个值的取值范围为[-100,100] 。 |
CornerRadius | Float | 否 | 0.1 | 转推直播下边框圆角半径与画布宽度的比例值,取值范围为 (0,1] 。圆角半径的像素位不能超过 Region 宽高最小值的一半,否则不会出现圆角效果。 |
MediaType | Integer | 否 | 0 | 该路流参与混流的媒体类型。
0 。值不合法时,自动调整为默认值。假如该路流为音视频流, MediaType 设为1 ,则只混入音频内容。 |
AlternateImageFillMode | Integer | 否 | 0 | 画面的渲染模式。
0 。值不合法时,自动调整为默认值。 |
Control | Object | 否 | - | 配置选项。 |
MediaType | Integer | 否 | 0 | 流的类型,用于全局控制订阅的流的类型。默认值为 0 ,可以取0 和1 。0 表示音视频,1 表示纯音频,暂不支持纯视频。值不合法时,自动调整为默认值。 |
FrameInterpolationMode | Integer | 否 | 0 | 选择补帧模式。默认值为 自动布局模式下,没有补帧的逻辑。 补帧是指在音视频录制或合流转推时,视频的帧率通常是固定的。但是,因为网络波动或其他原因,实际帧率可能无法达到预设的帧率。此时,需要补帧以保持视频流畅。补最后一帧意味着补充的视频帧和中断前的最后一帧相同,此时看到的画面可能会有短暂静止;补黑帧意味着补充的视频帧是全黑的。 使用占位图、补帧和上一帧的关系: 你可以在
|
MaxIdleTime | Integer | 否 | 180 | 任务的空闲超时时间,超过此时间后,任务自动终止。单位为秒。取值范围为 [10, 86400] , 默认值为 180 。 |
MaxRecordTime | Integer | 否 | 0 | (仅对录制有效)最大录制时长,单位为秒。默认值为 0 。0 表示不限制录制时长。 |
VolumeIndicationInterval | Integer | 否 | 2 | (仅对转推直播有效)用户说话音量的回调间隔,单位为秒,取值范围为 [1,∞] ,默认值为 2 。 |
VolumeIndicationMode | Boolean | 否 | false | (仅对转推直播有效)是否开启音量指示模式。默认值为 false 。若 VolumeIndicationMode = true 的同时设置 MediaType = 1 ,该流推向 CDN 地址时,服务端会补黑帧。 |
TalkVolume | Integer | 否 | 30 | (仅对转推直播有效)有效说话音量大小。取值范围为 [0,255] ,默认值为0 。 |
SpatialConfig | Object | 否 | - | 空间音频配置。若合流转推的音频参数设置为单声道,空间音频无效。 |
EnableSpatialRender | Boolean | 否 | false | 是否开启空间音频处理功能。
|
AudienceSpatialPosition | Integer[] | 否 | [0,0,0] | 观众所在位置的三维坐标,默认值为 [0,0,0] 。数组长度为3 ,三个值依次对应X ,Y ,Z ,每个值的取值范围为[-100,100] 。 |
AudienceSpatialOrientation | Object | 否 | - | 设置观众朝向。各个向量两两垂直,如果传入的值没有保证两两垂直,自动赋予默认值。默认值为: forward = [1, 0, 0] , right = [0, 1, 0] , up = [0, 0, 1] 。 |
Up | Float[] | 否 | [1, 0, 0] | 前方朝向 |
Right | Float[] | 否 | [0, -1, 0] | 右边朝向 |
Forward | Float[] | 否 | [0, 0, 1] | 头顶朝向 |
PushStreamMode | Integer | 否 | 0 | 转推直播推流模式,用于控制触发推流的时机。取值为
|
本接口无特有的返回参数。公共返回参数请见返回结构。
其中返回值 Result
仅在请求成功时返回 ok
,失败时为空。
POST https://rtc.volcengineapi.com?Action=StartPushMixedStreamToCDN&Version=2020-12-01 { "AppId": "Your_AppId", "BusinessId": "Your_BusinessId", "RoomId": "Your_RoomId", "TaskId": "Your_TaskId", "TargetStreams": { "StreamList": [ { "Index": 0, "UserId": "Your_UserId_3" }, { "Index": 1, "UserId": "Your_UserId_4", "StreamType": 1 } ] }, "PushURL": "rtmp://xxx/xxx", "Layout": { "LayoutMode": 2, "CustomLayout": { "Canvas": { "Width": 860, "Height": 340, "Background": "#303342" }, "Regions": [ { "StreamIndex": 0, "LocationX": 0, "LocationY": 0, "WidthProportion": 0.5, "HeightProportion": 1, "ZOrder": 0, "Alpha": 1, "RenderMode": 0 }, { "StreamIndex": 1, "LocationX": 0.5, "LocationY": 0, "WidthProportion": 0.5, "HeightProportion": 1, "ZOrder": 1, "Alpha": 1, "RenderMode": 1 } ] } } }
{ "Result": "ok", "ResponseMetadata": { "RequestId": "Your_RequestId", "Action": "StartPushMixedStreamToCDN", "Version": "2020-12-01", "Service": "rtc", "Region": "cn-north-1" } }
您可访问公共错误码,获取更多错误码信息。