Что может привести к краху iOS MediaPlayer?

Мы получили несколько отчетов о сбоях со следами стека, которые нам сложно расшифровать. Трассировка стека полностью находится в MediaPlayer, Foundation, CoreFoundation и libsystem_c.dylib. К сожалению, мы не смогли воспроизвести ни одно из наших устройств разработки, поэтому устранение неполадок оказывается проблематичным.

Вот пример трассировки стека. Кто-нибудь видел что-либо подобное или имел какие-либо указания на то, что может вызвать этот крах?

EXC_BAD_ACCESS KERN_PROTECTION_FAILURE at 0x000000016fc47fe0
Thread : Crashed: com.apple.main-thread
0   libsystem_c.dylib              0x0000000196a0624c localeconv_l
1   libsystem_c.dylib              0x0000000196a55d6c __vfprintf + 108
2   libsystem_c.dylib              0x0000000196a73680 __v2printf + 588
3   libsystem_c.dylib              0x0000000196a0620c _vsnprintf + 304
4   libsystem_c.dylib              0x0000000196a06c58 snprintf_l + 24
5   CoreFoundation                 0x000000018462b01c __CFStringAppendFormatCore + 11584
6   CoreFoundation                 0x00000001846282a4 _CFStringCreateWithFormatAndArgumentsAux2 + 248
7   Foundation                     0x000000018546e448 -[NSPlaceholderString initWithFormat:locale:arguments:] + 172
8   Foundation                     0x000000018546e308 +[NSString stringWithFormat:] + 76
9   MediaPlayer                    0x00000001869bf524 -[NSObject(MPLogDescription) MP_shortDescription] + 96
10  MediaPlayer                    0x00000001869bf598 -[AVPlayerItem(MPLogDescription) MP_shortDescription] + 72
11  MediaPlayer                    0x00000001869bde2c -[MPAVQueueCoordinator _syncPlayerItems] + 1316
12  MediaPlayer                    0x00000001869bd8a4 -[MPAVQueueCoordinator _syncItems] + 1452
13  MediaPlayer                    0x00000001869becbc -[MPAVQueueCoordinator _updateCurrentItem] + 620
14  MediaPlayer                    0x00000001869be61c -[MPAVQueueCoordinator _syncPlayerItems] + 3348
15  MediaPlayer                    0x00000001869bd8a4 -[MPAVQueueCoordinator _syncItems] + 1452
16  MediaPlayer                    0x00000001869becbc -[MPAVQueueCoordinator _updateCurrentItem] + 620
17  MediaPlayer                    0x00000001869be61c -[MPAVQueueCoordinator _syncPlayerItems] + 3348
18  MediaPlayer                    0x00000001869bd8a4 -[MPAVQueueCoordinator _syncItems] + 1452
19  MediaPlayer                    0x00000001869becbc -[MPAVQueueCoordinator _updateCurrentItem] + 620
20  MediaPlayer                    0x00000001869be61c -[MPAVQueueCoordinator _syncPlayerItems] + 3348
...

Трассировка стека продолжается еще на несколько сотен повторений последних трех строк.

Ответ 1

Просто это произошло в моем приложении iOS 8.4. Оказывается, приложение пыталось загрузить несуществующий файл локального видео. Он пытался загрузить "Animation.mp4", когда файл был вызван "Intro.mp4", и у меня не было кода для обнаружения ошибок.

Конечным результатом была точно такая же трассировка стека, как и выше, - несколько сотен повторений последних трех строк трассы, белого экрана и краха приложения

Так что, может быть, стоит проверить это - это может помочь кому-то, хотя, надеюсь, вы немного более разумны и имеете код ошибки для вашего кода загрузки:)

Ответ 2

Из вашего описания это звучит так, как игрок входит в бесконечный цикл, который либо выделяет память, либо увеличивает указатель. Это (предположение здесь), скорее всего, связано с загрузкой искаженного видеофайла.

Когда приложение заканчивается из адресного пространства и/или указатель увеличивается/уменьшается до точки, где он указывает вне адресного пространства приложения, ядро ​​уничтожает его для нарушения памяти.

Ответ 3

У меня сегодня такая же проблема. Я загрузил видео в MPMoviePlayerViewController

//Streaming video plying on MPMoviePlayerViewController

NSString *fileURL = @"http://...../myvideo.mp4";

NSURL *url = [NSURL fileURLWithPath:fileURL];

MPMoviePlayerViewController *mpViewController = [[MPMoviePlayerViewController alloc] initWithContentURL:url];

 mpViewController.moviePlayer.movieSourceType = MPMovieSourceTypeStreaming;

        // Present the movie player view controller
        [self presentViewController:mpViewController animated:YES completion:nil];
        // Start playback
        [mpViewController.moviePlayer play];

После запуска я получаю следующую ошибку - [MPAVQueueCoordinator _syncPlayerItems]

Проведя час, я обнаружил ошибку:) мой код. Я пропустил URL-адрес в файле fileURLWithPath, из-за чего он показал, что erro. Чтобы решить, что я просто заменил

 NSURL *url = [NSURL fileURLWithPath:fileURL];

с

NSURL *url = [NSURL URLWithString:fileURL];