阿里云实时音视频支持将多路音视频流按照一定规则进行混流,并转推至阿里云视频直播或第三方直播平台,供麦下观众拉流观看。本文为您介绍如何启动云端混流与转推服务。
使用场景
在实时音视频的解决方案中,包括但不限于以下场景,需要使用云端混流与转推服务,将生产端的ARTC流转推到CDN直播网络,供直播消费端使用。
直播连麦时,麦下观众进入直播间观看直播。
直播连麦时,对直播间的内容进行录制、审核。
社交语聊时,麦下听众进入直播间收听语聊。
社交语聊时,对语聊房内容进行录制、审核。
启动云端混流与转推服务
您可以通过以下三种方式启动云端混流与转推服务。
全局自动旁路转推
在开启全局自动旁路转推时,对于每一个加入直播间的主播,都自动将该主播的直播流旁路转推至CDN直播。该方案适用于典型的直播、审核、录制场景。详情请参见配置旁路转推。
客户端调用SDK混流与转推
当有观众发起连麦请求时,主播侧可以调用客户端SDK,给云端服务器下发混流转推指令,将所有参与连麦的直播流进行混流后转推到CDN直播。详情请参见连麦互动开发指南。
观众侧会平滑的从单主播画面切换到连麦画面。
纯语聊场景,听众端会平滑的切换到混音模式。
服务端调用OpenAPI混流与转推
通过调用服务端OpenAPI的方式,对单主播启动旁路转推,在连麦时进行混流转推。详情请参见创建混流转推任务(新)/更新混流转推任务(新)。
操作流程如下:
前提条件:已开通服务,并创建实时音视频应用。其中,AppId为appIdExample,播流域名为pull.example.com,并关联了推流域名push.example.com。
主播UserA调用实时音视频客户端SDK,发起直播,房间号为roomA,开始推流。
业务服务器调用实时音视频服务端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"} &公共请求参数
连麦观众UserB发起连麦请求,主播接受连麦请求。
主播与连麦观众相互建立推拉流通道,开始推拉流。
业务服务器调用实时音视频服务端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"}} &公共请求参数