MPMoviePlayerController не завершает загрузку и не воспроизводит поток

Я пытаюсь воспроизвести видео с помощью MPMoviePlayerController через HTTP Live Streaming (с Adobe Media Server).

- (void) viewDidAppear:(BOOL)animated{
    [super viewDidAppear:animated];
    [self playVideo];
}

- (void) playVideo{
    NSURL *url = [NSURL URLWithString:@"http://192.168.10.27/hls-vod/test.mp4.m3u8"];
    MPMoviePlayerController *moviePlayer =
    [[MPMoviePlayerController alloc] initWithContentURL:url];
    moviePlayer.controlStyle = MPMovieControlStyleDefault;
    [self.view addSubview:moviePlayer.view];
    [moviePlayer setFullscreen:YES animated:YES];
    [moviePlayer play];
}

Плеер запускается правильно, но все еще загружается и не начинает воспроизведение видео. Я попробовал несколько ссылок на Safari на моем устройстве, и он работает правильно!

Вы хоть что-нибудь знаете об этой проблеме?


person Aladdin Gallas    schedule 31.01.2013    source источник


Ответы (3)


Я нашел решение! Мне просто нужно объявить moviePlayer в интерфейсе контроллера и инициировать его методом playVideo, и все заработало!

person Aladdin Gallas    schedule 01.02.2013
comment
Отредактируйте свой вопрос, чтобы отразить внесенный вами ответ или изменение. Спасибо - person mcphersonjr; 22.10.2014

  1. Вы пытались использовать настоящее устройство? Иногда MPMoviePlayerControllers некорректно работает в симуляторе.

  2. Вы создаете более одного MPMoviePlayerController одновременно? У вас может быть только один экземпляр MPMoviePlayerController, поэтому, если вам нужно воспроизвести второе видео, первое должно быть либо уничтожено, либо повторно использовано.

  3. Файл m3u8 - это список воспроизведения, а не видеофайл, поэтому просмотрите файл и убедитесь, что он указывает на типы файлов, которые поддерживаются MPMoviePlayerController.

Также обратите внимание, что вы воспроизводите видео в методе viewDidAppear. Обратите внимание, что это будет вызываться каждый раз, когда пользователь выходит из полноэкранного режима на MPMoviePlayerController, поэтому вы можете добавить туда дополнительную логику, чтобы решить, показывать ли это. (Если только вы не хотите всегда показывать это навсегда.)

person Aaron Brager    schedule 31.01.2013
comment
Спасибо, Аарон! 1: Это происходит как в устройстве, так и в симуляторе. 2: Я использую только один экземпляр MPMoviePlayerController 3: Сервер Adobe Media генерирует файл m3u8! так что мне плевать на содержимое m3u8! но я попытался воспроизвести образец, предоставленный Adobe, и файл m3u8 настроен правильно! Кто-то сказал, что это необходимо, и с помощью # EXT-X-ENDLIST я проверил файл и добавил его! до сих пор не работает. Я сказал, что test.mp4 и образец, предоставленный Adobe, работают с iOS Safari! Думаю, проблема в сети (может быть)! - person Aladdin Gallas; 31.01.2013
comment
Для viewDidAppear: Я создаю демо, которое я должен предоставить моему боссу! Настоящее приложение будет более структурированным! - person Aladdin Gallas; 31.01.2013

(ФИКСИРОВАННЫЙ!!!!!)

Я столкнулся с этой проблемой раньше.

Причем проблема была из-за статического плеера. Попробуйте использовать свойство MPMoviewPlayer

пример кода выглядит так:

@interface YourViewController ()
@property (nonatomic, strong) MPMoviewPlayer *mp;
@end

@implementation YourViewController
- (void)playVideo {
    NSURL *movieURL = [NSURL URLWithString:@"http://the/url/playlist.m3u8"];
    self.mp = [[MPMoviePlayerController alloc] initWithContentURL:movieURL];

    if (self.mp)
    {
        self.mp.view.frame = self.view.bounds;
        [self.view addSubview:self.mp.view];

        // save the movie player object
        [self.mp setFullscreen:YES];

        // Play the movie!
        [self.mp play];
    }
}

@end
person Basil Mariano    schedule 25.06.2015