云端混流与转推

阿里云实时音视频支持将多路音视频流按照一定规则进行混流,并转推至阿里云视频直播或第三方直播平台,供麦下观众拉流观看。本文为您介绍如何启动云端混流与转推服务。

使用场景

在实时音视频的解决方案中,包括但不限于以下场景,需要使用云端混流与转推服务,将生产端的ARTC流转推到CDN直播网络,供直播消费端使用。

  • 直播连麦时,麦下观众进入直播间观看直播。

  • 直播连麦时,对直播间的内容进行录制、审核。

  • 社交语聊时,麦下听众进入直播间收听语聊。

  • 社交语聊时,对语聊房内容进行录制、审核。

启动云端混流与转推服务

您可以通过以下三种方式启动云端混流与转推服务。

全局自动旁路转推

在开启全局自动旁路转推时,对于每一个加入直播间的主播,都自动将该主播的直播流旁路转推至CDN直播。该方案适用于典型的直播、审核、录制场景。详情请参见配置旁路转推

image

客户端调用SDK混流与转推

当有观众发起连麦请求时,主播侧可以调用客户端SDK,给云端服务器下发混流转推指令,将所有参与连麦的直播流进行混流后转推到CDN直播。详情请参见连麦互动开发指南

  • 观众侧会平滑的从单主播画面切换到连麦画面。

  • 纯语聊场景,听众端会平滑的切换到混音模式。

image

服务端调用OpenAPI混流与转推

通过调用服务端OpenAPI的方式,对单主播启动旁路转推,在连麦时进行混流转推。详情请参见创建混流转推任务(新)/更新混流转推任务(新)

image

操作流程如下:

前提条件:已开通服务,并创建实时音视频应用。其中,AppId为appIdExample,播流域名为pull.example.com,并关联了推流域名push.example.com。

  1. 主播UserA调用实时音视频客户端SDK,发起直播,房间号为roomA,开始推流。

  2. 业务服务器调用实时音视频服务端OpenAPI StartLiveMPUTask,对主播启动旁路转推任务(MixMode参数为0)。

    http(s)://live.aliyuncs.com?Action=StartLiveMPUTask
    &AppId=appIdExample
    &ChannelId=roomA
    &TaskId=yourTaskId
    &MixMode=0
    &StreamURL=rtmp://push.example.com/live/stream
    &Region=CN-Shanghai
    &SingleSubParams={"UserId":"userA","StreamType":"0","SourceType":"camera"}
    &公共请求参数
  3. 连麦观众UserB发起连麦请求,主播接受连麦请求。

  4. 主播与连麦观众相互建立推拉流通道,开始推拉流。

  5. 业务服务器调用实时音视频服务端OpenAPI UpdateLiveMPUTask,将主播在步骤2启动的旁路转推任务更新为混流转推任务(MixMode参数为1)。

    http(s)://live.aliyuncs.com?Action=UpdateLiveMPUTask
    &AppId=appIdExample
    &ChannelId=roomA
    &TaskId=yourTaskId
    &MixMode=1
    &StreamURL=rtmp://push.example.com/live/stream
    &TranscodeParams={"UserInfos":[{"UserId":"userA","StreamType":"0","SourceType":"camera"},{"UserId":"userB","StreamType":"0","SourceType":"camera"}],"EncodeParams":{"AudioOnly":"false","VideoWidth":"1920","VideoHeight":"1080","VideoFramerate":"25","VideoBitrate":"3500","VideoGop":"20","AudioSampleRate":"44100","AudioBitrate":"128","AudioChannels":"2"},"Layout":{"UserPanes":[{"UserInfo":{"UserId":"userA","SourceType":"camera"},"X":"0","Y":"0","Width":"0.5","Height":"0.5","ZOrder":"0","BackgroundImageUrl":"yourImageUrl","RenderMode":"1"},{"UserInfo":{"UserId":"userB","SourceType":"camera"},"X":"0.5","Y":"0","Width":"0.5","Height":"0.5","ZOrder":"0","BackgroundImageUrl":"yourImageUrl","RenderMode":"1"}]}}
    &SeiParams={"LayoutVolume":{"FollowIdr":"0","Interval":"1000","PayloadType":"5"}}
    &公共请求参数