以保护数据安全和考虑架构合理性为出发点,我们对基于直播云服务如何进行开发提供了一些设计和编码建议。希望开发者在使用直播云服务之前详细阅读这些建议,并尽可能的符合这些原则,以免造成不必要的时间浪费和带来数据安全风险。
使用直播云构建视频直播类应用建议使用以下架构
从以上架构图中我们可以看到以下几个关键组件
在一些特别简单的应用中,客户不想自己实现用户管理与认证接口,则可以借助直播云提供的用户管理功能来完成认证。客户可以登录到直播云控制台点击用户管理菜单来进行新建、删除用户和修改密码等简单的用户管理功能。
播放端, 在移动互联网时代,直播视频一般都要求能在Android, iOS平台的移动终端上,以及PC网页上播放。根据业务的需要,我们提供不同平台的播放器以及不同的输出协议来满足在不同平台上的直播播放的需求。我们在不同平台上提供的播放器SDK包括:
以上播放器都支持支持HTTP+flv直播和点播, HTTP+m3u8直播和点播, rtmp直播和点播, 其中网页播放器暂不支持mp4点播。同时,Android和iOS平台上的播放器还支持Flv和rtmp的短延迟直播播放模式。
如果需要将直播云的直播视频分享到微信上,则需要在直播云上配置输出m3u8格式。因为微信上不允许调用外部的播放器,只能使用系统内置播放器,在iOS平台上以及Android4.0以下平台, m3u8是被平台内置播放器支持的直播流格式。如果还需要支持Android 4.0以下平台上的微信,则在分享网页上判断平台版本,在低版本的Android平台上调用沃安提供的网页播放器来播放m3u8.
综上的所述,直播云提供以下组件来简化客户开发直播应用的过程:
从基本架构中可以看出,业务服务器如果要维护直播列表有两种方式 1.接收直播云的直播回调,将直播开始通知中的直播播放地址存到业务数据库中的直播数据表中,接收直播云的直播结束回调,将直播地址从业务数据库的直播数据表中删除。 2.访问直播云的API,获取当前最新的任务列表,从任务列表中解析每个任务的直播地址,更新业务数据库中的直播数据表。
以上两种方式看上去都可行,并且方式2看上去更简单些。实际上两种方式实现的效果有些细微的差别
直播云有尝试机制,如果网络不可达则会尝试重新回调,但如果网络异常持续时间较长,在多次尝试后会放弃。
所以要建立一个可靠的,实时性较高的直播列表,需要方式1和方式2结合使用,方式1建立实时的直播列表,然后通过方式2定时刷新来精确同步列表。
直播云主要解决应用中和视频相关的问题,其设计原则是尽可能与业务隔离,以满足在不同场景下的灵活应用。但是在有的业务场景中,应用层希望能通过直播云直接在直播采集端与业务服务器之间传输一些数据,并且这些数据需要和当前视频绑定起来。
考虑以下业务场景:
要简单实现上面的业务功能,就需要了解opaque字段的概念。
如上图所示:
{"longitude": 102.32121, "latitude": 37.420123, "category": "news"}
这样,在直播开始、结束、存档通知中业务服务器的接口会收到本次直播相应的opaque数据,这样在保存相关视频播放地址和id至数据库时,可以关联保存opaque中所带来的信息。在以创建任务的形式拉流直播时,可以在任务描述中加入opaque字段,在这个直播任务中关联业务数据,以达到同样的目的。这样的任务描述xml如下形式:
<root>
<task>
...
<opaque>hello</opaque>
...
<input>
...
</input>
<output>
....
</output>
</task>
</root>