Можно ли использовать экземпляры AVPlayer для одновременного воспроизведения двух видео? - PullRequest
4 голосов
/ 25 июня 2011

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

Ответы [ 4 ]

4 голосов
/ 24 января 2012

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

0 голосов
/ 15 июня 2016

Вот как вы можете воспроизводить 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, а не на устройстве.

0 голосов
/ 22 июня 2012

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

0 голосов
/ 01 февраля 2012

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

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

Ниже приведена учебная ссылка для одновременного воспроизведения нескольких видео - Воспроизведение видео одновременно

...