1. AVPlayerViewController簡(jiǎn)介
在iOS8中,iOS開發(fā)框架中引入了一個(gè)新的視頻框架AVKit,其中提供了視頻開發(fā)類AVPlayerViewController用于在應(yīng)用中嵌入播放視頻的控件获高。
iOS9系統(tǒng)后髓霞,iPad Air正式開始支持多任務(wù)與畫中畫的分屏功能筐咧,所謂畫中畫强戴,即是用戶可以將當(dāng)前播放的視頻縮小放在屏幕上同時(shí)進(jìn)行其他應(yīng)用程序的使用责鳍。
這個(gè)革命性的功能將極大的方便用戶的使用肩钠。開發(fā)者使用AVPlayerViewController可以十分方便的實(shí)現(xiàn)視頻播放的功能并在一些型號(hào)的iPad上集成畫中畫的功能泣港。
AVPlayerViewController的使用頻率其實(shí)很高,加入你的App不是專門做視頻流的App,僅僅需要播放功能,或者說(shuō)對(duì)播放界面要求不是很高都可以使用AVPlayerController
2. AVPlayerViewController屬性介紹
-
屬性
AVPlayerViewController內(nèi)部封裝的播放器
@property (nonatomic, strong, nullable) AVPlayer *player;
是否顯示媒體播放組件,默認(rèn)為YES
@property (nonatomic) BOOL showsPlaybackControls;
拉伸模式,默認(rèn)為AVLayerVideoGravityResizeAspect
@property (nonatomic, copy) NSString *videoGravity;
可以設(shè)置的值及意義如下:
AVLayerVideoGravityResizeAspect 不進(jìn)行比例縮放 以寬高中長(zhǎng)的一邊充滿為基準(zhǔn)
AVLayerVideoGravityResizeAspectFill 不進(jìn)行比例縮放 以寬高中短的一邊充滿為基準(zhǔn)
AVLayerVideoGravityResize 進(jìn)行縮放充滿屏幕```
是否準(zhǔn)備好播放
@property (nonatomic, readonly, getter = isReadyForDisplay) BOOL readyForDisplay;
播放視頻界面的尺寸
@property (nonatomic, readonly) CGRect videoBounds;
視頻播放器的視圖 自定義的控件可以添加在其上
@property (nonatomic, readonly, nullable) UIView *contentOverlayView;
接收方是否允許畫中畫回放。默認(rèn)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.將要開始畫中畫時(shí)調(diào)用的方法
- (void)playerViewControllerWillStartPictureInPicture:(AVPlayerViewController *)playerViewController;
已經(jīng)開始畫中畫時(shí)調(diào)用的方法 - (void)playerViewControllerDidStartPictureInPicture:(AVPlayerViewController *)playerViewController;
開始畫中畫失敗調(diào)用的方法 - (void)playerViewController:(AVPlayerViewController *)playerViewController failedToStartPictureInPictureWithError:(NSError *)error;
將要停止畫中畫時(shí)調(diào)用的方法 - (void)playerViewControllerWillStopPictureInPicture:(AVPlayerViewController *)playerViewController;
已經(jīng)停止畫中畫時(shí)調(diào)用的方法 - (void)playerViewControllerDidStopPictureInPicture:(AVPlayerViewController *)playerViewController;
是否在開始畫中畫時(shí)自動(dòng)將當(dāng)前的播放界面dismiss掉 返回YES則自動(dòng)dismiss 返回NO則不會(huì)自動(dòng)dismiss - (BOOL)playerViewControllerShouldAutomaticallyDismissAtPictureInPictureStart:(AVPlayerViewController *)playerViewController;
用戶點(diǎn)擊還原按鈕 從畫中畫模式還原回app內(nèi)嵌模式時(shí)調(diào)用的方法 - (void)playerViewController:(AVPlayerViewController *)playerViewController restoreUserInterfaceForPictureInPictureStopWithCompletionHandler:(void (^)(BOOL restored))completionHandler;
##3. AVPlayerViewController用法
AVPlayerViewController可以支持播放本地及網(wǎng)絡(luò)視頻文件当纱,支持以下格式:.mov、.mp4踩窖、.mpv坡氯、.3gp。
值得一提的是即使我們把項(xiàng)目中支持橫屏關(guān)掉,AVPlayerViewController還是會(huì)橫屏,如果想實(shí)現(xiàn)不橫屏,需要修改,設(shè)置為NO之后,橫屏也不會(huì)有變化了
- (BOOL)shouldAutorotate{
//是否支持屏幕旋轉(zhuǎn),默認(rèn)為YES
return NO;
}
AVPlayerViewController調(diào)用需要加入兩個(gè)系統(tǒng)框架,分別為
import <AVKit/AVKit.h>
import <AVFoundation/AVFoundation.h>
-(void)initView{
[self.Playerview addSubview:self.PlayerVC.view];
[self.PlayerVC.player play];
//我們可以將它自帶的控件隱藏,設(shè)置自己需要的樣式,我們寫一個(gè)例子
//值得注意的是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;
*/
//這里筆者有個(gè)疑問(wèn),放在ContentOverLayView上的控件點(diǎn)擊沒(méi)有反應(yīng),若有人想告,感激不盡
}
-(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