当我进入主屏幕并且app在后台时,MPMoviePlayerController成功播放了airPlay。但是,当我双击主页按钮时,应用程序崩溃了。这种情况发生在iOS 5上,但不是4.3。
为了排除其他代码,我创建了一个新的空项目,只在按下按钮时执行代码。
moviePlayerController = [[MPMoviePlayerController alloc] initWithContentURL:[NSURL URLWithString:@"http://devimages.apple.com/iphone/samples/bipbop/gear1/prog_index.m3u8"]];
NSError *setCategoryError = nil;
[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback error: &setCategoryError];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(moviePlaybackComplete:)
name:MPMoviePlayerPlaybackDidFinishNotification
object:moviePlayerController];
[moviePlayerController setMovieSourceType:MPMovieSourceTypeStreaming];
[self addObservers];
[self.delegate addSubview:moviePlayerController.view];
if([moviePlayerController respondsToSelector:@selector(setAllowsAirPlay:)])
{
[moviePlayerController setAllowsAirPlay:YES];
}
moviePlayerController.fullscreen = YES;
moviePlayerController.scalingMode = MPMovieScalingModeAspectFit;
[moviePlayerController prepareToPlay];
[moviePlayerController play];
在控制台中,我在崩溃时得到以下输出:
Jan 27 12:08:01 unknown mediaserverd[295] <Error>: <<<< FIGSERVER >>>> FigPlayerRemoteServer_KillAndForceCrashReport: RPCTimeout message received to terminate [295] with reason 'fig rpc timeout -- FigSharedRemote_VolumeCategoryForAudioCategory'
Jan 27 12:08:01 unknown ReportCrash[308] <Notice>: MS:Notice: Installing: (null) [ReportCrash] (675.00)
Jan 27 12:08:01 unknown ReportCrash[308] <Error>: Saved crashreport to /Library/Logs/CrashReporter/mediaserverd-2012-01-27-120801.plist using uid: 0 gid: 0, synthetic_euid: 0 egid: 0
Jan 27 12:08:01 unknown mediaserverd[295] <Error>: <<<< FIGSERVER >>>> FigPlayerRemoteServer_KillAndForceCrashReport: RPCTimeout message received; stackshot generated
Jan 27 12:08:01 unknown mediaserverd[295] <Error>: <<<< FIGSERVER >>>> FigPlayerRemoteServer_KillAndForceCrashReport: TERMINATING our process [295]
Jan 27 12:08:02 unknown com.apple.launchd[1] <Notice>: (com.apple.mediaserverd) Exited: Killed: 9
Jan 27 12:08:02 unknown mediaserverd[310] <Notice>: MS:Notice: Installing: com.apple.mediaserverd [mediaserverd] (675.00)
Jan 27 12:08:02 unknown kernel[0] <Debug>: Sandbox: ignoring builtin profile for platform app: /usr/sbin/mediaserverd
Jan 27 12:08:02 unknown kernel[0] <Debug>: Sandbox: ignoring builtin profile for platform app: /usr/sbin/mediaserverd
Jan 27 12:08:03 unknown mediaserverd[310] <Error>: 12:08:03.383370 com.apple.AVConference: /SourceCache/GameKitServices/GameKitServices-344.3/AVConference.subproj/Sources/AVConferenceServer.m:1862: AVConferenceServerStart aborting - device doesn't support conferencing
并在crashreport中:
Exception Type: EXC_CRASH (SIGABRT)
Exception Codes: 0x00000000, 0x00000000
Crashed Thread: 0
Last Exception Backtrace:
0 CoreFoundation 0x33bab8bf 0x33af2000 + 759999
1 libobjc.A.dylib 0x31bcd1e5 0x31bc4000 + 37349
2 AVFoundation 0x374f6cb5 -[AVPlayerItem _attachToPlayer:forImmediateEnqueueing:shouldAppendItem:] + 341
3 AVFoundation 0x374e71f7 -[AVPlayer _insertPlaybackItemOfItem:inPlayerQueueAfterPlaybackItemOfItem:] + 43
4 AVFoundation 0x374eebf3 __-[AVPlayer _attachItem:andPerformOperation:withObject:]_block_invoke_2 + 1099
5 libdispatch.dylib 0x3641cd55 0x3641c000 + 3413
6 libdispatch.dylib 0x36427e8d 0x3641c000 + 48781
7 CoreFoundation 0x33b7e2dd 0x33af2000 + 574173
8 CoreFoundation 0x33b014dd 0x33af2000 + 62685
9 CoreFoundation 0x33b013a5 0x33af2000 + 62373
10 GraphicsServices 0x31f56fcd 0x31f53000 + 16333
11 UIKit 0x36d57743 0x36d26000 + 202563
12 AirplayTest 0x00002e45 main (main.m:16)
13 AirplayTest 0x00002dd4 start + 40
任何可能出错的线索?
答案 0 :(得分:0)
您是否尝试过为iOS 5设置电影播放器控制器的useApplicationAudioSession属性为NO(即模拟iOS 3.1默认行为)? iOS 5中的音频会话处理似乎存在一些错误,当您在应用程序之间切换,处理中断等时,可能导致音频服务器死机。
如果这样修复它,请向Apple提交错误报告,因为它更像是一个黑客攻击而不是修复!
答案 1 :(得分:0)
这似乎是iOS 5.0版中的一个错误。随着iOS 5.1的发布,似乎已经修复。
感谢@Cyril对此进行确认。