这个iOS MediaPlayer崩溃的原因是什么?

13

我们收到了一些崩溃报告和堆栈跟踪,但它们对我们来说很难解读。堆栈跟踪完全位于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
...

堆栈跟踪会继续重复上面三行的内容数百次。


嗨,Greg,你能找到解决这个问题的方法吗?我也遇到了这个崩溃问题,正在尝试诊断。 - wsidell
有更新吗?我也遇到了同样的问题。 - Sabir Ali
我正在我们的应用程序中解决这个确切的问题。为了让它始终如一地做到这一点,请尝试使用睡眠按钮将设备置于睡眠状态,然后唤醒它,然后执行引起视频播放的操作。这在这里每次都会发生。 - Boisy Pitre
1
@greg 我在开发时遇到了这个错误。它在 prepareToPlay 方法中出现了 EXC_BAD_ACCESS 错误。不过,我使用的视频文件相当大。 - Will
3个回答

1
我在iOS 8.4应用程序中遇到了这个问题。原来是应用程序试图加载一个不存在的本地视频文件。当文件名为“Intro.mp4”时,它试图加载“Animation.mp4”,而我没有错误捕获代码来检测这个问题。
最终结果与上面完全相同 - 最后三行跟踪的数百次重复,白屏和应用程序崩溃。
因此,检查一下可能是值得的 - 这可能会对某些人有所帮助,尽管希望您更加明智,并在加载代码周围拥有一些错误捕获代码 :)

0

我昨天遇到了同样的问题。 我试图在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]。
经过一小时的查找,我发现是我的代码有错误。我在 "fileURLWithPath" 中传递了URL,因此出现了这个错误。为了解决这个问题,我只需要替换掉。

 NSURL *url = [NSURL fileURLWithPath:fileURL];

使用

NSURL *url = [NSURL URLWithString:fileURL];

0
从您的描述来看,玩家似乎进入了一个无限循环,其中要么分配内存,要么增加指针。这很可能是由于加载格式不正确的视频文件导致的(猜测)。
当应用程序耗尽可寻址空间和/或指针增加/减少到指向应用程序地址空间之外的位置时,内核会因为内存违规而终止它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接