可能导致此iOS MediaPlayer崩溃的原因是什么?

时间:2015-07-23 00:46:01

标签: ios objective-c ios8 media-player

我们收到了一些崩溃报告,其中包含我们难以破译的堆栈跟踪信息。堆栈跟踪完全在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
...

堆栈跟踪继续进行上面最后三行的几百次重复。

3 个答案:

答案 0 :(得分:1)

在我的iOS 8.4应用程序中发生这种情况。原来,该应用程序试图加载不存在的本地视频文件。它试图加载动画.mp4'当文件被调用时' Intro.mp4'并且我没有错误捕获代码来检测它。

最终结果与上面的堆栈跟踪完全相同 - 跟踪的最后3行的几百次重复,白屏和应用程序崩溃

所以可能值得检查一下 - 它可能对某些人有所帮助,但希望你有点理智并且在加载代码时遇到一些代码错误:)

答案 1 :(得分:0)

根据你的描述,听起来玩家进入无限循环,无论是分配内存还是增加指针。这是(在这里猜测)很可能是由于加载了格式不正确的视频文件。

当应用程序耗尽可寻址空间和/或指针增加/减少到指向应用程序地址空间之外的点时,内核会因内存违规而将其杀死。

答案 2 :(得分: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]

花了一个小时后我发现了bug :)我的代码。我在“fileURLWithPath”中传递了URL,因为它显示了erro。要解决这个问题,我只需要替换

 NSURL *url = [NSURL fileURLWithPath:fileURL];

NSURL *url = [NSURL URLWithString:fileURL];