时移直播基于常规的HLS视频直播,直播推流被切分红TS分片,经过HLS协议向播放用户分发,用户请求的m3u8播放文件中包含不断刷新的TS分片地址;对于常规的HLS直播而言,TS分片地址及相应的TS文件并不持久化保存,致使当前时间以前的直播视频内容没法回溯;而对于开通了时移功能的HLS直播而言,TS分片地址及相应TS文件会分别在数据库和OSS中持久化保存最长15天,使得回溯从直播开始时间到当前时间之间的视频内容成为可能。详情参见 直播时移, 播放器的表现为:html
直播时移在播放器中的表现为能够支持当前时间以前的直播内容的回看,当鼠标放到进度条上面时,会出现负数的时间提示,表示回看以前的几分几秒的视频。git
Aliplayer提供了下面的一些属性支持直播时移的配置:github
名称 | 必选 | 说明 |
---|---|---|
isLive | 是 | 值设置为true |
liveTimeShiftUrl | 否 | 时移信息查询URL怎么生成参考直播时移 |
liveStartTime | 是 | 直播开始时间 |
liveOverTime | 是 | 直播结束时间 |
liveShiftSource | 否 | 直播时移hls地址,只有在source为flv直播流是须要设置 |
基本的代码:数据库
var player = new Aliplayer({ id: "player-con", source: "https://video-dev.github.io/streams/x36xhzz/x36xhzz.m3u8", width: "100%", height: "500px", autoplay: true, isLive: true, liveStartTime:"2018/12/25 16:00:00", liveOverTime:"2018/12/25 18:00:00", }, function (player) { console.log("播放器建立成功"); });
播放器的直播时移功依赖于阿里云直播服务的直播时移,首先须要到阿里云直播服务里开通,详情参见 直播时移。微信
HLS的延迟比较高,差很少10秒左右, 而flv的延迟基本到3秒左右,所以对于但愿低延迟的场景,能够在直播时使用flv地址播放, 切换到时移时使用HLS的地址播放, Aliplayer支持这种模式: source属性指定flv直播地址, liveShiftSource属性指定hls的地址:app
{ source:'http://localhost/live/test.flv', //flv的播放地址 liveShiftSource:'http://localhost/live/test.m3u8', //支持直播时移的HLS地址 }
另外须要指定recreatePlayer函数回调,用于切换为flv直播时,从新建立播放器:dom
var player = ""; var create = function(){ player = new Aliplayer({ recreatePlayer:function(){ create(); }, ..... }, function(player){ console.log('播放器已经建立'); }); }
所以完整的代码为:ide
var player = ""; var create = function(){ player = new Aliplayer({ id: "player-con", width: "100%", height: "500px", autoplay: true, //直播时移相关的属性 isLive: true, liveStartTime:"2018/12/25 16:00:00", liveOverTime:"2018/12/25 18:00:00", source:'http://localhost/live/test.flv', liveShiftSource:'http://localhost/live/test.m3u8', recreatePlayer:function(){ create(); }, ..... }, function(player){ console.log('播放器已经建立'); }); }
当在回放状态的时候,能够点击Control的"LIVE"图标,能够切换为直播状态:函数
当须要区间回放时候,直播服务的播放地址经过添加相关的参数,能够回放指定区间的视频,具体参考:直播时移 可是有一种特殊状况须要说明,若是时移回放的是之前某个区间的视频, 好比当前是17点, 须要回看15点-16点的视频,则能够推荐使用点播模式的地址,结束时间使用"vodend"参数,若是使用直播模式会有下面的问题:阿里云
好比直播地址为http://domain/app/stream.m3u8, 当使用直播结束时间是,地址格式为:
http://domain/app/stream.m3u8?lhs_start=1&lhs_start_human_s_8=20171024160220&lhs_end_human_s_8=20171024160420"
使用点播结束时间的地址格式为:
http://domain/app/stream.m3u8?lhs_start=1&lhs_start_human_s_8=20171024160220&lhs_vodend_human_s_8=20171024160420"
主要区别结束参数lhs_end_human_s变为lhs_vodend_human_s, 使用点播格式的时间,表示使用点播模式回看,一次返回指定时间段内的全部切片,包含endlist标签。Aliplayer就使用点播模式观看isLive设置为false.
let player = new Aliplayer({ id: "player-con", width: "100%", height: "500px", autoplay: true, //不使用直播 isLive: false, //直播时移的播放地址 source:'http://localhost/live/test.m3u8?lhs_start=1&lhs_start_human_s_8=20171024160220&lhs_vodend_human_s_8=20171024160420"', }, function(player){ console.log('播放器已经建立'); });
原文连接 更多技术干货 请关注阿里云云栖社区微信号 :yunqiinsight