网络知识 娱乐 [iOS]-AVPlayerViewController实现视频播放

[iOS]-AVPlayerViewController实现视频播放

AVKit从iOS8开始被引入iOS平台。针对iOS平台的AVKit是一个简单的标准框架-只包含一个AVPlayerViewController类。它是UIViewController的子类,用于展示并控制AVPlayer实例的播放。

AVPlayerViewController具有一个很小的界面,提供以下几个属性:

■ player:用来播放媒体内容的AVPlayer实例
■ showsPlaybackControls:用来表示播放控件是否显示或隐藏。
■ videoGravity:视频的显示区域设置
■ readForDisplay:通过观察这个布尔值类型的值来确定视频内容是否已经准备好进行展示。

话不多说,我们下面就展示AVPlayerViewController的创建过程:

AVPlayerViewController的创建:

我们本次创建AVPlayerViewController均在viewController.m(实现文件)中,具体如下:

我们先引入头文件并声明相关属性:

#import "ViewController.h"
//下方这两个头文件很重要
#import <AVFoundation/AVFoundation.h>
#import <AVKit/AVKit.h>

//首先,我们用“class-continuation分类”声明其属性
@interface ViewController ()
@property (nonatomic, strong) AVPlayerViewController *avPlayerVC;

@end

接着我们在viewDidLoad方法中进行具体实现:

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    //设置白色背景色
	self.view.backgroundColor = [UIColor whiteColor];
	
	//获取视频路径(此处的路径必须为视频的mp4地址)
    NSString *webVideoPath = @"http://1309230531.vod2.myqcloud.com/3d4b61fdvodcq1309230531/9161aa0a387702296211742710/IFoa3KCPOH0A.mp4";

	//用视频路径的字符串生成网络接口
	NSURL *webVideoUrl = [NSURL URLWithString:webVideoPath];

	//创建AVPlayer(同时引用上方创建好的网络接口)
    AVPlayer *avPlayer = [[AVPlayer alloc] initWithURL:webVideoUrl];

	//使用AVPlayer创建AVPlayerViewController
    _avPlayerVC =[[AVPlayerViewController alloc] init];
	_avPlayerVC.player = avPlayer;

	//设置AVPlayerViewController的位置
	_avPlayerVC.view.frame = CGRectMake([UIScreen mainScreen].bounds.size.width * 0, [UIScreen mainScreen].bounds.size.height * 0.3, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height * 0.26);

	//特别注意:AVPlayerViewController不能作为局部变量被释放,否则无法播放成功
    //解决1.AVPlayerViewController作为属性
    //解决2:使用addChildViewController,AVPlayerViewController作为子视图控制器
    //下方注释代码为将AVPlayerViewController作为子视图控制器,但由于此处的AVPlayerViewController已是属性,所以无须作为子视图
    //[self addChildViewController:_avPlayerVC];
    //将AVPlayerViewController的视图添加到当前视图
    [self.view addSubview:_avPlayerVC.view];
}

@end

到这里,我们整个AVPlayerViewController实现视频播放的创建过程就实现了。

下面说明其中几个重要的点:
■ 所要播放的视频的地址一定要是视频在网络上的mp4地址,如果手头有视频但是想用该视频生成网络mp4地址的话,可以将视频上传到腾讯云中,然后通过腾讯云的解码处理生成其网络mp4地址。
■ 想要视频播放成功,必须满足两点中的其中一点:

  1. AVPlayerViewController作为属性
  2. 使用addChildViewController,AVPlayerViewController作为子视图控制器
    (是由于AVPlayerViewController不能作为局部变量被释放,否则无法播放成功)

■ 由于视频的mp4网络地址一般都是http:开头的链接,所以需要在info文件中做以下设置:
在这里插入图片描述
我们需要在App Transport Security Settings下创建Allow Aebitrary Loads,并将其Type为Boolean类型的Value设置为YES;如本身就没有App Transport Security Settings的话则需要创建一个。

最后我们可以看一下代码的实际运行效果:
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
总体效果就像上面的图片一样了,可以横竖屏播放,也可以小窗口播放,还可以关闭视频声音、选择拉伸适应屏幕、暂停、滑动视频进度条播放,快进快退等等,实用的小功能非常齐全。