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

錯誤異常及特殊場景處理

本文介紹使用iOS推流SDK可能出現的異常情況、特殊情況,及其處理辦法。

異常與錯誤處理

推流SDK主要包含以下回調:

回調類型

回調類名

推流回調

AlivcLivePusherInfoDelegate

網絡回調

AlivcLivePusherNetworkDelegate

錯誤回調

AlivcLivePusherErrorDelegate

背景音樂回調

AlivcLivePusherBGMDelegate

外置美顏、濾鏡處理相關回調

AlivcLivePusherCustomFilterDelegate

推流回調

推流回調用于向App通知SDK相應狀態,包括預覽開始、渲染第一幀視頻、發送第一幀音視頻流、推流開始、推流停止等回調。

  • onPushStarted、onFirstFramePushed:表示SDK推流成功。

  • onPushStarted:表示連接服務端成功。

  • onFirstFramePushed:表示發送第一幀音視頻流成功。

網絡相關回調

網絡相關回調用于向App通知SDK相應網絡狀態和鏈接狀態,其中有一些回調是App必須要對接的。

基礎模式:基礎直播場景

  • onConnectFail:表示推流失敗,建議檢查推流地址是否非法、是否存在非法字符、鑒權是否有問題、是否超過最大推流并發限制、是否在禁推黑名單中等,確定推流地址合法且可用后再嘗試推流。其中具體錯誤碼有0x30020901 ~ 0x30020905, 0x30010900 ~ 0x30010901。

  • onConnectionLost:鏈接斷開回調,鏈接斷開后SDK內部會自動重連,回拋onReconnectStart,如果超過最大重連次數(config.connectRetryCount)后推流鏈接還是沒有恢復,會回拋onReconnectError。

  • onNetworkPoor:網絡慢回調,當收到此回調說明當前網絡對于推流的支撐度不足,此時推流仍在繼續、沒有中斷。您可以在此處理自己的業務邏輯,比如UI提醒用戶。

  • onNetworkRecovery:網絡恢復回調。

  • onReconnectError:重連失敗回調,表示重連失敗,建議檢查當前網絡,待網絡恢復時,重新推流。

  • onSendDataTimeout:送數據超時回調,建議檢查當前網絡,待網絡恢復時,結束推流后重新開始推流。

  • onPushURLAuthenticationOverdue:推流地址鑒權即將過期會回調,如果您的推流開啟了推流鑒權功能(推流URL中帶有auth_key),我們會對推流URL做出校驗。在推流URL過期前約1min,您會收到此回調,實現該回調后,您需要回傳一個新的推流URL,以此保證不會因為推流地址過期而導致推流中斷。

互動模式:直播連麥場景

  • onConnectFail:表示推流失敗,建議檢查連麥推流地址中token是否非法、網絡是否異常等。確定推流地址合法且網絡正常可用后再嘗試推流。

  • onConnectionStatusChange:連接狀態改變的回調,在該回調中會返回連接的相關狀態,例如網絡連接斷開、建立網絡連接中、網絡已連接、網絡連接失敗等。當回調AliLiveConnectionStatusFailed狀態時,表示鏈接無法恢復,建議檢查當前網絡,待網絡恢復后重新推流。建議在互動模式下接入該回調,以獲取連接相關狀態。

  • onPushURLTokenWillExpire:連麥推流地址中的token即將過期。在token過期前30秒,會觸發該回調。收到該回調后,應該及時向業務服務器請求帶有新token的連麥推流地址,并通過refreshPushURLToken接口將新的token傳入SDK。

  • onPushURLTokenExpired:連麥推流URL的token已經過期。該回調觸發代表token鑒權信息已過期,需要在結束推流后使用新的token的URL重新推流。

  • onPusherNetworkQualityChanged:當前用戶上行網絡質量回調,當上行網絡質量發生變化時,會回調當前上行網絡質量評級。

  • onConnectionLost:鏈接斷開回調,不同于基礎模式,在互動模式下,當觸發onConnectionLost回調時,表示連接無法恢復。建議檢查當前網絡情況,并在網絡恢復后重新進行推流。

錯誤回調

  • onSystemError:系統設備異常回調,需要銷毀引擎重新嘗試。

  • onSDKError:SDK錯誤回調,需要根據錯誤碼做不同的處理:

    • 如果錯誤碼是805438211,表示設備性能差,編碼和渲染幀率過低,需要給主播提示,并在app層停掉處理耗時長的業務邏輯(比如高級美顏、動畫等)。

    • 您需要特別處理App沒有麥克風權限和沒有攝像頭權限的回調,App沒有麥克風權限錯誤碼為268455940,App沒有攝像頭權限錯誤碼為268455939。

    • 其他的暫時都只打日志,不做其他額外操作。

