iOS音频、视频、直播相关程序员手机移动程序开发

iOS视频之AVPlayerViewController

2017-01-09  本文已影响724人  滕彩虹

1. AVPlayerViewController简介

在iOS8中,iOS开发框架中引入了一个新的视频框架AVKit,其中提供了视频开发类AVPlayerViewController用于在应用中嵌入播放视频的控件。
iOS9系统后,iPad Air正式开始支持多任务与画中画的分屏功能,所谓画中画,即是用户可以将当前播放的视频缩小放在屏幕上同时进行其他应用程序的使用。
这个革命性的功能将极大的方便用户的使用。开发者使用AVPlayerViewController可以十分方便的实现视频播放的功能并在一些型号的iPad上集成画中画的功能。 
AVPlayerViewController的使用频率其实很高,加入你的App不是专门做视频流的App,仅仅需要播放功能,或者说对播放界面要求不是很高都可以使用AVPlayerController

2. AVPlayerViewController属性介绍

AVPlayerViewController内部封装的播放器
@property (nonatomic, strong, nullable) AVPlayer *player;
是否显示媒体播放组件,默认为YES
@property (nonatomic) BOOL showsPlaybackControls;
拉伸模式,默认为AVLayerVideoGravityResizeAspect
@property (nonatomic, copy) NSString *videoGravity;
可以设置的值及意义如下:
AVLayerVideoGravityResizeAspect   不进行比例缩放 以宽高中长的一边充满为基准
AVLayerVideoGravityResizeAspectFill 不进行比例缩放 以宽高中短的一边充满为基准
AVLayerVideoGravityResize     进行缩放充满屏幕```
    

是否准备好播放
@property (nonatomic, readonly, getter = isReadyForDisplay) BOOL readyForDisplay;
播放视频界面的尺寸
@property (nonatomic, readonly) CGRect videoBounds;
视频播放器的视图 自定义的控件可以添加在其上
@property (nonatomic, readonly, nullable) UIView *contentOverlayView;
接收方是否允许画中画回放。默认YES。9.0之后可以使用
@property (nonatomic) BOOL allowsPictureInPicturePlayback NS_AVAILABLE_IOS(9_0);
是否更新信息中心,10.0之后可以使用
@property (nonatomic) BOOL updatesNowPlayingInfoCenter NS_AVAILABLE_IOS(10_0);
代理
@property (nonatomic, weak, nullable) id <AVPlayerViewControllerDelegate> delegate NS_AVAILABLE_IOS(9_0);

- ###代理


start.将要开始画中画时调用的方法


##3. AVPlayerViewController用法

AVPlayerViewController可以支持播放本地及网络视频文件,支持以下格式:.mov、.mp4、.mpv、.3gp。

值得一提的是即使我们把项目中支持横屏关掉,AVPlayerViewController还是会横屏,如果想实现不横屏,需要修改,设置为NO之后,横屏也不会有变化了

AVPlayerViewController调用需要加入两个系统框架,分别为

import <AVKit/AVKit.h>

import <AVFoundation/AVFoundation.h>

-(void)initView{

[self.Playerview addSubview:self.PlayerVC.view];
[self.PlayerVC.player play];
//我们可以将它自带的控件隐藏,设置自己需要的样式,我们写一个例子
//值得注意的是contentOverlayView的大小跟AVPlayerViewController的大小是相同的
/**
 
 UIButton * button = [[UIButton alloc] initWithFrame:CGRectMake(WIDTH - 50, 400 - 60, 40, 40)];
 [button setBackgroundImage:[UIImage imageNamed:@"Rotation@2x.png"] forState:UIControlStateNormal];
 [button addTarget:self action:@selector(buttonClick) forControlEvents:UIControlEventTouchUpInside];
 button.backgroundColor = [UIColor whiteColor];
 [self.PlayerVC.contentOverlayView addSubview:button];
 self.PlayerVC.contentOverlayView.userInteractionEnabled = YES;

 */
//这里笔者有个疑问,放在ContentOverLayView上的控件点击没有反应,若有人想告,感激不尽

}

-(AVPlayerViewController*)PlayerVC{

if (!_PlayerVC) {
    _PlayerVC = [[AVPlayerViewController alloc] init];
    NSURL * url = [NSURL URLWithString:@"http://v.cctv.com/flash/mp4video6/TMS/2011/01/05/cf752b1c12ce452b3040cab2f90bc265_h264818000nero_aac32-1.mp4"];
    _PlayerVC.player = [AVPlayer playerWithURL:url];
    _PlayerVC.view.frame = CGRectMake(0, 0, WIDTH, 400);
    _PlayerVC.showsPlaybackControls = YES;
}
return _PlayerVC;

}

-(UIView*)Playerview{

if (!_Playerview) {
    _Playerview = [[UIView alloc] initWithFrame:CGRectMake(0, 0, WIDTH, 400)];
    _Playerview.backgroundColor = [UIColor yellowColor];
    [self.view addSubview:_Playerview];
}
return _Playerview;

}


- #Demo地址奉上
https://github.com/usercai/OC
上一篇 下一篇

猜你喜欢

热点阅读