全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网
视频直播

方案介绍

更新时间:2017-09-04 14:41:39

连麦参与者的职责和功能

主播端

  • 采集音视频信号并编码、推送直播流。

  • 拉取副麦端的直播流。

  • 将拉取的副麦端的直播流与本地采集的视频进行叠加播放。

副麦端

  • 采集音视频信号并编码、推送直播流。

  • 拉取主播及其他副麦端的直播流。

  • 将拉取的直播流与本地采集的视频进行叠加播放。

观众端

  • 播放混流地址中的直播流

APP Server

  • 管理直播或连麦过程中使用的地址,包括推流地址、播放地址和混流地址。

  • 对直播或连麦业务进行管理

  • 调用 AliLive 的混流接口和接受 AliLive 的回调,以实现服务端混流的功能。

AliLive

  • 接受直播流的推送

  • 接受直播流的拉取

  • 将多路直播流混合成一路,并输出

  • 接受混合后的直播流的拉取

注:

  • 连麦过程中 APP Server 需要提供三类地址:推流地址、播放地址、混流地址。
  • 推流地址是直播或副麦推送直播流的地址,仅供主播端和副麦端使用。
  • 播放地址是用于观看主播或副麦的直播视频的地址,仅在连麦的过程中使用,且仅供主播端和副麦端使用。
  • 混流地址是用于观看 AliLive 混合多路直播流的结果的地址,仅供观众端使用。混流地址可以在非连麦的过程中使用,此时播放的就是主播的画面(与主播的播放地址内容相同);若在连麦过程中使用,播放的就是主播与副麦的混合画面。
  • 观众播放的一定是混流地址。当观众参与连麦、成为副麦时,会结束混流地址的播放,并开始播放主播和其他副麦的直播地址;当副麦结束连麦、成为观众时,会结束播放主播和其他副麦的直播地址,重新开始播放混流地址。

连麦的参与者

连麦的过程有 5 种参与者:

  • 主播端:主播的客户端。

  • 副麦端:正在与主播连麦的人的客户端。

  • 观众端:未参与连麦的、观看直播或他人连麦的人的客户端。

  • APP Server:用于接收或转发连麦信号的服务端,由直播业务方自行开发,可以根据自身的业务逻辑来控制连麦的流程,也是混流功能的唯一调用方。

  • AliLive:阿里云直播服务器,提供整个直播或连麦过程中所有直播流的接收、分发和混流服务。

    注:当观众开始连麦后,我们称之为副麦;当副麦结束连麦后,我们称之为观众。

连麦参与者之间的关系

5 个连麦参与者之间的关系如下图所示:

re.jpg

其中,实线表示信令调用,虚线表示直播流传输。

典型业务流程

本小节将描述一个典型业务流程的实线逻辑,从主播上线到观众加入连麦、连麦结束,最后主播退出直播为止。

主播发起直播与观众观看直播

  1. 主播向 APP Server 发起直播请求。
  2. APP Server 同意主播发起直播,并分配主播的推流地址、播放地址以及混流地址。
  3. 主播通过推流地址开始推流。
  4. APP Server 收到 AliLive 推流成功的回调,将主播放入直播列表,表示此时观众可以播放主播的直播流。
  5. 观众 A、B、C 开始观看直播(即播放混流地址)。
  6. 通知 AppServer,用户 A、B、C 正在观看

主播发起连麦

  1. 主播向 APP Server 发出请求,希望与观众 A、B 连麦。
  2. APP Server 向观众 A、B 反馈主播的请求。
  3. 观众 A、B 向APP Server 发送同意主播连麦请求的信号。
  4. APP Server 向观众 A、B 分配各自的推流地址,并发送主播流的播放地址。
  5. 观众 A、B 开始连麦(即结束播放混流地址,开始推流、开始播放主播的播放地址)。
  6. APP Server 收到 AliLive 给出的观众A、B推流成功的回调,将 A、B 的播放地址发送给主播和 A、B、C。(注释 1:此处观众 C 并不需要收到 A、B 的播放地址,是否收到 A、B 的播放地址对于观众 C 的播放没有任何影响。之所以收到这个消息主要是通知第三方观众有人加入连麦了。)
  7. 主播开始与 A、B 进行连麦(即播放 A、B 的播放地址)。
  8. 副麦 A 增加与 B 的连麦(即播放 B 的播放地址)。
  9. 副麦 B 增加与 A 的连麦(即播放 A 的播放地址)。
  10. APP Server 调用 AliLive 的混流接口,开始混流且 A、B 加入混流画面。至此,主播与 A、B 连麦成功。

