七牛云直播的第一个适用场景就是移动直播APP的开发。
首先,我们需要熟悉一下移动直播APP的场景之下的业务模型。在这个场景之下,集成七牛云直播推流SDK和播放器的各类手机APP就是直播的推流端,也就是直播流的数据来源端。而推流的方向就是七牛云直播服务端。
还有一个重要的角色就是客户自己的业务服务器,这个业务服务器通过七牛云直播提供的服务端SDK来创建流,发送推流所需的JSON格式数据给客户端,接收流状态改变的回调等。
在上面的业务模型图中,我们可以看到客户端推流之前必须从业务服务器获取一个关于流的JSON格式的数据,这个JSON格式的数据包含了推流所必需的信息,比如推流地址等信息,这些信息会被七牛的推流SDK自动解析。
服务端创建流和返回对应的JSON数据可以参考上面的服务端SDK的Github地址中的README。
客户端请求业务服务器流的JSON数据的时候,业务服务器通过和该用户绑定的流ID去获取流的JSON格式数据。其实这个过程并不需要每次都和七牛云直播服务端交互。一般用户创建帐号的时候,可以对应地调用七牛的服务端SDK生成一个流,并把这个流的JSON数据保存到数据库中,因为这个JSON数据一般是不会变化的。接下来的过程就是客户端开始推流,然后七牛云直播服务端接受流数据,推流的上行业务就完成了。
对于直播应用来讲,除了推流功能之外,当然还有就是播放功能了。由于在实践中,RTMP协议的播放延迟小于FLV协议的播放延迟,也小于HLS协议的播放延迟。所以在移动直播中,我们推荐播放RTMP的地址,但是由于iOS和Android的系统默认的播放器无法播放RTMP协议的流,所以七牛云直播还提供了定制的播放器,方便客户接入直播播放。
概括起来就是:
用户注册直播应用的帐号
• 业务服务器收到注册的帐号后,可以根据业务设计,这个时候可以主动利用直播服务端SDK中的createStream方法去创建一个流,并把流ID和流的JSON信息分别和用户信息绑定保存到数据库中。流JSON信息通过 stream->toJSONString()方法获取。请求推流Stream
• 客户端将要推流的时候,向业务服务器请求推流所需要的流信息,即流对象的JSON表示。开始推流
• 客户端推流 给 Pili Streaming Cloud (七牛云直播服务端)
这里面的步骤和上面的业务模型图有一些区别,最主要的原因就是业务服务器可以优化创建流和获取流信息的步骤。因为对于每一个固定的流来讲,这些信息都是不变的。
在直播播放的业务逻辑中,客户端首先要从业务服务器获取流播放的RTMP地址。这个地址同样可以使用服务端的SDK获得。和上面的模型一样,当一个用户绑定一个流的时候,一般情况下,这个流的RTMP播放地址都是不变的,所以业务服务器可以把相关的信息都写到数据库中,并不需要每次都利用服务端SDK去查询。
概括起来就是:
客户端获取直播的播放地址
• 这个步骤里面的播放地址可以是RTMP,FLV,也可以是HLS的播放地址,分别是通过stream->rtmpLiveUrls()
,stream->httpFlvLiveUrls()
,stream->hlsLiveUrls()
,三个方法获取的。出于优化业务逻辑的考虑,这写方法获取的播放地址也可以保存到业务数据库中,因为对于一个流来说,它们基本上是不变的。客户端播放直播的地址
直播流ID
在业务服务器利用服务端SDK和七牛云直播服务交互的过程中,一个重要的参数就是流的ID,这个流的ID,
由三部分组成。
其中 z1 是固定不变的,hubdemo表示注册的直播服务的应用名称,titleofstream指的是利用SDK创建流的时候,指定的流的标题,这个标题不可以包含中文,命名规则为:4到100个字符,英文+数字组成 格式要求:^[a-zA-Z0-9_-]{4,100}$
,另外直播流标题不能重复。
有些情况下,客户可能拥有自己的房间号,那么建立起房间号和流ID之间的对应关系即可。
推流端快速接入
从上面的介绍中,我们可以得知,接入七牛云直播推流SDK最简单的只需要一步,就是修改SDK附带的Demo中获取的流的JSON String,就可以进行推流了。
同样,对于播放端来讲,只需要把流的直播播放地址填入播放器附带的Demo中即可集成播放功能。
这些步骤的详细信息,可以参考各个SDK的Github主页,有详细的介绍。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。