观众端如何和主播端同步直播状态,以提升用户体验?

杨帆提问于 2018-01-20 18:09
1 个回答
  • 小白2018-01-20 21:31

    "默认情况下,观众端播放器SDK不会和主播端直播推流SDK同步直播状态。 

    如果可以拉流,则正常播放;如果拉流失败,则等到30秒钟后超时,报告播放失败。(Android/iOS/Web播放器都可以自定义超时时间) 

    如果要同步直播状态,提升用户体验,则需结合您的应用服务器(AppServer)来处理,参考方法如下: 

    应用服务器需要维护下列对应关系(以下仅为示例): 

    用户账号UserID — 直播间号码RoomID — 直播频道cid — 直播状态 LiveStatus。 

    首先,主播进入直播间以后,开始进行直播,当直播推流SDK报告开始直播成功通知的时候,APP向应用服务器发送消息,告知直播已经开始,应用服务器收到此消息后,设置直播状态,例如:LiveStatus = 1,并将处于此直播状态的条目展示到直播大厅的直播列表中; 相应地,观众端每次进入直播大厅的时候,要向应用服务器请求最新的直播列表。 

    在直播过程中,APP定期向应用服务器发送消息,以保持同步直播状态。 

    主播切后台的时候,APP向应用服务器发消息,应用服务器收到此消息后,设置直播状态,例如:LiveStatus = 2,并将此消息推送到同一直播间的所有观众端APP,当观众端APP收到此消息后,可进行提示,例如“主播暂时离开,请稍候”。 

    当主播结束直播的时候,直播推流SDK返回成功结束直播通知以后,APP向应用服务器发送消息,应用服务器收到此消息后,设置直播状态,例如:LiveStatus = 0,并将此消息推送到同一直播间的所有观众端APP,当观众端APP接收到此消息后,可进行提示,例如“直播已结束”。 

    异常处理:如果超过特定的预设时间,应用服务器仍然没有收到对应主播端发送的任何消息,可以再到网易服务器同步一下直播状态。如果网易服务器也返回该直播频道状态为“空闲”,可以判定主播已经异常结束。 (异常情况举例:手机没电,进程被杀,网络中断等,主播端任何消息都发不出来) 

    附:网易云获取频道状态的接口,具体请见:直播服务端API文档(2.4 获取频道状态)

    建议1:直播大厅列表可以允许所有观众查询,直播间消息只需对特定直播间内的用户进行同步推送即可。 

    建议2:刷新直播大厅列表时,一般都有图片,需要把图片进行缓存,已下载的图片不要再重新下载,这样既提升加载速度,也节省下载流量。当达到预设的缓存空间上限,或者APP退出时,再清除图片缓存。