2
在隨機時間,我的應用程序崩潰與此崩潰日誌。MPMoviePlayerController看似隨機崩潰
一個神奇的解決方案將是理想的,但一些幫助在哪裏開始調試這也將是有益的。該應用程序很難調試,因爲它是基於GPS的應用程序,所以如果我知道要尋找什麼,我可以構建某種壓力測試。
Exception Type: EXC_CRASH (SIGABRT)
Exception Codes: 0x00000000, 0x00000000
Crashed Thread: 0
Last Exception Backtrace:
0 CoreFoundation 0x3789c88f __exceptionPreprocess + 163
1 libobjc.A.dylib 0x31911259 objc_exception_throw + 33
2 AVFoundation 0x309301d9 -[AVPlayer _attachItem:andPerformOperation:withObject:] + 249
3 AVFoundation 0x309300db -[AVPlayer _insertItem:afterItem:] + 27
4 AVFoundation 0x30943b9d -[AVQueuePlayer insertItem:afterItem:] + 137
5 MediaPlayer 0x364a68b7 __block_global_2 + 199
6 libdispatch.dylib 0x34a4bc59 _dispatch_call_block_and_release + 13
7 libdispatch.dylib 0x34a4dee7 _dispatch_main_queue_callback_4CF$VARIANT$mp + 195
8 CoreFoundation 0x3786f2ad __CFRunLoopRun + 1269
9 CoreFoundation 0x377f24a5 CFRunLoopRunSpecific + 301
10 CoreFoundation 0x377f236d CFRunLoopRunInMode + 105
11 GraphicsServices 0x379eb439 GSEventRunModal + 137
12 UIKit 0x309fecd5 UIApplicationMain + 1081
13 App 0x000b5b6f main (main.m:14)
我玩各種電影(MOV(H.264,1024×576,AAC,44100赫茲,立體聲(LR))和聲音(MP3和WAV),有時混合。
電影使用的是MPMoviePlayer發揮,聲音使用AVAudioPlayer
發生在兩個IOS 5和6(新iPad)
---編輯:添加代碼----
視頻在這裏準備:
- (void) prepareLayer:(NSDictionary*) aUserInfo{
mMoviePlayerController.contentURL = [aUserInfo objectForKey:@"contenturl"]; // set content
[mMoviePlayerController prepareToPlay];
mMoviePlayerController.shouldAutoplay = NO; // prevent autoplay
mMovieShouldLoop = NO;
[mWrapper setOpacity: 0]; // hide video view (we don't want to see the previous video file)
}
mWrapper用於封裝的視頻中一個節點的cocos2d
- (void) showLayer {
[mWrapper setVisible: YES];
[mMoviePlayerController pause];
mRetryCounter = 0;
mMovieStarted = NO;
self.visible = YES;
}
- (void) updateLayer {
if (!self.visible) { return; } // not visible, so not updating (prevents accidental playing of video)
if (mWarningHidden && !mMovieStarted) // if warning is hidden and the movieStarted flag is false
{
if (mMoviePlayerController.playbackState == MPMoviePlaybackStatePlaying) { // if movie did start successfully.
mMovieStarted = YES; // set flag
[mWrapper setOpacity: 255]; // show video view
}
else { // if movie is not playing yet
if (mRetryCounter == 0) { // if this is the first try
[[[CCDirector sharedDirector] openGLView] addGestureRecognizer:mSwipe]; // enable swipe gesture
}
[mMoviePlayerController play]; // start playing
if (mMovieShouldLoop) { // and set loop or not
if (mMoviePlayerController.repeatMode != MPMovieRepeatModeOne) {
mMoviePlayerController.repeatMode = MPMovieRepeatModeOne;
}
} else {
if (mMoviePlayerController.repeatMode != MPMovieRepeatModeNone) {
mMoviePlayerController.repeatMode = MPMovieRepeatModeNone;
}
}
if (mMoviePlayerController.playbackState != MPMoviePlaybackStatePlaying && mRetryCounter > 5) { // if movie not playing and retried for 5 times,
mMoviePlayerController.contentURL = [[NSBundle mainBundle] URLForResource:@"novideo" withExtension:@"m4v"]; // switch to movie of static, indicating something went wrong
[mMoviePlayerController play]; // and play that.
}
if (mRetryCounter > 10) {
mMovieStarted = YES; // if movie still doesn't run after switched to static and retrying that for 5 times, skip it.
NSLog(@"A Movie was skipped after trying to play it for 10 times.");
}
mRetryCounter++; // count retries.
}
}
}
- 編輯:去除因爲它們不是問題的一部分的代碼片段的聲音部分,並改變了標題來反映這個問題是在MPMoviePlayerController中,而不是在AVPlayer中。
您是否嘗試過設置xcode來打破異常? [這是你怎麼做](http://blog.manbolo.com/2012/01/23/xcode-tips-1-break-on-exceptions) – Tobi
該應用程序不能在開發模式下可靠地進行測試,因爲你有與它走了很長的距離。這樣做與它連接到計算機不是一種選擇。到目前爲止,我還沒有找到在開發模式下重現它的方法。 –
嗯太糟糕了。顯然它看起來像你的問題是由'AVPlayer'造成的。你能否提供所有關於'AVPlayer'的相關代碼? – Tobi