2011-01-12 25 views
6

Tôi gặp sự cố với MPMoviePlayerController. Tôi sử dụng một thể hiện để phát một nguồn âm thanh m3u8:MPMoviePlayerController/AVAudioSession trong nền không khởi động lại phát sau khi cuộc gọi đến

AVAudioSession *audioSession = [AVAudioSession sharedInstance]; 

NSError *setCategoryError = nil; 
[audioSession setCategory:AVAudioSessionCategoryPlayback error:&setCategoryError]; 
if (setCategoryError) { 
} 

NSError *activationError = nil; 
[audioSession setActive:YES error:&activationError]; 
if (activationError) { 
} 
self.player = 
[[MPMoviePlayerController alloc] initWithContentURL: [NSURL URLWithString:url]]; 
player.view.hidden = YES; 
player.shouldAutoplay = YES; 
[player release]; 
[btnContainer addSubview: player.view]; 
player.useApplicationAudioSession = NO; 

nó được thiết kế để phát khi ứng dụng chuyển sang nền và mọi thứ đang hoạt động OK.

Vấn đề là khi nó ở chế độ nền và tôi nhận được cuộc gọi đến. Trong trường hợp đó, luồng tạm dừng, nhưng không quay lại sau khi kết thúc cuộc gọi. Trong thực tế, giao diện điều khiển nói

2011-01-12 12:02:27.729 RAC1[1571:307] MP _playbackInterruptionDidEndNotification :: NSConcreteNotification 0x155890 {name = AVController_PlaybackInterruptionDidEndNotification; object = <AVController: 0x180d50>; userInfo = { 
    "AVController_InterruptionStatusNotificationParameter" = "call.declined"; 
    "AVController_InterruptorNameNotificationParameter" = Phone; 
}}, _state = 6 
2011-01-12 12:02:27.730 RAC1[1571:307] MP _playbackInterruptionDidEndNotification :: resuming playback! 

và ứng dụng không hiển thị các dòng như MPMoviePlaybackStatePlaying, nhưng âm thanh dường như dừng lại. Tôi đã thử thực hiện

[[AVAudioSession sharedInstance] setActive: YES error: &err] 

nhưng có vẻ như không thành công.

Có ai có đầu mối không?

cảm ơn!

Trả lời

3

Nó có vẻ như tôi cần phải

[[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; 

trong viewDidAppear của viewController của tôi ....

+0

Tôi bắt đầu nhận các sự kiện điều khiển từ xa khi nhấn nút phát và kết thúc nhận các sự kiện điều khiển khi nhấn nút dừng. Ngoài ra tôi cần phải đợi 1 giây trước khi tiếp tục phát khi ứng dụng đang phát âm thanh trên nền. sử dụng: dispatch_after (dispatch_time (DISPATCH_TIME_NOW, 1 * NSEC_PER_SEC), dispatch_get_main_queue(),^{ // Tiếp tục phát }) –

1

Bạn có nhìn vào this link để xử lý gián đoạn âm thanh. Bạn cần phải thiết lập AVAudioSessionDelegate và xử lý các gián đoạn.

Các vấn đề liên quan