阿里雲移動端播放器高級功能---直播時移

基本介紹

一般都知道直播是沒法seek拖動的,那麼針對在直播中想回看以前直播過的內容的用戶來講,直播時移就能派上用場。咱們阿里雲播放器支持了直播時移功能,用戶能較爲方面和快速的使用直播時移的功能。
先來看一下直播時移的介紹:時移直播基於常規的HLS視頻直播,直播推流被切分紅TS分片,經過HLS協議向播放用戶分發,用戶請求的m3u8播放文件中包含不斷刷新的TS分片地址;對於常規的HLS直播而言,TS分片地址及相應的TS文件並不持久化保存,致使當前時間以前的直播視頻內容沒法回溯;而對於開通了時移功能的HLS直播而言,TS分片地址及相應TS文件會分別在數據庫和OSS中持久化保存最長15天,使得回溯從直播開始時間到當前時間之間的視頻內容成爲可能。
更多的信息能夠參考官網介紹:直播時移html

先來看一下時移效果圖:
數據庫

時移原理

時移是經過時間軸url(TimeLineUrl) 去實時獲取到能夠時移的時間範圍。在這個時間範圍內的直播流,能夠往回拖拽,回看以前的內容。拖拽時,播放器內部經過更新直播流的地址,加上起播的時間參數,而後從服務器拉取新的流,達到回看的目的。api

接口和示例

Android使用

時移源的設置

AliyunVodPlayer 提供了 AliyunLiveTimeShift 這個類做爲直播時移的播放源。其中setUrlsetTimeLineUrl是主要涉及的兩個地址。
setUrl:這個設置的是直播流的地址。經過這個地址,播放器播放對應的直播源。
setTimeLineUrl:這個設置的是時移區間的獲取地址。播放器將會每隔1分鐘調用一次此接口去更新時移時間段。
(如何生成TimeLineUrl,請參考:直播時移服務器

時移信息的獲取

時移的獲取,跟普通的點播信息獲取基本相似,可是有特有的新增接口(Android):
getCurrentLiveTime:獲取當前直播的時間點。
getCurrentTime:獲取當前播放的時間點。app

好比:如今是2019-01-30 14:01:04,播放的時候,往前時移了1分鐘。那麼:
getCurrentLiveTime = 2019-01-30 14:01:04。
getCurrentTime = 2019-01-30 14:00:04。ide

示例

//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;

具體使用過程:atom

//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)];
 

做者: 雋阜
原文連接
本文爲雲棲社區原創內容,未經容許不得轉載。url

相關文章
相關標籤/搜索