基本介绍
时移直播基于常规的 HLS 视频直播, 直播推流被切分成 TS 分片, 通过 HLS 协议向播放用户分发, 用户请求的 m3u8 播放文件中包含不断刷新的 TS 分片地址; 对于常规的 HLS 直播而言, TS 分片地址及相应的 TS 文件并不持久化保存, 导致当前时间之前的直播视频内容无法回溯; 而对于开通了时移功能的 HLS 直播而言, TS 分片地址及相应 TS 文件会分别在数据库和 OSS 中持久化保存最长 15 天, 使得回溯从直播开始时间到当前时间之间的视频内容成为可能. 详情参见 直播时移, 播放器的表现为:
直播时移在播放器中的表现为可以支持当前时间之前的直播内容的回看, 当鼠标放到进度条上面时, 会出现负数的时间提示, 表示回看之前的几分几秒的视频.
Aliplayer 的使用
Aliplayer 提供了下面的一些属性支持直播时移的配置:
基本的代码:
- var player = new Aliplayer({
- id: "player-con",
- source: "",
- 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 的地址:
- {
- source:'http://localhost/live/test.flv', //flv 的播放地址
- liveShiftSource:'http://localhost/live/test.m3u8', // 支持直播时移的 HLS 地址
- }
另外需要指定 recreatePlayer 函数回调, 用于切换为 flv 直播时, 重新创建播放器:
- var player = "";
- var create = function(){
- player = new Aliplayer({
- recreatePlayer:function(){
- create();
- },
- .....
- },
- function(player){
- console.log('播放器已经创建');
- });
- }
因此完整的代码为:
- 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" 参数, 如果使用直播模式会有下面的问题:
duration 计算不准确
播放端的卡顿, 暂停等操作, 会导致直播服务返回的切片列表不准确
比如直播地址为 http://domain/App/stream.m3u8, 当使用直播结束时间是, 地址格式为:
"使用点播结束时间的地址格式为:"
主要区别结束参数 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:'"',
- },
- function(player){
- console.log('播放器已经创建');
- });
来源: http://www.bubuko.com/infodetail-2924159.html