通過閱讀本文,您可以瞭解iOS端阿里雲播放器SDK實現超低延時直播的方法。
前提條件
環境中已安裝CocoaPods。
SDK整合
使用pod方式添加阿里雲播放器SDK的依賴檔案。
開啟終端視窗。
進入專案所在路徑,建立Podfile檔案。
pod init
編輯Podfile檔案,添加最新版本的依賴。
player_sdk_version = 'x.x.x' # 建議使用最新版本 rts_sdk_version = '7.12.0' # 獨立版本號碼,目前最新版本 # 播放器SDK pod 'AliPlayerSDK_iOS' , player_sdk_version # 播放器與Rts低延時直播組件的橋接層(AlivcArtc),版本號碼需要與播放器一致,需要和 Rts低延時直播組件 一起整合 pod 'AliPlayerSDK_iOS_ARTC' , player_sdk_version # Rts低延時直播組件 pod 'RtsSDK' , rts_sdk_version重要播放器與RTS低延時直播組件的橋接層(AlivcArtc)需與播放器版本號碼保持一致,且必須與RTS低延時直播組件同時整合。
播放器版本請參考SDK下載,建議使用最新版本。阿里雲播放器版本要求:推薦使用最新版本,最低支援V5.4.5.0。
常見問題請參見iOS播放器常見問題。
安裝SDK。執行之後,會產生*.xcworkspace檔案,表示SDK整合完畢。
pod install
阿里雲播放器SDK介面使用
調用阿里雲播放器SDK介面實現超低延時直播功能。更多阿里雲播放器SDK功能,請參見進階功能和API說明。
以下為範例程式碼。詳細代碼請參見API-Example RTS超低延時直播播放模組,該工程是基於Objective-C的阿里雲播放器SDK iOS樣本工程,能夠協助開發人員快速掌握SDK核心功能整合。
基於阿里雲播放器實現RTS拉流時,不能調用pause暫停直播流。您可以先調用stop停止播放,再調用prepare重新播放。
不支援seek(拖動)。
建立播放器
建立播放器。
建立AliPlayer播放器。
// 建立播放器執行個體 AliPlayer mAliPlayer = [[AliPlayer alloc] init]; // 建立用於承載播放畫面的視圖容器,並設定播放器渲染視圖 UIView playerView = [[UIView alloc] initWithFrame:self.view.bounds]; [self.view addSubview:playerView]; mAliPlayer.playerView = playerView; [mAliPlayer setTraceID:traceId];說明播放器提供的播放品質監控(可查看播放器整體播放品質相關資料)、單點追查(可定位到具體的使用者或裝置,分析其播允許存取為,快速定位播放異常等問題)及視頻播放統計功能都依賴埋點日誌上報功能而實現。
在建立播放器時,根據
setTraceID參數的設定不同,其後續可實現的功能不同,具體如下:setTraceID參數不傳(預設):埋點日誌上報功能開啟,後續可以使用播放品質監控和視頻播放統計功能,無法使用單點追查功能。setTraceID參數傳入traceid:traceid的值由您自行定義,需為您的使用者或使用者裝置的唯一識別碼,例如傳入您業務的userid或者IMEI、IDFA等您業務使用者的裝置ID。傳入traceid後,埋點日誌上報功能開啟,後續可以使用播放品質監控、單點追查和視頻播放統計功能。setTraceID參數設定為DisableAnalytics:關閉埋點日誌上報,後續無法使用播放品質監控、單點追查和視頻播放統計功能。
設定播放源。
播放器支援4種播放源:VidSts、VidAuth、VidMps和UrlSource。其中UrlSource是直接URL播放,需要將URL設定為
artc://協議,才可以使用RTS服務。AVPUrlSource *urlSource = [[AVPUrlSource alloc] urlWithString:"artc://<播流地址>"]; [mAliPlayer setUrlSource:urlSource];說明更多設定播放源方法,請參見基礎功能。
配置播放參數。
配置播放參數,提升超低延時直播效果。
說明6.3.0版本以及之後的播放器SDK均支援自動低延時最佳配置,當播放URL為“artc://”開頭,且客戶沒有手工修改過
AVPConfig的MaxDelayTime、HighBufferDuration、StartBufferDuration值時,SDK會自動分別使用1000、10、10值進行實際的播放。若想自訂控制,請參考如下樣本:
//1. 擷取並修改配置 AVPConfig *config = mAliPlayer.getConfig; if ([playUrl hasPrefix:@"artc://"]) { //最大延時為1秒 [config setMaxDelayTime:1000]; //起播緩衝時間長度 [config setStartBufferDuration:10]; //卡頓恢複緩衝時間長度 [config setHighBufferDuration:10]; } else { //config使用預設配置或自訂為其他配置 } //2. 應用配置 [mAliPlayer setConfig:config];開始播放。
// 準備播放 [mAliPlayer prepare]; // prepare 以後可以同步調用 start 操作,onPrepared 回調完成後會自動起播 [mAliPlayer start];
控制播放
iOS播放器SDK支援開始、從指定時間點播放等主流操作。
開始播放
開始播放視頻,由start介面實現。樣本如下:
[mAliPlayer start];停止播放
停止播放視頻,由stop介面實現。樣本如下:
[mAliPlayer stop];銷毀播放器
銷毀播放器執行個體,有同步和非同步兩種銷毀方式,樣本如下:
//同步銷毀,內部會自動調用stop介面
[mAliPlayer destroy];
//非同步銷毀,內部會自動調用stop介面
[mAliPlayer destroyAsync];調用同步銷毀介面需等待播放器資源完全釋放後才返回。如果您對介面的響應速度有較高要求,建議使用非同步銷毀介面,並注意以下幾點:
避免在非同步銷毀過程中對播放器對象執行任何其他動作。
無需在調用非同步銷毀之前手動停止播放器,因為該過程內部已經包含了非同步化的停止流程。
協助工具功能
日誌開關
// 開啟日誌 [mAliPlayer setEnableLog:YES]; [mAliPlayer setLogCallbackInfo:LOG_LEVEL_TRACE callbackBlock:nil]; // 關閉日誌 [mAliPlayer setEnableLog:NO]; [mAliPlayer setLogCallbackInfo:LOG_LEVEL_NONE callbackBlock:nil];直播降級
說明播放失敗降級僅針對逾時情境,播放逾時情境下若配置了以下任一降級方案,則會進行降級播放處理;否則觸發播放器onError回調。例如404、403或主播斷流等異常不會觸發降級。
RTS自動降級使用相同網域名稱實現RTS至FLV降級。若您的RTS與FLV網域名稱不一樣,需配置RTS自訂降級方案以指定目標FLV網域名稱。
RTS自動降級(預設開啟)
在使用超低延時直播RTS地址播放的情境下,當未配置RTS自訂降級且RTS拉流失敗時,會自動降級到RTS對應的預設FLV地址進行播放。樣本如下:
// 1表示開啟,0表示關閉。預設開啟 [AliPlayerGlobalSettings setOption:ALLOW_PRE_RENDER valueInt:1];RTS自訂降級
在使用超低延時直播RTS地址播放的情境下,通過設定RTS的降級地址(如HLS地址或FLV地址),當RTS拉流失敗時,會自動降級到該地址播放。
//設定降級源downgradeUrl AVPUrlSource *urlSource = [[AVPUrlSource alloc] urlWithString:downgradeUrl]; //可選,配置config其他項 AVPConfig *config = [mAliPlayer getConfig]; //設定降級URL [mAliPlayer enableDowngrade:urlSource config:config];
擷取TraceID
每一次低延時播放都會有一個traceId,可用於問題排查,可以通過播放器事件回調拿到traceid
//監聽播放器 onPlayerEvent 回調,並解析 DemuxerTraceID 訊息 - (void)onPlayerEvent:(AliPlayer*)mAliPlayer eventWithString:(AVPEventWithString)eventWithString description:(NSString *)description { switch (eventWithString) { case EVENT_PLAYER_DEMUXER_TRACE_ID: { NSString *traceId = description; } break; default: break; } }