Проблема отражения статуса воспроизведения / паузы стандартного интерфейса MPMoviePlayer - PullRequest
2 голосов
/ 22 ноября 2011

Один из моих компонентов интенсивно использует MPMoviePlayerController и недавно показал странную ошибку; при использовании стандартного пользовательского интерфейса (например, MPMoviePlayerController.controlStyle = MPMovieControlStyleFullscreen;) проигрыватель никогда не изменяет состояние кнопки воспроизведения / паузы (эта штука в середине моего скриншота).

enter image description here

Функциональность остается неизменной, но состояние плеера не отражается в интерфейсе пользователя.

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

Эта проблема появилась в iOS5 и не встречалась в предыдущих версиях iOS.

Для проверки проблем iOS5 я создал минималистичный проигрыватель, который не использует мою собственную платформу и, конечно же, проблема не возникла, следовательно, это должен быть мой код, вызывающий эту причуду. К сожалению, мой код чертовски большой (около 3 тыс. Строк), поэтому я не могу опубликовать его здесь.

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

Ответы [ 2 ]

1 голос
/ 06 июня 2012

Я также часто видел такое поведение, но, к сожалению, простое переключение порядка вызовов на setContentURL и установка начального времени и времени воспроизведения не имели значения.

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

1 голос
/ 24 ноября 2011

Ну, кажется, я нашел ответ (и то, что я бы назвал ошибкой iOS5) ...

Причиной раздражения MPMoviePlayerController на состояние кнопки воспроизведения был просто порядок моего кода инициализации.

Чтобы вызвать эту проблему, все, что вам нужно сделать, это запустить этот код;

moviePlayer = [[MPMoviePlayerController alloc] init];
moviePlayer.shouldAutoplay = YES;
moviePlayer.fullscreen = NO;
moviePlayer.view.frame = self.view.bounds;
moviePlayer.currentPlaybackTime = 0.0;
moviePlayer.initialPlaybackTime = 0.0;
[moviePlayer setContentURL:[NSURL URLWithString:@"http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8"]];
[self.view addSubview:moviePlayer.view];

Вы увидите пользовательский интерфейс игрока, который не меняет своего состояния Pay / Pause.

Для того, чтобы все снова заработало правильно, вы должны переместить вызов setContentURL перед установкой времени воспроизведения.

moviePlayer = [[MPMoviePlayerController alloc] init];
moviePlayer.shouldAutoplay = YES;
moviePlayer.fullscreen = NO;
moviePlayer.view.frame = self.view.bounds;
[moviePlayer setContentURL:[NSURL URLWithString:@"http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8"]];
moviePlayer.currentPlaybackTime = 0.0;
moviePlayer.initialPlaybackTime = 0.0;
[self.view addSubview:moviePlayer.view];

Я отправил сообщение об ошибке в Apple (идентификатор ошибки радара # 10484668) - буду держать вас в курсе своего ответа.

Отчет об ошибках OpenRadar

...