【发布时间】:2014-02-10 18:56:18
【问题描述】:
我创建了 MPMoviePlayerViewController 的子类,以便在我的视频播放时暂停正在播放的任何背景音频(例如 Pandora、音乐应用程序),以便可以听到它自己的音频。完成我的视频后,我希望暂停的音频继续播放。
我能够使用 Apple 提供的 MoviePlayer 示例代码和相关视频(它是 m4v 格式但没有音频)来完成这项工作。但是,当我使用需要播放的视频(mp4 格式并且 有 有音频)时,它不起作用,即。 e.视频播放完毕后,暂停的音乐不会继续播放。请注意,MoviePlayer 示例代码使用 MPMoviePlayerController,而如果可能的话,我更愿意使用 MPMoviePlayerViewController,以便免费获得我想要的行为和控件。
当我使用我的 MPMoviePlayerViewController 子类时,暂停的音频在播放任一视频后都不会恢复。如果必须,我会使用 MPMoviePlayerController,但前提是我能弄清楚如何播放所需的视频并在完成后恢复音乐!
这是我的 MPMoviePlayerViewController 子类:
#import "SACMoviePlayerViewController.h"
#import <AVFoundation/AVFoundation.h>
@implementation SACMoviePlayerViewController
-(void) viewWillAppear:(BOOL)animated
{
if ([self isBeingPresented])
{
[self configureAudioSession];
}
[super viewWillAppear:animated];
}
-(void) viewWillDisappear:(BOOL)animated
{
if ([self isBeingDismissed])
{
[self deactivateAudioSession];
}
[super viewWillDisappear:animated];
}
-(void) configureAudioSession
{
NSError *error = nil;
BOOL configured = [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback withOptions:0 error:&error];
NSLog(@"Audio session %@", configured ? @"configured" : @"not configured");
if (error != nil)
{
NSLog(@"Configuration error is %@", [error localizedDescription]);
}
}
-(void) deactivateAudioSession
{
NSError *error = nil;
BOOL deactivated = [[AVAudioSession sharedInstance] setActive:NO withOptions:AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation error:&error];
NSLog(@"Audio session %@", deactivated ? @"deactivated" : @"not deactivated");
if (error != nil)
{
NSLog(@"Deactivation error is %@", [error localizedDescription]);
}
}
@end
当我使用此视图控制器播放没有音频的电影时,我在日志中看到以下内容:
2014-02-10 10:48:48.065 PlayMovie[39385:60b] Audio session configured
2014-02-10 10:49:11.196 PlayMovie[39385:60b] Audio session deactivated
当我播放需要使用此视图控制器播放的电影时,我在日志中看到以下内容:
2014-02-10 10:49:17.882 PlayMovie[39385:60b] Audio session configured
2014-02-10 10:50:16.023 PlayMovie[39385:60b] Audio session not deactivated
2014-02-10 10:50:16.033 PlayMovie[39385:60b] Deactivation error is The operation couldn’t be completed. (OSStatus error 2003329396.)
这与我直接使用 MPMoviePlayerController 时看到的一致,但音频在第一种情况下恢复,而不是在第二种(需要)情况下。
【问题讨论】:
标签: ios avfoundation