2011-02-06 56 views
3

我在iPhone 3GS運行iOS 4.0.1的時候,在最後幾天一直面臨着一個非常奇怪的問題。MPMoviePlayerController thumbnailImageAtTime在iPhone 3GS下的EXC_BAD_ACCESS iOS 4.0.1

我有一個UIImagePicker,而用戶可以選擇一個圖片或視頻文件。之後,我從該媒體源生成縮略圖。對於圖片,它工作正常,但是,對於視頻,調用thumbnailImageAtTime方法後,我總是得到EXC_BAD_ACCESS

這是我正在使用的代碼:上述代碼在單獨的線程中運行


NSURL* contentURL = [NSURL URLWithString:_videoFilePath]; 
_moviePlayerController = [[MPMoviePlayerController alloc] initWithContentURL:contentURL]; 
[_moviePlayerController setShouldAutoplay:NO]; 
[_moviePlayerController setCurrentPlaybackTime:(NSTimeInterval)1]; 
[_moviePlayerController setInitialPlaybackTime:(NSTimeInterval)1]; 
[_moviePlayerController setControlStyle:MPMovieControlStyleNone]; 
[_moviePlayerController setMovieControlMode:MPMovieControlStyleNone]; 
videoThumb = [[_moviePlayerController thumbnailImageAtTime:(NSTimeInterval)1 timeOption:MPMovieTimeOptionNearestKeyFrame] retain]; 
[_moviePlayerController setCurrentPlaybackTime:(NSTimeInterval)-1]; 
[_moviePlayerController stop]; 
[_moviePlayerController release]; 

通過NSOperationQueue。我可以有多個縮略圖生成請求排隊,但只有一個可以在任何給定時間運行。隊列配置爲maxConcurrentOperationCount of 1

從我能做的測試中,這個問題只發生在iOS 4.0.1上。運行iOS 4.0,4.1,4.2和4.2.1不會重現此類錯誤。我也不能@try @catch這個錯誤。

任何人都知道或有任何這可能是什麼燈?或尋找什麼?我一直在這個問題上掙扎了好幾天。


Date/Time:  2011-02-06 11:14:01 -0200 
OS Version:  iPhone OS 4.0.1 (8A293) 
Report Version: 104 

Exception Type: SIGBUS 
Exception Codes: BUS_ADRALN at 0x2c 
Crashed Thread: 0 

Thread 0 Crashed: 
0 MediaToolbox      0x0003b6b0 FigMediaValidatorCopyByteStream + 4 
1 Celestial       0x00014c35 -[AVFileValidator notificationForFileCheckResult:] + 281 
2 Celestial       0x000146fb -[AVFileValidator postNotificationForCallback:] + 35 
3 CoreFoundation      0x000277ff -[NSObject(NSObject) performSelector:withObject:] + 23 
4 Celestial       0x000094a5 -[AVObjectRegistry safeInvokeWithDescription:] + 125 
5 CoreFoundation      0x000277ff -[NSObject(NSObject) performSelector:withObject:] + 23 
6 Foundation       0x00090bbd __NSThreadPerformPerform + 269 
7 CoreFoundation      0x00071a8d __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 13 
8 CoreFoundation      0x0007376f __CFRunLoopDoSources0 + 383 
9 CoreFoundation      0x0007450b __CFRunLoopRun + 231 
10 CoreFoundation      0x0001d8eb CFRunLoopRunSpecific + 231 
11 CoreFoundation      0x0001d7f3 CFRunLoopRunInMode + 59 
12 GraphicsServices     0x000036ef GSEventRunModal + 115 
13 GraphicsServices     0x0000379b GSEventRun + 63 
14 UIKit        0x000062a7 -[UIApplication _run] + 403 
15 UIKit        0x00004e17 UIApplicationMain + 671 
16 App         0x000035ef 0x1000 + 9711 

Thread 1: 
0 libSystem.B.dylib     0x0002dc4c kevent + 24 
1 libSystem.B.dylib     0x000d689c _dispatch_queue_invoke + 104 
2 libSystem.B.dylib     0x000d6a3c _dispatch_worker_thread2 + 128 
3 libSystem.B.dylib     0x0007ad89 _pthread_wqthread + 265 

Thread 2: 
0 libSystem.B.dylib     0x00001658 mach_msg_trap + 20 
1 CoreFoundation      0x000722cf __CFRunLoopServiceMachPort + 95 
2 CoreFoundation      0x00074589 __CFRunLoopRun + 357 
3 CoreFoundation      0x0001d8eb CFRunLoopRunSpecific + 231 
4 CoreFoundation      0x0001d7f3 CFRunLoopRunInMode + 59 
5 WebCore        0x0000305d RunWebThread(void*) + 369 
6 libSystem.B.dylib     0x0007a98d _pthread_start + 249 