副麦退出连麦

  1. 副麦 B 向 APP Server 发送结束连麦的通知,然后结束连麦(即停止推流、停止播放主播和副麦 A 的播放地址,开始播放混流地址)。
  2. APP Server 调用 AliLive 的混流接口,B 退出混流画面
  3. APP Server 发送副麦 B 退出直播的消息给主播及 A、B、C。
  4. 主播与 B 停止连麦(即结束播放 B 的播放地址)。
  5. 副麦 A 与 B 停止连麦(即结束播放 B 的播放地址)。

观众加入连麦

  1. 观众 C 向 APP Server 发出申请,要求加入连麦。
  2. APP Server 向主播和副麦 A 转发观众 C 的申请。
  3. 主播和副麦 A 向 APP Server 发送同意连麦的信号。
  4. APP Server 向观众 C 分配推流地址,并发送主播和副麦 A 的播放地址。
  5. 观众 C 开始连麦(即结束播放混流地址,开始推流、开始播放主播和副麦 A 的播放地址)。
  6. APP Server 收到 AliLive 给出的观众 C 推流成功的回调,将 C 的播放地址发送给主播和 A、B、C。
  7. 主播增加与 C 的连麦(即播放C的播放地址)。
  8. 副麦 A 增加与 C 的连麦(即播放C的播放地址)。
  9. APP Server 调用 AliLive 的混流接口,C 加入混流画面。至此,观众 C 加入连麦成功。

主播终止连麦

  1. 主播向 APP Server 发送终止连麦通知,并终止连麦(即结束播放副麦 A、C 的播放地址)。
  2. APP Server向主播和 A、B、C 发送终止连麦的信号。
  3. 副麦 A 退出连麦(即结束推流、结束播放主播和副麦 C 的播放地址,开始播放混流地址)。
  4. 副麦 C 退出连麦(即结束推流、结束播放主播和副麦 A 的播放地址,开始播放混流地址)。
  5. APP Server 调用 AliLive 的混流接口,结束混流,A、C 退出混流画面。至此,连麦终止。

主播结束直播

  1. 主播向 APP Server 发送结束直播的通知,并结束推流。
  2. APP Server 向观众 A、B、C 告知直播结束。
  3. 观众 A、B、C 退出直播(即结束播放混流地址)。

    :无论是直播还是连麦的过程,推流是不可缺少的。主播会推流,副麦会推流。客户端 SDK 中就提供了能够实现推流功能的接口,这些接口中所谓的推流成功指的是直播流可以成功的发送出去。但这并不表示此时可以从服务端下载这些直播流并观看,只有收到 AliLive 中推流成功的回调后,才表示可以真正开始播放。

开始多人混流服务

接口:StartMultipleStreamMixService

接口功能:该接口对指定流启动多人混流服务。

注意事项

  • 调用该接口时主流必须存在并且收到过混流可用回调,否则该调用会失败。

  • 该接口仅用来设置混流相关参数,调用后,主流的画面不会出现改变。

  • 若对正在混流的主流调用该接口,则所有当前的混流效果将会结束,即在这种情况下,系统会自动调用 StopMultipleStreamMixService。

停止多人混流服务

接口:StopMultipleStreamMixService

接口功能:该接口对指定流停止多人混流服务。

注意事项

  • 该接口调用成功后,主流画面最终将会发生改变,所有对该流的混流画面将会消失,不会产生混流结果通知。

添加混流

接口:AddMultipleMixStreamService

接口功能:该接口将指定流添加到多人混流中。

注意事项

  • 若添加流并不在推流,调用会返回失败。该函数必须在已经推流成功后进行调用。

  • 该接口返回成功并不意味着画面已经发生改变,混流画面的改变是异步的,混流画面发生改变时,会通过回调告知用户。

移除混流

接口: RemoveMultipleStreamMixService

接口功能:该接口将指定流从多人混流中移除。

注意事项

  • 该接口调用成功后,混流画面会发生改变,不会发出回调通知用户。

混流回调通知

用户需要在连麦控制台上设置连麦回调通知。

接口功能:用于通知使用方混流的回调通知,由服务端调用,服务会使用用户在连麦控制台上设置回调的URL,以 post 一个 json 格式内容的方式通知给用户,对于混流来讲,回调包含两种,一种是混流可用回调,一种是混流结果通知回调。