背景音樂回調

  • onOpenFailed:背景音樂開啟失敗,檢查背景音樂開始播放接口所傳入的音樂路徑與該音樂文件是否正確,可調用startBGMAsync重新播放。

  • onDownloadTimeout:背景音樂播放超時,多出現于播放網絡URL的背景音樂,提示主播檢查當前網絡狀態,可調用startBGMAsync重新播放。

對接美顏SDK

通過AlivcLivePusherCustomFilterDelegate回調來對接三方的美顏SDK,實現基礎美顏和高級美顏的功能。AlivcLivePusherCustomFilterDelegate的主要作用是將SDK內部的紋理或CVPixelBuffer回調出來,供美顏SDK處理,并將處理后的紋理或CVPixelBuffer返回給SDK,從而實現美顏效果。

基礎模式:基礎直播場景

在基礎模式下,AlivcLivePushConfig中的livePushMode開關設置為AlivcLivePushBasicMode。SDK通過AlivcLivePusherCustomFilterDelegate回調的是紋理ID,而不回調CVPixelBuffer。其核心回調如下:

  • onCreate:OpenGL上下文創建回調,通常用于在該回調里初始化美顏引擎。

  • onProcess:OpenGL紋理更新回調,該方法將回調SDK內部的原始紋理ID。在這個回調中,調用美顏處理方法,并將處理后的紋理ID返回。

  • onDestory:OpenGL上下文銷毀回調,通常用于在該回調里銷毀美顏引擎。

互動模式:直播連麥場景

在互動模式下,AlivcLivePushConfig中的livePushMode開關設置為AlivcLivePushInteractiveMode,SDK通過AlivcLivePusherCustomFilterDelegate可以回調CVPixelBuffer數據,也可以回調紋理ID,默認是回調CVPixelBuffer數據。

  • CVPixelBuffer回調

    在互動模式下,SDK通過onProcessVideoSampleBuffer方法默認回調CVPixelBuffer數據。只需在該回調中將CVPixelBuffer數據送入美顏處理,然后將處理后的數據寫回SDK。同時,將該方法的返回值設置為YES,即可實現美顏效果。若返回值為NO,則數據不會寫回SDK,也就不會有美顏效果。在 CVPixelBuffer回調模式下,AlivcLivePusherCustomFilterDelegate中除了 onProcessVideoSampleBuffer方法,其他方法都不會被回調。

    示例代碼

    - (BOOL)onProcessVideoSampleBuffer:(AlivcLivePusher *)pusher sampleBuffer:(AlivcLiveVideoDataSample *)sampleBuffer
    {
        BOOL result = NO;
        if (self.beautyOn)
        {
            result = [[AlivcBeautyController sharedInstance] processPixelBuffer:sampleBuffer.pixelBuffer withPushOrientation:self.pushConfig.orientation];
        }
        return result;
    }
  • 紋理回調

    在互動模式下,SDK默認會回調CVPixelBuffer數據。如果將AlivcLivePushConfig中的enableLocalVideoTexture變量開關設置為YES,則會回調紋理數據。在紋理數據回調模式下,SDK將會回調除了onProcessVideoSampleBuffer之外的其他方法。

    • onCreate:OpenGL上下文創建回調,通常用于在該回調里初始化美顏引擎。

    • onProcess:OpenGL紋理更新回調,該方法將回調SDK內部的原始紋理ID。在這個回調中,調用美顏處理方法,并將處理后的紋理ID返回。

    • onDestory:OpenGL上下文銷毀回調,通常用于在該回調里銷毀美顏引擎。

    AlivcLivePusherCustomDetectorDelegate回調用于一些美顏SDK需要使用buffer來處理人臉識別算法,而并非所有美顏操作都需要。只有特定的美顏SDK需要使用buffer來進行人臉識別。在這種情況下,通過AlivcLivePusherCustomFilterDelegate回調紋理ID來進行美顏處理,而通過AlivcLivePusherCustomDetectorDelegate回調buffer來進行人臉識別。若將CVPixelBuffer回調傳遞給美顏SDK,則無需處理此回調。

    如果美顏SDK需要使用buffer來處理人臉識別算法,應使用onDetectorProcess回調函數進行處理,該回調函數將返回buffer數據。在互動模式下,如果使用紋理回調且還需要buffer數據回調,需要打開AlivcLivePushConfig中的enableLocalVideoRawBuffer開關,以便觸發onDetectorProcess的buffer數據回調。

特殊場景處理

