一、問題場景
當接入記錄儀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秒,可根據播放器實際銷毀時間,自行調整。
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。