Можно ли использовать экземпляры AVPlayer для одновременного воспроизведения двух видео?

В настоящее время я использую MPMoviePlayerController для воспроизведения видео в своем приложении. Когда я переключаюсь с одного видео на другое, это не очень плавный переход. Я пришел к выводу, что мне нужно сделать так, чтобы первое видео исчезало, а второе видео появлялось. Для этого мне нужно, чтобы два видео воспроизводились одновременно. Я знаю, что не могу сделать это с MPMoviePlayerController. Это в документации. Можно ли это сделать с помощью AVPlayer? Могу ли я иметь два экземпляра AVPlayer, воспроизводящих разные фильмы, воспроизводимые одновременно в моем приложении, при этом оба фильма видны пользователю?


person Ron    schedule 25.06.2011    source источник
comment
Возможный дубликат несколько видео с AVPlayer   -  person Andres Canella    schedule 11.05.2016


Ответы (4)


Вы можете воспроизводить только один фильм за раз, используя MPMoviePlayer. Тем не менее, вы можете воспроизводить несколько видео одновременно с помощью AVPlayer (в AVFoundation, аудио-видео фреймворк более низкого уровня). ">пример:

person DolphinDream    schedule 24.01.2012

Вот как вы можете играть 8 за раз, а затем играть еще 8 за раз, прокручивая:

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
UICollectionViewCell *cell = (UICollectionViewCell *)[collectionView dequeueReusableCellWithReuseIdentifier:kCellIdentifier forIndexPath:indexPath];

// Enumerate array of visible cells' indexPaths to find a match
if ([self.collectionView.indexPathsForVisibleItems
     indexOfObjectPassingTest:^BOOL(NSIndexPath * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
         return (obj.item == indexPath.item);
     }]) dispatch_async(dispatch_get_main_queue(), ^{
         [self drawLayerForPlayerForCell:cell atIndexPath:indexPath];
     });


    return cell;
}

- (void)drawPosterFrameForCell:(UICollectionViewCell *)cell atIndexPath:(NSIndexPath *)indexPath {
    [self.imageManager requestImageForAsset:AppDelegate.sharedAppDelegate.assetsFetchResults[indexPath.item]
                                                          targetSize:AssetGridThumbnailSize
                                                         contentMode:PHImageContentModeAspectFill
                                                             options:nil
                                                       resultHandler:^(UIImage *result, NSDictionary *info) {
                                                           cell.contentView.layer.contents = (__bridge id)result.CGImage;
                                                       }];
}

- (void)drawLayerForPlayerForCell:(UICollectionViewCell *)cell atIndexPath:(NSIndexPath *)indexPath {
    cell.contentView.layer.sublayers = nil;
    [self.imageManager requestPlayerItemForVideo:(PHAsset *)self.assetsFetchResults[indexPath.item] options:nil resultHandler:^(AVPlayerItem * _Nullable playerItem, NSDictionary * _Nullable info) {
        dispatch_sync(dispatch_get_main_queue(), ^{
            if([[info objectForKey:PHImageResultIsInCloudKey] boolValue]) {
                [self drawPosterFrameForCell:cell atIndexPath:indexPath];
            } else {
                AVPlayerLayer *playerLayer = [AVPlayerLayer playerLayerWithPlayer:[AVPlayer playerWithPlayerItem:playerItem]];
                [playerLayer setVideoGravity:AVLayerVideoGravityResizeAspectFill];
                [playerLayer setBorderColor:[UIColor whiteColor].CGColor];
                [playerLayer setBorderWidth:1.0f];
                [playerLayer setFrame:cell.contentView.layer.bounds];
                [cell.contentView.layer addSublayer:playerLayer];
                [playerLayer.player play];
            }
        });
    }];
}

Обратите внимание, что метод drawPosterFrameForCell помещает изображение туда, где видео нельзя воспроизвести, поскольку оно хранится в iCloud, а не на устройстве.

person James Bush    schedule 15.06.2016
comment
Вот моя последняя версия совершенно гладкой прокрутки коллекции с предварительным просмотром видео в реальном времени (до 16 одновременно): youtu. be/7QlaO7WxjGg Он даже использует настраиваемый макет обложки и вид отражения, который идеально отражает предварительный просмотр видео. Исходный код находится здесь: mediafire.com/download/ivecygnlhqxwynr/ - person James Bush; 06.08.2016
comment
Хм, когда я запускаю на своем устройстве, у меня просто черный экран. Очень любопытно посмотреть, как вы это провернули. - person CIFilter; 11.10.2016
comment
@ LucasTizma 408-685-4049. Вы уверены, что это не зеленый экран? Во всяком случае, я сделал видео об этом для таких случаев, как этот. Позвоните мне, и я помогу вам с настройкой Xcode. - person James Bush; 12.10.2016

MPMoviePlayerController воспроизводит только одно видео за раз.

Но вы можете воспроизводить несколько видео одновременно, используя AVPlayer.

Ниже приведена ссылка на руководство по одновременному воспроизведению нескольких видео: Воспроизвести видео одновременно.

person iOSPawan    schedule 01.02.2012

Если вы хотите воспроизводить два видео одновременно в приложении iOS, используйте AVPlayer для воспроизведения видео.

person macpandit    schedule 22.06.2012