mpmovieplayercontroller:在后台播放

Posted

技术标签:

【中文标题】mpmovieplayercontroller:在后台播放【英文标题】:mpmovieplayercontroller: Playing in background 【发布时间】:2014-01-28 19:53:46 【问题描述】:

我正在制作一个 iPad 应用程序(ios7、XCode5)。

我正在播放包含视频和音频的 HLS 流 (m3u8)。当设备进入后台时,它会停止播放。有没有办法从视频中分离音频并在后台播放视频?苹果似乎不希望你在后台播放视频。

有什么想法吗?谢谢。

【问题讨论】:

您只能播放音频文件(mp3、wav 等),不能在后台播放视频文件。在后台播放视频没有意义。如果没人能看到它们,那有什么意义呢?如果您只想播放声音,则需要从电影中获取声音文件或播放静态音频文件 是的,我知道没有意义。只是我们的视频/音频流是 HLS 流,所以据我所知,我不能只从中获取音频。 此链接显示了如何在后台播放音频。 ***.com/questions/15540726/… ***.com/questions/13023241/… 我已经解决了这个问题。谢谢 【参考方案1】:

这是可能的,但在播放过程中会有一些跳过 - 视频会自动停止,但由于您的应用基本上仍在后台运行,您可以再次手动启动视频:

在管理播放器的视图控制器中添加:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationDidEnterBackground:) name:UIApplicationDidEnterBackgroundNotification object:nil];

然后添加如下方法:

- (void)applicationDidEnterBackground:(NSNotification*)note 
    if (!_callCenter.currentCalls && self.currentPlayer.continuePlaybackInBackground == YES) 
        double delayInSeconds = 0.1;
        dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
        dispatch_after(popTime, dispatch_get_main_queue(), ^(void)
            // call play on your MPMoviePlayerController
        );
    

我发现我必须使用dispatch_after,否则它会在被操作系统停止之前尝试再次开始播放电影。

【讨论】:

谢谢。但是嗯,我似乎无法使用 MPMoviePlayerController 来实现这一点。它没有我可以告诉的 togglePlaybackToState?我错过了什么 这是一个示例,我已删除代码并用注释替换它。您只需在此处调用 MPMoviePlayerController 实例上的play 使用 AVSession 作为背景音乐(即使你使用 MPMovePlayerController 播放视频或音频)。如果您还想使用控制中心按钮,请使用远程控制事件。记得在 ViewDidLoad 中添加 [[UIApplication sharedApplication]beginReceivingRemoteControlEvents]。

以上是关于mpmovieplayercontroller:在后台播放的主要内容,如果未能解决你的问题,请参考以下文章

MPMoviePlayerController 和 UIWebView

MPMoviePlayerController 不播放本地视频

如何在 MPMoviePlayerController 上处理多个 SRT 文件

在 MPMoviePlayerController 上执行捏合手势时屏幕黑屏

在 UITableViewCell 中嵌入 MPMoviePlayerController

MPMoviePlayerController 在后台播放音频流