IOS 6 потоковый проигрыватель com.apple.coremedia.networkbuffering bug - программирование
Подтвердить что ты не робот

IOS 6 потоковый проигрыватель com.apple.coremedia.networkbuffering bug

У меня возникли проблемы с подключением моего приложения (проигрывателя музыки и видеопотока) на симуляторе iOS 6.

Когда я запускаю музыкальное видео, он выдает сообщение об ошибке в этом потоке: com.apple.coremedia.networkbuffering

и это на информации журнала:

2012-09-13 17:45:09.260 app[32563:c07] [MPAVController] Autoplay: Disabling autoplay for pause
2012-09-13 17:45:09.260 app[32563:c07] [MPAVController] Autoplay: Disabling autoplay
2012-09-13 17:45:09.305 app[32563:c07] [MPAVController] Autoplay: Enabling autoplay
2012-09-13 17:45:09.307 app[32563:c07] handlePlaybackNowPlayingNotification
2012-09-13 17:45:09.308 app[32563:c07] [MPAVController] Autoplay: Likely to keep up or full buffer: 0
2012-09-13 17:45:09.308 app[32563:c07] [MPAVController] Autoplay: Skipping autoplay, not enough buffered to keep up.
2012-09-13 17:45:09.318 app[32563:c07] [MPAVController] Autoplay: Enabling autoplay
2012-09-13 17:45:09.320 app[32563:c07] [MPCloudAssetDownloadController] Prioritization requested for media item ID: 0

Я использую MPMoviePlayerController с потоком на основе http, и он отлично работает на iOS 4 или iOS 5

Любые идеи о том, как его исправить?

4b9b3361

Ответ 1

У меня была такая же проблема...

попробуйте сделать это сразу после создания вашего проигрывателя:

[player prepareToPlay];

Он должен вызываться автоматически, когда вы вызываете игру, но, по-видимому, на iOS 6 что-то не так, если вы не вызываете его явно.

В моем случае он решил проблему.

Ответ 2

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

Это исключение на самом деле правильно обрабатывается SDK и не вызывает сбоя приложения.

Обратите внимание, что это происходит только на симуляторе, а не на устройстве.

Проблема тесно связана с этой проблемой what-does-this-gdb-output-mean. Разница в том, что вы больше не будете получать эти сообщения об ошибках, но исключение все равно бросается (но также и считается).

Ответ 3

Я проверил с помощью xcode 4.5 + SDK6.0 по сравнению с комбинациями xcode 4.4.1 + SDK5.1, что есть проблема с версией ios 6 MPMoviePlayerController. Я только работал с iPads.

вот мои наблюдения: - - Я никогда не видел видеозапись на ios 6.0 с моим кодом, который использует MPMoviePlayerController. - с xcode 4.4.1 и SDK 5.1, я видел, как работает код в версиях iOS 5.1, 5.0 и 4.3. - с xcode 4.5 и SDK 6.0, игрок всегда терпит неудачу в симуляторе, но большинство установок на устройстве ios 5.1 работают. я продолжал переустанавливать приложение на устройстве ios 5.1 и опробовать плеер. он только провалился один раз.

вот мои наблюдения, когда игрок потерпел неудачу: - Несколько раз, когда игрок терпел неудачу, я видел журналы, о которых вы говорили выше. в других случаях я даже не видел журналы. - Я установил точку останова в функции, которая получила уведомление MPMoviePlayerPlaybackDidFinishNotification. то я искал errorLog в проигрывателе и не было. Я искал MPMoviePlayerPlaybackDidFinishReasonUserInfoKey, и это было 0 (MPMovieFinishReasonPlaybackEnded). поэтому MPMoviePlayerController не знал, что все пошло не так!

вывод: ios6 и/или SDK 6 получили ошибку.

Ответ 4

NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"sample" ofType:@"mp4"]];
MPMoviePlayerViewController  *moviePlayer = [[MPMoviePlayerViewController alloc] initWithContentURL:url];



