我开始相信iOS只是纯粹的魔力。我查看了AVAudioPlayer上的许多帖子以寻找解决方案,但都没有效果。
当应用程序启动时,我有一个从MPMoviePlayerController开始的电影,我让AVAudioPlayer按照以下声音开始播放:
-(void)createAndPlayMovieFromURL:(NSURL *)movieURL sourceType:(MPMovieSourceType)sourceType{
/* Create a new movie player object. */
player = [[MPMoviePlayerController alloc] initWithContentURL:movieURL];
player.controlStyle = MPMovieControlModeDefault;
if (player)
{
/* Save the movie object. */
[self setMoviePlayerController:player];
/* Specify the URL that points to the movie file. */
[player setContentURL:movieURL];
/* If you specify the movie type before playing the movie it can result
in faster load times. */
[player setMovieSourceType:sourceType];
CGRect frame = CGRectMake(0, 0, 480, 320);
/* Inset the movie frame in the parent view frame. */
[[player view] setFrame:frame];
[player view].backgroundColor = [UIColor blackColor];
/* To present a movie in your application, incorporate the view contained
in a movie player’s view property into your application’s view hierarchy.
Be sure to size the frame correctly. */
[self.view addSubview: [player view]];
}
[[self moviePlayerController] play];
}
和声音:
- (void)setupAudioPlayBack:(NSString *) path : (NSString *) extension{
NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle]
pathForResource:path
ofType:extension]];
NSError *error;
audioPlayer = [[AVAudioPlayer alloc]
initWithContentsOfURL:url
error:&error];
if (error)
{
NSLog(@"Error in audioPlayer: %@",
[error localizedDescription]);
} else {
audioPlayer.delegate = self;
[audioPlayer prepareToPlay];
}
}
现在让我们说说魔术吧。当第一部电影播放和声音时,声音不会响应手机上的音量控制或静音模式开启。
然后立刻第二部电影播放自己的声音并且一切正常 - 静音模式开启时没有声音,如果静音模式关闭则响应音量控制。第三部电影 - 也很完美。
我尝试使用player.useApplicationAudioSession = NO
用于MPMoviePlayerController - 修复问题,第一次声音没有响应静音模式或音量控制,但现在当第二部电影开始播放时,它立即冻结,播放的声音被切断从原来的大小到2秒左右。
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategorySoloAmbient error:nil];
都无济于事。
所以我的问题是 - 如何使MPMoviePlayerController与AVAudioPlayer交互而没有任何问题......
答案 0 :(得分:2)
好的,我实际上找到了一个解决方案(再次,魔术)。
启动ViewController时,按如下方式进行设置:
- (void)viewDidLoad
{
[self setupAudioPlayBack:@"sound1" :@"caf"];
[self playMovieFile:[self localMovieURL:@"mov1" :@"mov"]];
audioTimer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(playAudio) userInfo:nil repeats:NO];
[super viewDidLoad];
}
playAudio方法的简单方法是:
- (void)playAudio{
[audioPlayer play];
}
只需0.1毫秒的计时器就足以让一切正常(0.0不起作用),并确保在音频结束前没有启动新视频,否则会破坏设置,因此您必须使计时器无效并重做再次计时器。