日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

iOS端實現RTS拉流

通過閱讀本文,您可以了解iOS端阿里云播放器SDK實現超低延時直播的方法。

前提條件

環境中已安裝CocoaPods。

SDK集成

使用pod方式添加阿里云播放器SDK的依賴文件。

  1. 打開終端窗口。

  2. 進入項目所在路徑,創建Podfile文件。

    pod init

  3. 編輯Podfile文件,添加最新版本的依賴。

    //播放器主庫,請盡量使用最新版
    pod 'AliPlayerSDK_iOS', '6.19.0'
    //Rts膠水層庫,版本號數字與播放器主庫需保持一致
    pod 'AliPlayerSDK_iOS_ARTC', '6.19.0'
    //RtsSDK組件,獨立版本號,最新是2.6.3
    pod 'RtsSDK', '2.6.3'
    說明
    • 播放器版本請參考SDK下載,建議使用最新版本。

    • 此處Pod依賴的版本僅供參考。獲取最新的版本,阿里云播放器SDK請參見iOS播放器SDK超低延時直播SDK請參見SDK下載

  4. 安裝SDK。執行之后,會生成*.xcworkspace文件,表示SDK集成完畢。

    pod install

阿里云播放器SDK接口使用

調用阿里云播放器SDK接口實現超低延時直播功能。更多阿里云播放器SDK功能,請參見進階功能API說明

說明
  • 以下為示例代碼。詳細代碼請參見開源項目

  • 基于阿里云播放器實現RTS拉流時,不能調用pause暫停直播流。您可以先調用stop停止播放,再調用prepare重新播放。

  • 不支持seek(拖動)。

創建播放器

