2012-11-06 133 views
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中。

+0

您是否嘗試過設置xcode來打破異常? [這是你怎麼做](http://blog.manbolo.com/2012/01/23/xcode-tips-1-break-on-exceptions) – Tobi

+0

該應用程序不能在開發模式下可靠地進行測試,因爲你有與它走了很長的距離。這樣做與它連接到計算機不是一種選擇。到目前爲止,我還沒有找到在開發模式下重現它的方法。 –

+0

嗯太糟糕了。顯然它看起來像你的問題是由'AVPlayer'造成的。你能否提供所有關於'AVPlayer'的相關代碼? – Tobi

回答

1

我通過使用較低級別的AVPlayer而不是MPMoviePlayer來解決問題。這徹底解決了我的問題。