當網絡中斷時

  • 短時間斷網和網絡切換:即短時間的網絡波動或者網絡切換。一般情況下,中途斷網時長在AlivcLivePushConfig設置的重連超時時長和次數范圍之內,SDK會進行自動重連,重連成功之后將繼續推流。若您使用阿里云播放器,建議播放器收到超時通知AliVcMediaPlayerPlaybackDidFinishNotification之后,短暫延時5s后再做重連操作。

  • 長時間斷網:斷網時長超出AlivcLivePushConfig設置的重連超時時長和次數范圍時,SDK自動重連失敗,此時會回調onReconnectError:error:,等到網絡恢復之后調用reconnectAsync接口進行重連。同時播放器也要配合做重連操作。

    • 建議您在SDK外部做網絡監測。

    • 主播端和播放端在客戶端無法進行直接通信,需要配合服務端使用。比如主播端斷網,服務端會收到CDN的推流中斷回調,此時可以推送給播放端,主播推流中斷,播放端再做出相應處理。恢復推流同理。

    • 阿里云播放器重連需要先停止播放再開始播放。調用接口順序stop>prepare>play。

      [self.mediaPlayer stop];
      AliVcMovieErrorCode err = [self.mediaPlayer prepareToPlay:[NSURL URLWithString:@"播放地址"]];
      if(err != ALIVC_SUCCESS) {
       NSLog(@"play failed,error code is %d",(int)err);
       return;
      }
      [self.mediaPlayer play];
      說明

      關于播放器請參見阿里云播放器SDK使用說明

退后臺和接聽電話

SDK內部已經做好退后臺相關處理,無需您做操作。退入后臺SDK默認繼續推流音頻,視頻保留在最后一幀。您需要在App的Capabilities中打開Background Mode選項,選中Audio,AirPlay and Picture in Picture。保證App退后臺可以正常采集音頻。如圖:退后臺和接聽電話

如果退后臺時不需要保持音頻推流,即退入后臺停止推流且返回前臺繼續推流,您可以在退后臺時將推流引擎銷毀,在前臺后重新創建推流引擎繼續推流。

說明

在此方式下,退后臺必須監聽UIApplicationWillResignActiveNotification和UIApplicationDidBecomeActiveNotification,其他方式存在風險。

播放外部音效

如果您需要在推流頁播放音效音樂等,由于SDK暫時與AudioServicesPlaySystemSound有沖突,建議您使用AVAudioPlayer,并且在播放后需要更新設置AVAudioSession、AVAudioPlayer播放音效示例代碼:

- (void)setupAudioPlayer {
 NSString *filePath = [[NSBundle
mainBundle] pathForResource:@"sound" ofType:@"wav"];
 NSURL *fileUrl = [NSURL URLWithString:filePath];
 self.player = [[AVAudioPlayer alloc] initWithContentsOfURL:fileUrl error:nil];
 self.player.volume = 1.0;
 [self.player prepareToPlay];
}
 - (void)playAudio {
 self.player.volume = 1.0;
 [self.player play];
 // 配置AVAudioSession
 AVAudioSession *session = [AVAudioSession sharedInstance];
 [session setMode:AVAudioSessionModeVideoChat error:nil];
 [session overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:nil];
 [session setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker|AVAudioSessionCategoryOptionAllowBluetooth
| AVAudioSessionCategoryOptionMixWithOthers error:nil];
 [session setActive:YES error:nil];
}

推流過程中改變view的大小

請遍歷您在調用startPreview或者startPreviewAsync接口時賦值的UIView。更改預覽view的所有subView的frame。例如:

[self.livePusher startPreviewAsync:self.previewView];
for (UIView *subView in [self.previewView subviews]) {
 // ...
}

iPhoneX適配

一般場景下,預覽view的frame設置為全屏可以正常預覽,由于iPhoneX屏幕比例的特殊性,所以iPhoneX下預覽view設置為全屏大小會有畫面拉伸的現象。建議iPhoneX不要使用全屏大小的view來預覽。

碼率設置

SDK內部有動態變化碼率策略,您可以在AlivcLivePushConfig中修改碼率預設值。根據產品需求對于視頻分辨率、視頻流暢度、視頻清晰度的要求不同,對應設置的碼率范圍也不同,具體參考如下:

  • 視頻清晰度:推流碼率越高,則視頻清晰度越高,所以推流分辨率越大,所需要設置的碼率也就越大,以保證視頻清晰度。

  • 視頻流暢度:推流碼率越高,所需要的網絡帶寬越大,所以在較差的網絡環境下,設置較高的碼率有可能影響視頻流暢度。

編譯報錯

當您收到Building for iOS, but the linked and embedded framework XXX.framework' was built for iOS + iOS Simulator編譯報錯時,請參見如下操作:

  1. 單擊Xcode菜單。

  2. 選擇File > Workspace Settings進入對話框設置。

  3. 選擇將build System更改為Legacy build system即可。

當編譯缺少Queen的依賴庫時

手動集成的情況下,出現Queen缺少依賴庫的情況時,可以參見Queen_SDK_iOS文檔添加對應的依賴庫。

提交App Store審核失敗

RtsSDK提供全平臺的庫,如需提交App Store,需將模擬器架構去除。您可使用lipo -remove去除x86_64架構即可。