這部分介紹如何用最簡單的方式讓iOS播放器SDK播放視頻,按照播放方式的不同可以分為手動播放和自動播放。

  1. 創建播放器。

    創建AliPlayer播放器。

    說明

    播放器提供的播放質量監控(可查看播放器整體播放質量相關數據)、單點追查(可定位到具體的用戶或設備,分析其播放行為,快速定位播放異常等問題)及視頻播放統計功能都依賴埋點日志上報功能而實現。

    在創建播放器時,根據setTraceId參數的設置不同,其后續可實現的功能不同,具體如下:

    • setTraceId參數不傳(默認):埋點日志上報功能開啟,后續可以使用播放質量監控和視頻播放統計功能,無法使用單點追查功能。

    • setTraceId參數傳入traceid:traceid的值由您自行定義,需為您的用戶或用戶設備的唯一標識符,例如傳入您業務的userid或者IMEI、IDFA等您業務用戶的設備ID。傳入traceid后,埋點日志上報功能開啟,后續可以使用播放質量監控、單點追查和視頻播放統計功能。

    • setTraceId參數設置為DisableAnalytics:關閉埋點日志上報,后續無法使用播放質量監控、單點追查和視頻播放統計功能。

    // 創建播放器
    self.player = [[AliPlayer alloc] init];
    // 建議傳入traceId
    [play setTraceID:@"xxxxxx"];
  2. 設置監聽器。

    播放器支持設置多個監聽器。

    • prepare必須設置,因為手動播放需要在prepare回調中調用start開始播放。

    • onPlayerEventonError較為重要,建議您設置。

    @interface SimplePlayerViewController ()<AVPDelegate>
    @end
    - (void)viewDidLoad {
        self.player = [[AliPlayer alloc] init];
        self.player.playerView = self.avpPlayerView.playerView;
        self.player.delegate = self;
        //...
    }
    /**
     @brief 錯誤代理回調
     @param player 播放器player指針
     @param errorModel 播放器錯誤描述,參考AliVcPlayerErrorModel
     */
    - (void)onError:(AliPlayer*)player errorModel:(AVPErrorModel *)errorModel {
        // 提示錯誤,及stop播放
    }
    /**
     @brief 播放器事件回調
     @param player 播放器player指針
     @param eventType 播放器事件類型,@see AVPEventType
     */
    -(void)onPlayerEvent:(AliPlayer*)playereventType:(AVPEventType)eventType{
        switch(eventType){
            caseAVPEventPrepareDone:{
                // 準備完成
                // 在player設置autoPlay為NO時,建議在準備完成回調中手動調用start。
                [self.playerstart];
            }
                break;
            case AVPEventAutoPlayStart:
                // 自動播放開始事件
                break;
            case AVPEventFirstRenderedStart:
                // 首幀顯示
                break;
            case AVPEventCompletion:
                // 播放完成
                break;
            case AVPEventLoadingStart:
                // 緩沖開始
                break;
            case AVPEventLoadingEnd:
                // 緩沖完成
                break;
            case AVPEventSeekEnd:
                // 跳轉完成
                break;
            case AVPEventLoopingStart:
                // 循環播放開始
                break;
            default:
                break;
        }
    }
    /**
     @brief 視頻當前播放位置回調
     @param player 播放器player指針
     @param position 視頻當前播放位置
     */
    - (void)onCurrentPositionUpdate:(AliPlayer*)player position:(int64_t)position {
        // 更新進度條
    }
    /**
     @brief 視頻緩存位置回調
     @param player 播放器player指針
     @param position 視頻當前緩存位置
     */
    - (void)onBufferedPositionUpdate:(AliPlayer*)player position:(int64_t)position {
        // 更新緩沖進度
    }
    /**
     @brief 獲取track信息回調
     @param player 播放器player指針
     @param info track流信息數組參考AVPTrackInfo
     */
    - (void)onTrackReady:(AliPlayer*)player info:(NSArray<AVPTrackInfo*>*)info {
        // 獲取多碼率信息
    }
    /**
     @brief 字幕顯示回調
     @param player 播放器player指針
     @param index 字幕顯示的索引號
     @param subtitle 字幕顯示的字符串
     */
    - (void)onSubtitleShow:(AliPlayer*)player index:(int)index subtitle:(NSString *)subtitle {
        // 獲取字幕進行顯示
    }
    /**
     @brief 字幕隱藏回調
     @param player 播放器player指針
     @param index 字幕顯示的索引號
     */
    - (void)onSubtitleHide:(AliPlayer*)player index:(int)index {
        // 隱藏字幕
    }
    /**
     @brief 獲取截圖回調
     @param player 播放器player指針
     @param image 圖像
     */
    - (void)onCaptureScreen:(AliPlayer *)player image:(UIImage *)image {
        // 預覽,保存截圖
    }
    /**
     @brief track切換完成回調
     @param player 播放器player指針
     @param info 切換后的信息參考AVPTrackInfo
     */
    - (void)onTrackChanged:(AliPlayer*)player info:(AVPTrackInfo*)info {
        // 切換碼率結果通知
    }
  3. 創建DataSource。

    播放器支持4種播放源:VidSts、VidAuth、VidMps和UrlSource。其中UrlSource是直接URL播放,需要將URL設置為artc://協議,才可以使用RTS服務。

    AVPUrlSource *urlSource = [[AVPUrlSource alloc] 
    urlWithString:"artc://<播流地址>"]; 
    [self.player setUrlSource:urlSource];
  4. 設置顯示View。

    如果播放源有畫面,那么需要設置顯示的view到播放器中,用來顯示畫面。示例如下:

    self.player.playerView = self.avpPlayerView.playerView;// 用戶顯示的view
  5. 播放參數配置

    配置播放參數,提升超低延時直播效果。

    說明

    6.3.0版本以及之后的播放器SDK均支持自動低延時最佳配置,當播放url為“artc://”開頭,且客戶沒有手工修改過AVPConfigMaxDelayTimeHighBufferDurationStartBufferDuration值時,SDK會自動分別使用1000、10、10值進行實際的播放。

    若想自定義控制,請參考如下示例:

    //1. 獲取并修改配置
    AVPConfig *config = self.aliPlayer.getConfig;
    
    if ([playUrl hasPrefix:@"artc://"]) {
        //最大延時為1秒
        [config setMaxDelayTime:1000];
        //起播緩存時長
        [config setStartBufferDuration:10];
        //卡頓恢復緩存時長
        [config setHighBufferDuration:10];
    } else {
        //config使用默認配置或自定義為其他配置
    }
    
    //2. 應用配置
    [_aliPlayer setConfig:config];
    
  6. 可選:開啟自動播放,默認為關閉狀態。

    self.player.autoPlay = YES;
  7. 準備播放

    調用[self.player prepare]開始讀取并解析數據。

    [self.player prepare];
  8. 開始播放

    • 如果未開啟自動播放,需要在AVPEventPrepareDone回調發生之后,擇機調用start開始播放視頻。

    • 如果開啟了自動播放,則不需要調用start,數據解析完成后將開始自動播放視頻。

    重要

    自動播放的時候將不會回調AVPEventPrepareDone回調,而會回調AVPEventAutoPlayStart回調。

    [self.player start];