http://notify_url

  1. json 格式:
  2. {
  3. NotificationType”: MixAvailableNotification”,
  4. NotificationId : xxx-xxxx-xxxx-xxxxx”,
  5. NotificationData : { 。。。。}
  6. }

参数说明

参数 含义
NotificationType 该 Notification 类型,对于混流来讲,分别为:MixAvailableNotification 对应混流可用回调和 MixResultNotification 对应混流结果通知回调。
NotificationId 该 Notification 唯一 ID,便于问题跟踪和日志追溯。
NotificationData Notification 数据 json 格式,不同 Notification 类型,会有不同的 Notification 数据格式。

混流可用回调

用于通知使用方以某路流为主流是否可以调用混流 API Start 接口。

回调格式样例:http://notify_url

  1. json 格式:
  2. {
  3. NotificationType”: MixAvailableNotification”,
  4. NotificationId : xxx-xxxx-xxxx-xxxxx”,
  5. NotificationData : {
  6. MainMixDomain”: live.aliyunlive.com”,
  7. MainMixApp”: live_mix”,
  8. MainMixStream : test001”,
  9. Event : MixAvailable
  10. }
  11. }

NotificationData 参数说明

参数 含义
MainMixDomain 域名
MainMixApp 应用
MainMixStream 流名
Event 事件

Event类型说明

Event类型 含义
MixAvailable 混流接口可用

注意事项

  • 若回调返回 HTTP 状态码为 200,AliLive 不再发送该回调。

混流结果通知回调:

用于通知使用方调用混流 API 后的异步结果通知或者混流过程中的内容是否发生改变。

回调格式样例:http://notify_url

  1. json 格式:
  2. {
  3. NotificationType”: MixResultNotification”,
  4. NotificationId : xxx-xxxx-xxxx-xxxxx”,
  5. NotificationData”: {
  6. MainMixDomain”: live.aliyunlive.com”,
  7. MainMixApp”: live_mix”,
  8. MainMixStream : test001”,
  9. MixDomain”: live.aliyunlive.com”,
  10. MixApp”: live1”,
  11. MixStream : test002”,
  12. MixTemplate : mhd”,
  13. Event : MixResult ,
  14. Code : Success”,
  15. Message”: xxx
  16. }
  17. }

NotificationData 参数说明

参数 含义
MainMixDomain 主流域名
MainMixApp 主流应用
MainMixStream 主流流名
MixDomain 副流域名
MixApp 副流应用
MixStream 副流流名
MixType 混流类型
MixTemplate 混流模版
Event 混流事件
Message 错误描述
Code 成功或者失败

Event类型说明

MixResult 混流结果

Code类型说明

Code值 语意 画面状态 建议操作
Success 混流成功 主副流叠加成功 触发相应业务逻辑
MainStreamNotExist 因主流不存在导致的混流异常 AliLive 停止输出视频流,画面停留在混流最后一帧 等待主流重推后业务恢复或者停止连麦(调用 StopMix)
MixStreamNotExist 因副流不存在导致的混流异常 主流继续播放,副流最后一帧叠加在主流上 等待副流重推后业务恢复或者停止连麦(调用 StopMix)
InternalError 内部错误导致的混流异常 不确定 等待内部重试或者停止连麦(调用 StopMix)

注意事项

  • InternalError 表示的由于内部错误导致的异常,业务可以根据需要选择等待系统自动恢复或重试或者停止连麦。

  • 主流中断或副流中断对连麦画面的影响是不一样的,主流中断时,整体视频流会中断;副流中断时,整体视频流会继续,叠加视频中主流部分继续播放,副流部分停止在最后一帧。主流中断后在 5 分钟内继续推流,系统会自动恢复前期的多人混流状态,如果超过 5 分钟,主流前期的混流状态讲会被系统清除,客户端需要自己主动调用 StartMultipleStreamMixService 和 AddMixStream 接口。辅流中断后然后继续恢复推流,系统也会自动恢复前期多人混流状态,且没有5分钟时间限制。

  • 当收到回调 code 为 MainStreamNotExist 时,主流的混流接口不可调用,需等到主流混流可用通知以后才能继续调用。

  • 若回调返回 HTTP 状态码为200,AliLive 不再发送该回调。

I:提供需要连麦的域名和 APP(连麦需要消耗大量服务端资源,业务上需要将连麦与非连麦的业务区分)

II:提供连麦的估计并发量

III:提供混流回调 URL:混流可用回调和混流结果回调

IV:将上述三个信息提供给阿里云相关人员

V:在阿里云 直播控制台 上配置直播推断流回调

本文导读目录