Thread 3: 
0 libSystem.B.dylib     0x00001658 mach_msg_trap + 20 
1 CoreFoundation      0x000722cf __CFRunLoopServiceMachPort + 95 
2 CoreFoundation      0x00074589 __CFRunLoopRun + 357 
3 CoreFoundation      0x0001d8eb CFRunLoopRunSpecific + 231 
4 CoreFoundation      0x0001d7f3 CFRunLoopRunInMode + 59 
5 Foundation       0x0003b725 +[NSURLConnection(NSURLConnectionReallyInternal) _resourceLoadLoop:] + 213 
6 Foundation       0x0000bc9d -[NSThread main] + 45 
7 Foundation       0x000909e1 __NSThread__main__ + 973 
8 libSystem.B.dylib     0x0007a98d _pthread_start + 249 

Thread 4: 
0 libSystem.B.dylib     0x00025a20 select$DARWIN_EXTSN + 20 
1 libSystem.B.dylib     0x0007a98d _pthread_start + 249 

Thread 5: 
0 libSystem.B.dylib     0x000798dc __semwait_signal + 24 
1 libSystem.B.dylib     0x0002e639 pthread_cond_wait + 33 
2 CoreMedia       0x00002f1b WaitOnCondition + 11 
3 CoreMedia       0x00002e61 FigSemaphoreWaitRelative + 73 
4 MediaToolbox      0x00003e4b fpa_AsyncMovieControlThread + 55 
5 CoreMedia       0x0001e4c3 figThreadMain + 139 
6 libSystem.B.dylib     0x0007a98d _pthread_start + 249 

Thread 6: 
0 libSystem.B.dylib     0x00001658 mach_msg_trap + 20 
1 MediaToolbox      0x00008b0b FigExpressNotificationThread + 43 
2 CoreMedia       0x0001e4c3 figThreadMain + 139 
3 libSystem.B.dylib     0x0007a98d _pthread_start + 249 

Thread 7: 
0 libSystem.B.dylib     0x000798dc __semwait_signal + 24 
1 libSystem.B.dylib     0x0002e639 pthread_cond_wait + 33 
2 CoreMedia       0x00002f1b WaitOnCondition + 11 
3 CoreMedia       0x00002e61 FigSemaphoreWaitRelative + 73 
4 MediaToolbox      0x00003e4b fpa_AsyncMovieControlThread + 55 
5 CoreMedia       0x0001e4c3 figThreadMain + 139 
6 libSystem.B.dylib     0x0007a98d _pthread_start + 249 

