Xcode Objective-C IOS - 如何相邻播放两个视频?
Xcode Objective-C IOS - How to play two videos next to each other?
我想同时播放两个视频。
在构建 Mac 应用程序时,我通过使用 AVPlayer 对象来完成此操作。
您可以将此视图放在 ViewController.
中
但是当我试图在 IOS 项目的对象库中查找 AVPlayer 对象时,它没有出现。只有 AVKit Player View Controller 做到了。
但是 AVKit Player View Controller 总是在单独的 ViewController 中全屏播放视频。我在互联网上搜索了一种方法,可以将两个视频并排显示,但到目前为止,我还没有找到任何有用的东西。
所以我的问题是:有什么方法可以让我在 IOS 应用程序中并排显示两个视频?
AVPlayer
自 iOS 4 以来在 iOS 上可用。AVPlayer
是一个控制器对象,用于管理没有 UI 的媒体资产的播放直接绑定到它的元素,这就是为什么它不位于 IB 对象库中的原因。相反,您可以使用 AVPlayerLayer
我们使用 Apple 的标准 AVPlayerViewController
构建您自己的 UI,其中包括默认控件和标准播放行为。让两个视频并排播放的最快方法是在另一个视图控制器中嵌入两个 AVPlayerViewController
实例。如果您使用的是故事板,您的代码可以短至:
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.destinationViewController isKindOfClass:[AVPlayerViewController class]] && [segue.identifier isEqualToString:@"First Player"])
{
AVPlayerViewController *avPlayerViewController = (AVPlayerViewController *)segue.destinationViewController;
avPlayerViewController.player = [AVPlayer playerWithURL: [NSURL URLWithString:@"http://devstreaming.apple.com/videos/wwdc/2016/703rx8zlfedjfom6l93/703/hls_vod_mvp.m3u8"]];
[avPlayerViewController.player play];
} else if ([segue.destinationViewController isKindOfClass:[AVPlayerViewController class]] && [segue.identifier isEqualToString:@"Second Player"])
{
AVPlayerViewController *avPlayerViewController = (AVPlayerViewController *)segue.destinationViewController;
avPlayerViewController.player = [AVPlayer playerWithURL: [NSURL URLWithString:@"http://devstreaming.apple.com/videos/wwdc/2016/703rx8zlfedjfom6l93/704/hls_vod_mvp.m3u8"]];
[avPlayerViewController.player play];
}
}
@end
或类似的东西。大部分工作由两个容器视图完成并将转场嵌入到两个 AVPlayerViewControllers
如果您想要自定义视频 UI,您可以查看 Apple's PIP sample code 他们展示了如何使用键值观察自定义视频播放器 UI.
But the AVKit Player View Controller always plays videos full screen in a separate ViewController
这是错误的。如果您希望电影视图显示为子视图,请将 AVPlayerViewController 设为子视图控制器。从 Storyboard 中的 Container View Controller 开始,然后嵌入到 AVPlayerViewController。
或者,您可以在没有 AVPlayerViewController 的情况下使用 AVPlayer(在代码中)。
// ViewController.h
@import AVFoundation;
@import AVKit;
@property(nonatomic, readonly) AVPlayerItem *currentItem;
// ViewController.m
- (void)viewDidLoad {
[super viewDidLoad];
i=0;
[self videoPlay:[_passdataArr valueForKey:@"videoUrl"]];
}
-(void)videoPlay:(NSArray*)links
{
NSLog(@"1");
//create an AVPlayer
_detailView.hidden=YES;
// NSMutableArray *videolinksArr=[[NSMutableArray alloc] init];
// videolinksArr=_videoLinkArr;
NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@",links]];
// create a player view controller
player = [AVPlayer playerWithURL:url];
AVPlayerViewController *controller = [[AVPlayerViewController alloc] init];
[self addChildViewController:controller];
[self.view addSubview:controller.view];
controller.view.frame = self.bgimg.frame;
controller.player = player;
controller.showsPlaybackControls = YES;
player.closedCaptionDisplayEnabled = NO;
[player pause];
[player play];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(AllVideoPlay:) name:AVPlayerItemDidPlayToEndTimeNotification object:_currentItem];
}
-(void)AllVideoPlay:(NSNotification*)aNotification
{
NSLog(@"2");
NSArray *temp = _videoLinkArr[i];
[self videoPlay:temp];
i++;
}
我想同时播放两个视频。 在构建 Mac 应用程序时,我通过使用 AVPlayer 对象来完成此操作。 您可以将此视图放在 ViewController.
中但是当我试图在 IOS 项目的对象库中查找 AVPlayer 对象时,它没有出现。只有 AVKit Player View Controller 做到了。
但是 AVKit Player View Controller 总是在单独的 ViewController 中全屏播放视频。我在互联网上搜索了一种方法,可以将两个视频并排显示,但到目前为止,我还没有找到任何有用的东西。
所以我的问题是:有什么方法可以让我在 IOS 应用程序中并排显示两个视频?
AVPlayer
自 iOS 4 以来在 iOS 上可用。AVPlayer
是一个控制器对象,用于管理没有 UI 的媒体资产的播放直接绑定到它的元素,这就是为什么它不位于 IB 对象库中的原因。相反,您可以使用 AVPlayerLayer
我们使用 Apple 的标准 AVPlayerViewController
构建您自己的 UI,其中包括默认控件和标准播放行为。让两个视频并排播放的最快方法是在另一个视图控制器中嵌入两个 AVPlayerViewController
实例。如果您使用的是故事板,您的代码可以短至:
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.destinationViewController isKindOfClass:[AVPlayerViewController class]] && [segue.identifier isEqualToString:@"First Player"])
{
AVPlayerViewController *avPlayerViewController = (AVPlayerViewController *)segue.destinationViewController;
avPlayerViewController.player = [AVPlayer playerWithURL: [NSURL URLWithString:@"http://devstreaming.apple.com/videos/wwdc/2016/703rx8zlfedjfom6l93/703/hls_vod_mvp.m3u8"]];
[avPlayerViewController.player play];
} else if ([segue.destinationViewController isKindOfClass:[AVPlayerViewController class]] && [segue.identifier isEqualToString:@"Second Player"])
{
AVPlayerViewController *avPlayerViewController = (AVPlayerViewController *)segue.destinationViewController;
avPlayerViewController.player = [AVPlayer playerWithURL: [NSURL URLWithString:@"http://devstreaming.apple.com/videos/wwdc/2016/703rx8zlfedjfom6l93/704/hls_vod_mvp.m3u8"]];
[avPlayerViewController.player play];
}
}
@end
或类似的东西。大部分工作由两个容器视图完成并将转场嵌入到两个 AVPlayerViewControllers
如果您想要自定义视频 UI,您可以查看 Apple's PIP sample code 他们展示了如何使用键值观察自定义视频播放器 UI.
But the AVKit Player View Controller always plays videos full screen in a separate ViewController
这是错误的。如果您希望电影视图显示为子视图,请将 AVPlayerViewController 设为子视图控制器。从 Storyboard 中的 Container View Controller 开始,然后嵌入到 AVPlayerViewController。
或者,您可以在没有 AVPlayerViewController 的情况下使用 AVPlayer(在代码中)。
// ViewController.h
@import AVFoundation;
@import AVKit;
@property(nonatomic, readonly) AVPlayerItem *currentItem;
// ViewController.m
- (void)viewDidLoad {
[super viewDidLoad];
i=0;
[self videoPlay:[_passdataArr valueForKey:@"videoUrl"]];
}
-(void)videoPlay:(NSArray*)links
{
NSLog(@"1");
//create an AVPlayer
_detailView.hidden=YES;
// NSMutableArray *videolinksArr=[[NSMutableArray alloc] init];
// videolinksArr=_videoLinkArr;
NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@",links]];
// create a player view controller
player = [AVPlayer playerWithURL:url];
AVPlayerViewController *controller = [[AVPlayerViewController alloc] init];
[self addChildViewController:controller];
[self.view addSubview:controller.view];
controller.view.frame = self.bgimg.frame;
controller.player = player;
controller.showsPlaybackControls = YES;
player.closedCaptionDisplayEnabled = NO;
[player pause];
[player play];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(AllVideoPlay:) name:AVPlayerItemDidPlayToEndTimeNotification object:_currentItem];
}
-(void)AllVideoPlay:(NSNotification*)aNotification
{
NSLog(@"2");
NSArray *temp = _videoLinkArr[i];
[self videoPlay:temp];
i++;
}