一、問題場景
當(dāng)接入記錄儀rtsp流,長時間老化時,由于網(wǎng)絡(luò)等原因,造成斷流,此時需要app端主動重連。如果多次重連,會導(dǎo)致機(jī)器異常。
二、APP端解決方案
當(dāng)rtsp斷流時,播放器收到停止播放回調(diào),此時teardown當(dāng)前連接,即銷毀當(dāng)前播放器(這一步是重點(diǎn)),然后新建播放器拉流
三、代碼示例:
以VLC播放器為例
//VCL播放狀態(tài)回調(diào)
- (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當(dāng)前連接,然后重新拉流。 其中斷連后延遲2秒,可根據(jù)播放器實(shí)際銷毀時間,自行調(diào)整。
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。