RTSP老化異常解決方案

一、問題場景

當接入記錄儀rtsp流,長時間老化時,由于網絡等原因,造成斷流,此時需要app端主動重連。如果多次重連,會導致機器異常。

二、APP端解決方案

當rtsp斷流時,播放器收到停止播放回調,此時teardown當前連接,即銷毀當前播放器(這一步是重點),然后新建播放器拉流

三、代碼示例:

以VLC播放器為例

//VCL播放狀態回調
- (void)mediaPlayerStateChanged:(NSNotification *)aNotification
{
    int aaa = (int)self.vlcPlayer.state;
    switch (aaa) {
        case VLCMediaPlayerStateStopped:
                   
            break;
        case VLCMediaPlayerStateOpening:
                     break;
        case VLCMediaPlayerStateBuffering:
                      break;
        case VLCMediaPlayerStateEnded:  // 檢測到播放器老化斷流
        {       //銷毀播放器
             [self deallocVLC];
            dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
                     //播放器銷毀后,重新開啟播放器
                    [self startVlCPlayNeedStop:NO];


            });
}
//銷毀播放器
-(void)deallocVLC
{
    if (self.vlcPlayer) {
        

        dispatch_async(dispatch_get_global_queue(0, 0), ^{
            if ( self.vlcPlayer.isPlaying  ) {
                
                
                [self.vlcPlayer stop];
            }
            
            self.vlcPlayer = [[VLCMediaPlayer alloc]init];
            
            self.vlcPlayer.delegate = nil;
            
            self.vlcPlayer.drawable = nil;
            
            self.vlcPlayer.media = nil;
            
            self.vlcPlayer = nil;
            
        });
    }
   
}

四、其他

上訴代碼只適用于VLC,其他播放器處理原理相同,即斷流重連時,先teardown當前連接,然后重新拉流。 其中斷連后延遲2秒,可根據播放器實際銷毀時間,自行調整。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容