基本介绍

通常都知道直播是无法seek拖动的,那么针对在直播中想回看之前直播过的内容的用户来说,直播时移就能派上用场。我们阿里云播放器支持了直播时移功能,用户能较为方面和快速的使用直播时移的功能。
先来看一下直播时移的介绍:时移直播基于常规的HLS视频直播,直播推流被切分成TS分片,通过HLS协议向播放用户分发,用户请求的m3u8播放文件中包含不断刷新的TS分片地址;对于常规的HLS直播而言,TS分片地址及相应的TS文件并不持久化保存,导致当前时间之前的直播视频内容无法回溯;而对于开通了时移功能的HLS直播而言,TS分片地址及相应TS文件会分别在数据库和OSS中持久化保存最长15天,使得回溯从直播开始时间到当前时间之间的视频内容成为可能。
更多的信息可以参考官网介绍:直播时移

先来看一下时移效果图:

时移原理

时移是通过时间轴url(TimeLineUrl) 去实时获取到可以时移的时间范围。在这个时间范围内的直播流,可以往回拖拽,回看之前的内容。拖拽时,播放器内部通过更新直播流的地址,加上起播的时间参数,然后从服务器拉取新的流,达到回看的目的。

接口和示例

Android使用

时移源的设置

AliyunVodPlayer 提供了 AliyunLiveTimeShift 这个类作为直播时移的播放源。其中setUrlsetTimeLineUrl是主要涉及的两个地址。
setUrl:这个设置的是直播流的地址。通过这个地址,播放器播放对应的直播源。
setTimeLineUrl:这个设置的是时移区间的获取地址。播放器将会每隔1分钟调用一次此接口去更新时移时间段。
(如何生成TimeLineUrl,请参考:直播时移)

时移信息的获取

时移的获取,跟普通的点播信息获取基本类似,但是有特有的新增接口(Android):
getCurrentLiveTime:获取当前直播的时间点。
getCurrentTime:获取当前播放的时间点。

比如:现在是2019-01-30 14:01:04,播放的时候,往前时移了1分钟。那么:
getCurrentLiveTime = 2019-01-30 14:01:04。
getCurrentTime = 2019-01-30 14:00:04。

示例

//1.创建时移对象
mAliyunLiveTimeShift = new AliyunLiveTimeShift();
long currentSeconds = System.currentTimeMillis() / 1000;//2.设置直播流地址
mAliyunLiveTimeShift.setUrl("http://pull-videocall.aliyuncs.com/timeline/test.m3u8");//3.设置时移区间地址。
mAliyunLiveTimeShift.setTimeLineUrl("http://pull-videocall.aliyuncs.com/openapi/timeline/query?lhs_start=1&app=timeline&stream=test&format=ts&lhs_start_unix_s_0="+ (currentSeconds - 5 * 60) + "&lhs_end_unix_s_0=" + (currentSeconds + 5 * 60));//4.准备时移源。
mPlayer.prepareAsync(mAliyunLiveTimeShift);
复制代码

iOS接口和示例

iOS提供了以下接口来使用直播时移:

//直播时间
@property (nonatomic, assign) NSTimeInterval liveTime;//播放时间
@property (nonatomic, assign) NSTimeInterval currentPlayTime;//每60秒更新用户时移时间,设置更新区间url后,可以获取
@property (nonatomic, strong) AliyunPlayerVideoTimeShiftModel *timeShiftModel;//设置直播数据源
- (void)prepareWithLiveTimeUrl:(NSURL *)liveTimeUrl;//设置时移区间更新url
- (void)setLiveTimeShiftUrl:(NSString*)liveTimeShiftUrl;//时移到指定的时间
- (void)seekToLiveTime:(NSTimeInterval)startTime;
复制代码

具体使用过程:

//1.设置时移区间更新url,地址需要用当前时间来进行拼写
NSTimeInterval currentSeconds = [[NSDate date] timeIntervalSince1970]; //秒NSString *currentLive = [NSString stringWithFormat:@"http://push-demo.aliyunlive.com/openapi/timeline/query?app=asr&stream=yunxi&format=ts&lhs_start_unix_s_0=%.0f&lhs_end_unix_s_0=%.0f",(currentSeconds - 5 * 60), (currentSeconds + 5 * 60)];
[self.vodPlayer setLiveTimeShiftUrl:currentLive];//2. 准备直播时移播放地址
[self.vodPlayer prepareWithLiveTimeUrl:[NSURL URLWithString:@"http://push-demo.aliyunlive.com/asr/yunxi.m3u8"]];//3. 播放成功后可以更新界面UI显示
//开始时间
double start = self.vodPlayer.timeShiftModel.startTime;
//记录总的结束时间
self.vodPlayer.timeShiftModel.endTime//4. 拖动seek时移区间,通过进度条计算出来具体的时移时间
[self.vodPlayer seekToLiveTime:(int)(n*sender.value+s)];
复制代码

原文链接

本文为云栖社区原创内容,未经允许不得转载。

转载于:https://juejin.im/post/5c7e318951882540713f6a92

