iOS:背景中的RTSP流

时间:2014-08-04 11:03:57

标签: ios video vlc rtsp libvlc

我正在开发一个iOS应用程序来播放RTSP流(有两个音轨,一个音频和一个用于视频),而我正在使用libVLC来实现它。

播放视频或仅播放音频(添加选项“--no-video”)完美无缺。如果我仅使用音频启动播放器然后输入背景,播放器将继续播放流。 我遇到的问题是,如果我在播放视频时输入背景,我想停止视频并启动一个只有音频的新libVLC播放器。在那种情况下,我收到此错误消息:

  

错误:[0x48e2000]> aurioc> 783:失败:'!int'(启用2,outf< 2 ch,48000 Hz,Float32,inter> inf< 2 ch,0 Hz,Float32,非inter>)

     

[1973b5e4] audiounit_ios音频输出错误:无法初始化AudioUnit(560557684)

     

[1973b5e4] audiounit_ios音频输出错误:打开AudioUnit输出失败

     

[1973b5e4]核心音频输出错误:模块无法正常工作

     

[17a27e74]核心解码器错误:无法创建音频输出

appDelegate中的代码:

- (void)applicationDidEnterBackground:(UIApplication *)application
{   
    NSLog(@"applicationDidEnterBackground");
    if(_playerController!=NULL){
        [_playerController performSelector:@selector(goToBackground) withObject:nil afterDelay:1];

        _playerController=NULL;
    }
}

在我的uiViewController中:

-(void)close:(BOOL)enterBackground
{
    [_mediaPlayer stop];

    NSArray* options   = @[[NSString stringWithFormat:@"--no-video"]];
    _mediaPlayer = [[VLCMediaPlayer alloc] initWithOptions:options];
    _mediaPlayer.delegate = self;
    _mediaPlayer.drawable = _videoView;
    _mediaPlayer.media = [VLCMedia mediaWithURL:[NSURL URLWithString:url]];   
    [_mediaPlayer play];
}

我做错了吗?

1 个答案:

答案 0 :(得分:1)

是的,不要停止视频并启动新播放器。只需在现有播放器上禁用视频解码,并在应用再次处于前台后重新启用它。这样更有效,更优雅,更快捷。此外,您不会遇到此音频会话锁定问题。

VLC for iOS如何做到这一点?当应用程序正在前往后台时,我们会在媒体播放器对象旁边的变量中存储当前视频轨道的ID,该ID可以是“1”,也可以是完全不同的,具体取决于播放的流。然后,我们将媒体播放器的视频轨道切换为“-1”,这在任何情况下都是“关闭”的值。视频解码停止。一旦应用程序再次移至前台,媒体播放器的视频轨道将再次设置为缓存的轨道ID,并再次开始视频解码。