我目前正在使用MPMoviePlayerController
在我的应用中播放视频。当我从一个视频切换到另一个视频时,它不是一个非常平滑的过渡。我得出的结论是,我需要做的是在第二个视频消失的同时淡出第一个视频。要做到这一点,我需要同时播放两个视频。我知道我不能用MPMoviePlayerController
做到这一点。它在文档中。是否可以使用AVPlayer
完成?我可以有两个AVPlayer
个实例,播放不同的电影,在我的应用中同时播放,用户可以看到这两部电影吗?
答案 0 :(得分:4)
您只能使用MPMoviePlayer一次播放一部电影。但是,您可以使用AVPlayer同时播放多个视频(在AVFoundation,低级音频 - 视频框架中)..查看此example:
答案 1 :(得分:0)
以下是如何一次播放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上,而不是设备上。
答案 2 :(得分:-1)
MPMoviePlayerController
一次只播放一个视频。
但是,您可以使用AVPlayer
同时播放多个视频。
以下是同时播放多个视频的教程链接 - Play video simultaneously
答案 3 :(得分:-2)
如果您想在iOS应用中同时播放两个视频,请使用AVPlayer播放视频。