Thread 8: 
0 libSystem.B.dylib     0x000016cc semaphore_timedwait_signal_trap + 8 
1 libSystem.B.dylib     0x0002ea07 _pthread_cond_wait + 679 
2 libSystem.B.dylib     0x0002f5b9 pthread_cond_timedwait_relative_np + 17 
3 CoreMedia       0x00002e7f FigSemaphoreWaitRelative + 103 
4 MediaToolbox      0x000bfb53 FigMediaValidatorValidateAsyncInternal + 399 
5 MediaToolbox      0x00038a0d FigMediaValidatorCreate + 53 
6 Celestial       0x00015093 -[AVFileValidator validateBlocking:] + 303 
7 Celestial       0x0000beb1 -[AVFileValidator validate] + 17 
8 MediaPlayer       0x0006ead3 -[MPMovie _determineMediaType] + 335 
9 Foundation       0x00086c8d __NSFireDelayedPerform + 369 
10 CoreFoundation      0x00071a5b __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 15 
11 CoreFoundation      0x00073ee5 __CFRunLoopDoTimer + 861 
12 CoreFoundation      0x00074865 __CFRunLoopRun + 1089 
13 CoreFoundation      0x0001d8eb CFRunLoopRunSpecific + 231 
14 CoreFoundation      0x0001d7f3 CFRunLoopRunInMode + 59 
15 Foundation       0x00004d67 -[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 203 
16 Foundation       0x000863bf -[NSRunLoop(NSRunLoop) runUntilDate:] + 63 
17 MediaPlayer       0x0000e927 -[MPMoviePlayerControllerNew thumbnailImageAtTime:timeOption:] + 119 
18 CoreFoundation      0x0009f074 __invoking___ + 68 
19 CoreFoundation      0x0003270d -[NSInvocation invoke] + 109 
20 MediaPlayer       0x0000bd7f -[MPMoviePlayerController forwardInvocation:] + 47 
21 CoreFoundation      0x0009ef59 ___forwarding___ + 577 
22 CoreFoundation      0x00031680 _CF_forwarding_prep_0 + 48 
23 App         0x0004f94f 0x1000 + 321871 
24 Foundation       0x0000dd1b -[__NSOperationInternal start] + 659 
25 Foundation       0x0000da7f -[NSOperation start] + 23 
26 Foundation       0x0007e5bb ____startOperations_block_invoke_2 + 47 
27 libSystem.B.dylib     0x000d5c5c _dispatch_call_block_and_release + 20 
28 libSystem.B.dylib     0x000d6a3c _dispatch_worker_thread2 + 128 
29 libSystem.B.dylib     0x0007ad89 _pthread_wqthread + 265 

Thread 9: 
0 libSystem.B.dylib     0x0007b85c __workq_kernreturn + 8 

Thread 0 crashed with ARM (Native) Thread State: 
    r0: 0x00000000  r1: 0x064386ec  r2: 0x06436fa0  r3: 0x00000004 
    r4: 0x30c178e0  r5: 0x00000000  r6: 0x332d1074  r7: 0x2fffeb20 
    r8: 0x06434e40  r9: 0x2fffeafc r10: 0x00000000 r11: 0x3e1e1ae0 
    r12: 0x3e1da394  sp: 0x2fffeb1c  lr: 0x30ba0c35  pc: 0x307a86b0 

------ EDIT

在另一執行中,不同的堆棧已經出現:


Thread 0 Crashed: 
0 libobjc.A.dylib      0x0000286c objc_msgSend + 16 
1 Celestial       0x0001b025 -[AVPlaybackItem release] + 73 
2 Celestial       0x00005d71 -[AVPlaybackQueue queueItemWasAddedNotification:] + 473 
3 Foundation       0x00018fb7 _nsnote_callback + 143 
4 CoreFoundation      0x00069e73 __CFXNotificationPost_old + 403 
5 CoreFoundation      0x0001a37b _CFXNotificationPostNotification + 119 
6 Foundation       0x000040c3 -[NSNotificationCenter postNotificationName:object:userInfo:] + 71 
7 Celestial       0x00005b67 -[AVQueue itemWasAdded:atIndex:] + 127 
8 Celestial       0x00005a01 -[AVQueue insertItem:atIndex:error:] + 157 
9 Celestial       0x0000594f -[AVQueue appendItem:error:] + 47 
10 Celestial       0x000051bb -[AVController addNextFeederItemToQueue] + 199 
11 Celestial       0x000050d7 -[AVController checkQueueSpace] + 111 
12 Celestial       0x000024d1 -[AVController setQueue:] + 101 
13 Celestial       0x00004cb1 -[AVController setQueueFeeder:withIndex:] + 301 
14 MediaPlayer       0x0001f999 -[MPAVController _setAVControllerQueueFeeder:startQueueIndex:] + 97 
15 MediaPlayer       0x0001e53d -[MPAVController reloadFeederWithStartQueueIndex:] + 121 
16 MediaPlayer       0x0000c511 -[MPMoviePlayerControllerNew _prepareToPlayWithStartIndex:] + 325 
17 MediaPlayer       0x0000acad -[MPMoviePlayerControllerNew prepareToPlay] + 29 
18 MediaPlayer       0x00009617 -[MPMoviePlayerControllerNew _movieSourceTypeAvailableNotification:] + 191 
19 Foundation       0x00018fb7 _nsnote_callback + 143 
20 CoreFoundation      0x00069e73 __CFXNotificationPost_old + 403 
21 CoreFoundation      0x0001a37b _CFXNotificationPostNotification + 119 
22 Foundation       0x000040c3 -[NSNotificationCenter postNotificationName:object:userInfo:] + 71 
23 Foundation       0x0000c459 -[NSNotificationCenter postNotificationName:object:] + 25 
24 MediaPlayer       0x0006e0a5 -[MPMovie _fileValidationDidFinishNotification:] + 193 
25 Foundation       0x00018fb7 _nsnote_callback + 143 
26 CoreFoundation      0x00069e73 __CFXNotificationPost_old + 403 
27 CoreFoundation      0x0001a37b _CFXNotificationPostNotification + 119 
28 Foundation       0x0000ba8f -[NSNotificationCenter postNotification:] + 139 
29 Celestial       0x00014719 -[AVFileValidator postNotificationForCallback:] + 65 
30 CoreFoundation      0x000277ff -[NSObject(NSObject) performSelector:withObject:] + 23 
31 Celestial       0x000094a5 -[AVObjectRegistry safeInvokeWithDescription:] + 125 
32 CoreFoundation      0x000277ff -[NSObject(NSObject) performSelector:withObject:] + 23 
33 Foundation       0x00090bbd __NSThreadPerformPerform + 269 
34 CoreFoundation      0x00071a8d __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 13 
35 CoreFoundation      0x0007376f __CFRunLoopDoSources0 + 383 
36 CoreFoundation      0x0007450b __CFRunLoopRun + 231 
37 CoreFoundation      0x0001d8eb CFRunLoopRunSpecific + 231 
38 CoreFoundation      0x0001d7f3 CFRunLoopRunInMode + 59 
39 GraphicsServices     0x000036ef GSEventRunModal + 115 
40 GraphicsServices     0x0000379b GSEventRun + 63 
41 UIKit        0x000062a7 -[UIApplication _run] + 403 
42 UIKit        0x00004e17 UIApplicationMain + 671 
43 App         0x000031c3 0x1000 + 8643 

回答

4

實際上,對於視頻縮略圖生成這樣的代碼應在主線程上執行。

這與iOS 4.0.1無關。

即使在NSOperation下,您也可以通過performSelectorOnMainThread執行縮略圖生成,您應該沒問題。

+0

我檢查了很多關於這個問題的答案,只有你保存了我。謝謝。 – LetBulletFlies 2013-07-04 03:59:38