控制播放

iOS播放器SDK支持開始、暫停、從指定時間點播放等主流操作。

  1. 開始播放

開始播放視頻,由start接口實現。示例如下:

 [self.player start];
  1. 停止播放

停止播放視頻,由stop接口實現。示例如下:

[self.player stop];
  1. 銷毀播放器

銷毀播放器實例,有同步和異步兩種銷毀方式,示例如下:

//同步銷毀,內部會自動調用stop接口
[self.player destroy];
//異步銷毀,內部會自動調用stop接口
[self.player destroyAsync];
說明

調用同步銷毀接口需等待播放器資源完全釋放后才返回。如果您對界面的響應速度有較高要求,建議使用異步銷毀接口,并注意以下幾點:

  1. 避免在異步銷毀過程中對播放器對象執行任何其他操作。

  2. 無需在調用異步銷毀之前手動停止播放器,因為該過程內部已經包含了異步化的停止流程。

輔助功能

  1. 日志開關

    // 開啟日志
    [AliPlayer setEnableLog:YES];
    [AliPlayer setLogCallbackInfo:LOG_LEVEL_TRACE callbackBlock:nil];
    
    // 關閉日志
    [AliPlayer setEnableLog:NO];
    [AliPlayer setLogCallbackInfo:LOG_LEVEL_NONE callbackBlock:nil];
  2. 直播降級

    1. RTS自動降級

      在使用超低延時直播RTS地址播放的場景下,當不設置RTS降級地址且RTS拉流失敗時,會自動降級到RTS對應的默認FLV地址進行播放。示例如下:

      // 1表示開啟,0表示關閉。默認開啟
      [AliPlayerGlobalSettings setOption:ALLOW_PRE_RENDER valueInt:1];
    2. RTS自定義降級

      在使用超低延時直播RTS地址播放的場景下,通過設置RTS的降級地址(如HLS地址或FLV地址),當RTS拉流失敗時,會自動降級到該地址播放。

      //設置降級源downgradeUrl
      AVPUrlSource *urlSource = [[AVPUrlSource alloc] urlWithString:downgradeUrl];
      //可選,配置config其他項
      AVPConfig *config = [self.player getConfig];
      //設置降級URL
      [self.player enableDowngrade:urlSource config:config];
  3. 獲取TraceID

    每一次低延時播放都會有一個traceId,可用于問題排查,可以通過播放器事件回調拿到traceid

    //監聽播放器 onPlayerEvent 回調,并解析 DemuxerTraceID 消息
    - (void)onPlayerEvent:(AliPlayer*)player eventWithString:(AVPEventWithString)eventWithString description:(NSString *)description {
        switch (eventWithString) {
            case EVENT_PLAYER_DEMUXER_TRACE_ID:
                {
                    NSString *traceId = description;
                }
                    break;
                default:
                    break;
        }
    }