moviePlayer.view.frame = self.view.frame;
moviePlayer.moviePlayer.shouldAutoplay=YES;
moviePlayer.moviePlayer.controlStyle = MPMovieControlStyleNone;
[moviePlayer.moviePlayer setFullscreen:YES animated:YES];
[self.view addSubview:moviePlayer.view];
[moviePlayer.moviePlayer play];

Примечание. Перед iOS 6 не нужно вызывать [moviePlayer.moviePlayer play]; как только вы добавите представление игрока в представление, которое оно начнет воспроизводить, но в iOS 6 вам нужно явно вызвать функцию воспроизведения

Ответ 5

У меня такая же проблема с MPMoviePlayerController для ios6. Поэтому я изменил свой код на fllowing, и теперь он работает нормально.

NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"sample" ofType:@"mp4"]];
MPMoviePlayerViewController  *moviePlayer = [[MPMoviePlayerViewController alloc] initWithContentURL:url];



moviePlayer.view.frame = self.view.frame;
moviePlayer.moviePlayer.shouldAutoplay=YES;
moviePlayer.moviePlayer.controlStyle = MPMovieControlStyleNone;
[moviePlayer.moviePlayer setFullscreen:YES animated:YES];
[self.view addSubview:moviePlayer.view];
[moviePlayer.moviePlayer play];

Ответ 6

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

Я не транслирую контент из Интернета, содержимое находится на устройстве, поэтому изначально контент отображается в представлении.

Я предполагаю, что они внедрили новую функцию в MPMoviePlayerController, чтобы предотвратить "мертвое время" во время воспроизведения. Я видел некоторые приложения, которые просто зависают, когда данные фильма переходят в автономный режим, или вы случайно выходите из диапазона вашего Wi-Fi "

Моя попытка решить эту проблему будет состоять в том, чтобы просмотреть сообщение уведомления, переданное -

(void)moviePlayBackDidFinish: (NSNotification*)notification

это делается путем запроса словаря пользовательской информации

NSDictionary *userInfo = [notification userInfo];

значение для MPMoviePlayerPlaybackDidFinishReasonUserInfoKey равно 0 в случае такого отказа.

Это отправная точка. Моя мысль состоит в том, чтобы повторно установить фильм в этот момент на этом уникальном сбое.

Я буду держать вас в курсе результатов.

Ответ 7

сначала я сделал что-то вроде ниже

[self.player.moviePlayer prepareToPlay];
[self.player.moviePlayer play];
self.player.moviePlayer.shouldAutoplay = YES;

и когда я удалил следующую строку

self.player.moviePlayer.shouldAutoplay = YES;

проблема решена.

Ответ 8

У меня возникла проблема с приведенным ниже кодом, плеер переходит в полноэкранный режим, но сразу после этого он закрывается и вообще не воспроизводит видео.

NSURL * url = [NSURL URLWithString: @ " http://streaming.disponivel.uol.com.br/video360p2/288148-1192657.mp4" ];

    _player = [[MPMoviePlayerViewController alloc] initWithContentURL:url];

    [_player.moviePlayer setMovieSourceType:MPMovieSourceTypeFile];

    [_player.moviePlayer setControlStyle:MPMovieControlStyleDefault];

    [_player.moviePlayer setFullscreen:YES animated:YES];      

    [self presentMoviePlayerViewControllerAnimated:_player];

    [_player.moviePlayer prepareToPlay];

    [_player.moviePlayer play];

Ответ 9

Я также использую MPMoviePlayerViewController для показа живого видео в своем приложении, и у меня появляется тот же список ошибок, что и выше. Я обнаружил, что MPMoviePlayer не поддерживает более крупные данные для показа видео, но если вы используете меньшие видеоданные, он отлично работает, не вызывая ошибок. На самом деле это не проблема подготовки к воспроизведению и воспроизведению свойств фильма.

Если вам нужно показать большие данные, используйте веб-просмотр в своем приложении.