阿里云移动端播放器高级功能---直播时移相关推荐

  1. 阿里云移动端播放器高级功能---安全播放

    基本介绍 如何保障视频内容的安全,不被盗链.非法下载和传播,阿里云视频点播已经有一套完善的机制保障视频的安全播放: 那么在播放器中支持哪一些安全播放的机制呢? 这里有料:视频安全解决方案. Refer ...

  2. 阿里云移动端播放器高级功能---视频下载

    基本介绍 优酷.爱奇艺.腾讯等主流的视频类App都有视频离线下载的功能,主要目的是在wifi下将视频离线在本地,然后在无网或者4G的情况下去观看离线视频.那么阿里云播放器也提供了视频下载的功能.这个功 ...

  3. 阿里云移动端播放器高级功能---画面控制 1

    基本介绍 经常遇到一些开发者问: 1.我们播放的时候,会有黑边怎么处理?尤其是在类似于抖音,直播这样的场景下,如果视频有黑边,很影响画面的视觉效果.而阿里云播放器提供了缩放功能,用来去除黑边,达到视频 ...

  4. 阿里云移动端播放器高级功能---截图和音频波形

    基本介绍 如果用户对视频播放中的某一帧画面特别感兴趣,可以使用截图功能将这一帧视频保存起来.另外有一种场景想知道是否有声音,或者想感知声音的大小震动频率等,可以通过显示一个声音的波形来形象的表示.如下 ...

  5. 阿里云移动端播放器高级功能---截图和音频波形 1

    基本介绍 如果用户对视频播放中的某一帧画面特别感兴趣,可以使用截图功能将这一帧视频保存起来.另外有一种场景想知道是否有声音,或者想感知声音的大小震动频率等,可以通过显示一个声音的波形来形象的表示.如下 ...

  6. 阿里云移动端播放器高级功能---画面控制

    基本介绍 经常遇到一些开发者问: 1.我们播放的时候,会有黑边怎么处理?尤其是在类似于抖音,直播这样的场景下,如果视频有黑边,很影响画面的视觉效果.而阿里云播放器提供了缩放功能,用来去除黑边,达到视频 ...

  7. 阿里云点播 web 播放器

    浅谈 最近遇到很多人使用阿里云点播 web 播放器,通过 STS 令牌的方式去播放 MTS 转码完成后的资源出现问题,"路见不平一声吼,写个过程先献丑",只是做了最基础的功能,看官 ...

  8. 【大数据技术干货】阿里云伏羲(fuxi)调度器FuxiMaster功能简介(一) 多租户(QuotaGroup)管理...

    原文链接:http://click.aliyun.com/m/13950/ 各位好,这是介绍阿里云伏羲(fuxi)调度器系列文章的第一篇,今天主要介绍多租户(QuotaGroup)管理的实现 一.Fu ...

  9. 阿里云点播集成播放器的SDK时遇到的黑屏有声音的问题

    在集成阿里云的点播功能时,集成他的sdk后播放视频遇到,有声音没有画面的问题! 在mPlayer = new AliVcMediaPlayer(AliVcMediaPlayerActivity.thi ...

最新文章

  1. 一个Git项目多个仓库
  2. CF858F Wizard's Tour 解题报告
  3. Dll注入经典方法完整版
  4. 如何快速弄懂一个新模型_如何评估创业项目是否靠谱?一个新的模型 | 创创锦囊...
  5. AOP底层原理与注解配置详解
  6. 微服务 mysql 连接池_【mysql】druid,连接池和微服务的问题
  7. php 不通过表单post,php – 简单表单不通过_POST发送数据
  8. 请用c语言写出冒泡排序的程序,请问一下这个C语言冒泡排序程序思想
  9. 台式电脑连接电脑主机与显示器
  10. 【3D动态脑图制作软件】万彩脑图大师教程 | 将思维导图输出到云服务
  11. 如何查html病毒svchost.exe,解决html文件的DropFileName = svchost.exe木马
  12. java float 输出文本框_关于Java中float数输出时显示问题
  13. 1.8 收集的XSS Payload
  14. MEDA: Meta-Learning with Data Augmentation for Few-Shot Text Classification
  15. H3C交换机环路监测,NTP时间同步。
  16. 股票的大底部形态,常见几种底部形态详解
  17. 有什么免费的思维导图软件可以推荐?
  18. 汽车鸿蒙音响怎么调,汽车音响怎么调试 汽车音响调试步骤方法【详细介绍】...
  19. Android有用代码(二)
  20. 维护站点和建站时遇到的一些问题

热门文章

  1. VMware vSphere快照之间的互相关系
  2. keepalived+LVS的实现
  3. 发现一个工具,可以清除 xp win7 用户密码,在PE下运行
  4. Java http协议概述
  5. 延迟环境变量扩展(bat)
  6. 2011年中国程序员薪水调查报告
  7. 在windows下搭建React Native Android开发环境
  8. SNMP AGENT函数介绍
  9. Django系列教程:三、动态视图和动态Url
  10. [CTO札记]高效能辅导(Coach)转摘