Плавное видео зацикливание в iOS - PullRequest
5 голосов
/ 19 октября 2011

Кто-нибудь может предложить метод, с помощью которого вы можете добиться абсолютно плавного и плавного зацикливания видеоклипа в iOS? Я попробовал два метода, каждый из которых производит небольшую паузу, когда видео зацикливается

1) AVPlayerLayer с параметром playerItemDidReachEnd уведомлений отключен seekToTime: kCMTimeZero

Я предпочитаю использовать AVPlayerLayer (по другим причинам), но этот метод создает заметную паузу между циклами около секунды.

2) MPMoviePlayerController с setRepeatMode: MPMovieRepeatModeOne

Это приводит к меньшей паузе, но все равно не идеально.

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

Ответы [ 5 ]

3 голосов
/ 13 марта 2012

Я могу согласиться с выводами @ SamBrodkin.

[[NSNotificationCenter defaultCenter]
    addObserver: self
    selector: @selector(myMovieFinishedCallback:)
    name: MPMoviePlayerPlaybackStateDidChangeNotification
    object: m_player];

и

-(void) myMovieFinishedCallback: (NSNotification*) aNotification
{
    NSLog( @"myMovieFinishedCallback: %@", aNotification );
    MPMoviePlayerController *movieController = aNotification.object;
    NSLog( @"player.playbackState = %d", movieController.playbackState );
}

исправили проблему с зацикливанием на iOS 5 для меня тоже.

2 голосов
/ 19 июля 2012

Я только что получил это на моем iPad 3 под управлением iOS 5.1.1, базовый SDK iOS 5.1

При настройке проигрывателя фильмов установите режим повтора на MPMovieRepeatModeNone затем добавьте уведомление

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(moviePlayerDidFinish:)
                                                 name:MPMoviePlayerPlaybackDidFinishNotification
                                               object:self.moviePlayer];

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

- (void)moviePlayerDidFinish:(NSNotification *)note {
    if (note.object == self.moviePlayer) {
        NSInteger reason = [[note.userInfo objectForKey:MPMoviePlayerPlaybackDidFinishReasonUserInfoKey] integerValue];
        if (reason == MPMovieFinishReasonPlaybackEnded) {
            [self.moviePlayer play];
        }
    }
}

Apple внесла большие изменения в то, как MPMoviePlayerController обрабатывает загрузку файлов фильмов при их изменении с iOS 4 на iOS 5, поэтому я не знаю, будет ли этот метод работать, когда они выпустят iOS 6

1 голос
/ 19 июня 2013

Чтобы увидеть пример, демонстрирующий бесшовное зацикливание фонового видео (из анимированного GIF) и переключение между парой анимаций персонажей переднего плана (с альфа-каналом), взгляните на бесшовное зацикливание видео -ios . В прошлом я пытался использовать AVPlayer, и мне пришлось отказаться от решений, связанных с AVPlayer, поскольку они не работали достаточно хорошо. См. Также этот вопрос плавный переход iphone из одного видео в другое .

0 голосов
/ 17 декабря 2014

Чтобы избежать разрыва при перемотке видео, использование нескольких копий одного и того же актива в композиции помогло мне.

AVURLAsset *tAsset = [AVURLAsset assetWithURL:tURL];
CMTimeRange tEditRange = CMTimeRangeMake(CMTimeMake(0, 1), CMTimeMake(tAsset.duration.value, tAsset.duration.timescale));
AVMutableComposition *tComposition = [[[AVMutableComposition alloc] init] autorelease];
for (int i = 0; i < 100; i++) { // Insert some copies.
    [tComposition insertTimeRange:tEditRange ofAsset:tAsset atTime:tComposition.duration error:nil];
}
AVPlayerItem *tAVPlayerItem = [[AVPlayerItem alloc] initWithAsset:tComposition];
AVPlayer *tAVPlayer = [[AVPlayer alloc] initWithPlayerItem:tAVPlayerItem];
0 голосов
/ 25 августа 2013

Я исследовал ту же проблему, о которой сообщил оригинальный автор (небольшая пауза в цикле, которая нарушала бесшовность). К счастью, у меня был еще один пример видео, в котором не было такого поведения, и я нашел объяснение / изменилось только позже:

Звуковая дорожка.

Я подозреваю, что очень медленная инициализация звука (маршрутизация?).

Удаление звуковой дорожки было для меня самым простым решением (звук не нужен), но мне придется копать дальше (варианты микширования звука и тестирования решения, которое было опубликовано в этой теме).

Eric

...