AVPlayer与AVPlayerViewController的使用
来源:互联网 发布:如何在淘宝上买岛国片 编辑:程序博客网 时间:2024/05/17 03:20
一、AVPlayer
AVPlayer是一个可以播放任何格式的全功能影音播放器,使用AVPlayer需导入AVFoundation.h。
1:支持视频格式: WMV,AVI,MKV,RMVB,RM,XVID,MP4,3GP,MPG等。
2:支持音频格式:MP3,WMA,RM,ACC,OGG,APE,FLAC,FLV等。
在开发中,单纯使用AVPlayer类是无法显示视频的,要将视频层添加至AVPlayerLayer中,这样才能将视频显示出来。
AVPlayer并未提供视频操作组件,需用户自定义。
初始化方法
+ (instancetype)playerWithURL:(NSURL *)URL;+ (instancetype)playerWithPlayerItem:(AVPlayerItem *)item;- (instancetype)initWithURL:(NSURL *)URL;- (instancetype)initWithPlayerItem:(AVPlayerItem *)item;
二、AVPlayerLayer
1、初始化方法
// 1、遍历初始化+ (instancetype)layer;// 2、alloc + init// 3、根据播放媒体初始化+ (AVPlayerLayer *)playerLayerWithPlayer:(nullable AVPlayer *)player;
2、常用属性
bounds:设置播放矩形区域;position:设置播放区域中心点位置;videoGravity:设置拉伸模式player:设置播放媒体
三、AVPlayerViewController
使用
iOS9以后支持画中画;
// 1、获取本地资源地址 NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForAuxiliaryExecutable:@"Cat.mp4"]]; url = urlBundle; // 2、初始化媒体播放控制器 if (_playerViewController) { _playerViewController = nil; } // 3、配置媒体播放控制器 _playerViewController = [[AVPlayerViewController alloc] init]; _playerViewController.delegate = self;// _playerViewController.showsPlaybackControls = NO;// _playerViewController.view.userInteractionEnabled = NO; // 设置媒体源数据 _playerViewController.player = [AVPlayer playerWithURL:url]; // 设置拉伸模式 _playerViewController.videoGravity = AVLayerVideoGravityResizeAspect; // 设置是否显示媒体播放组件 // 播放视频 [_playerViewController.player play]; // 设置媒体播放器视图大小 _playerViewController.view.bounds = CGRectMake(0, 100, 320, 400); _playerViewController.view.center = self.view.center; // 推送至媒体播放器进行播放// [self presentViewController:_playerViewController animated:YES completion:nil];// 直接在本视图控制器播放 [self addChildViewController:_playerViewController]; [self.view addSubview:_playerViewController.view]; [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(moviePlayDidEnd:) name:AVPlayerItemDidPlayToEndTimeNotification object:nil];
属性说明
@interface AVPlayerViewController : UIViewController@property (nonatomic, strong, nullable) AVPlayer *player;@property (nonatomic) BOOL showsPlaybackControls;@property (nonatomic, copy) NSString *videoGravity;@property (nonatomic, readonly, getter = isReadyForDisplay) BOOL readyForDisplay;@property (nonatomic, readonly) CGRect videoBounds;//定制自己的展示View@property (nonatomic, readonly, nullable) UIView *contentOverlayView;@property (nonatomic) BOOL allowsPictureInPicturePlayback NS_AVAILABLE_IOS(9_0);@property (nonatomic) BOOL updatesNowPlayingInfoCenter NS_AVAILABLE_IOS(10_0);@property (nonatomic, weak, nullable) id <AVPlayerViewControllerDelegate> delegate NS_AVAILABLE_IOS(9_0);
四、视频状态监测
1、AVPlayer 与 AVPlayerItem都有status属性,可以用KVO监测;
//loadedTimeRange属性代表已经缓冲的进度,监听此属性可以在UI中更新缓冲进度,也是很有用的一个属性。
//AVPlayerItemStatus是代表当前播放资源item 的状态(可以理解成这url链接or视频文件。可以播放成功/失败)typedef NS_ENUM(NSInteger, AVPlayerItemStatus) { AVPlayerItemStatusUnknown, AVPlayerItemStatusReadyToPlay, AVPlayerItemStatusFailed};//AVPlayerStatus是代表当前播放器的状态。typedef NS_ENUM(NSInteger, AVPlayerStatus) { AVPlayerStatusUnknown, AVPlayerStatusReadyToPlay, AVPlayerStatusFailed};//编程的时候最好使用item 的status,会准确点。
2、视频跳跃播放
视频跳跃播放采用AVPlayer 对象的seekToTime:方法;
//跳到指定时间点播放//(_palyer 为AVPlayer 对象),10是秒数,1是单位秒[_player seekToTime:CMTimeMake(10,1)];//播放完成回到开始位置[_player seekToTime:kCMTimeZero];
3、AVPayerIterm的属性的监听
#pragma mark - KVO- (void)addItemKVO{ //KVO [_item addObserver:self forKeyPath:@"status" options:NSKeyValueObservingOptionNew context:nil]; [_item addObserver:self forKeyPath:@"loadedTimeRanges" options:NSKeyValueObservingOptionNew context:nil]; [_item addObserver:self forKeyPath:@"playbackBufferEmpty" options:NSKeyValueObservingOptionNew context:nil];}- (void)removeItemKVO { [_item removeObserver:self forKeyPath:@"status"]; [_item removeObserver:self forKeyPath:@"loadedTimeRanges"]; [_item removeObserver:self forKeyPath:@"playbackBufferEmpty"];}#pragma mark - Notic- (void)addVideoNotic { //Notification [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(movieToEnd:) name:AVPlayerItemDidPlayToEndTimeNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(movieJumped:) name:AVPlayerItemTimeJumpedNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(movieStalle:) name:AVPlayerItemPlaybackStalledNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(backGroundPauseMoive) name:UIApplicationDidEnterBackgroundNotification object:nil];}- (void)removeVideoNotic { //移除监听 [[NSNotificationCenter defaultCenter] removeObserver:self name:AVPlayerItemDidPlayToEndTimeNotification object:nil]; [[NSNotificationCenter defaultCenter] removeObserver:self name:AVPlayerItemPlaybackStalledNotification object:nil]; [[NSNotificationCenter defaultCenter] removeObserver:self name:AVPlayerItemTimeJumpedNotification object:nil]; [[NSNotificationCenter defaultCenter] removeObserver:self];}
1 0
- AVPlayer与AVPlayerViewController的使用
- 媒体播放器 AVPlayer 与 AVPlayerViewController
- iOS AVPlayer 与 AVPlayerViewController
- OCiOS开发:媒体播放器 AVPlayer 与 AVPlayerViewController
- 使用AVPlayerViewController和AVPlayer播放视频 和 画中画(pictureInPicture)
- iOS AVAudioPlayer vs. AVPlayer AVPlayerViewController vs.MPMoviePlayerViewController
- 简单视频播放AVPlayer和AVPlayerViewController
- iOS开发 AVPlayerViewController(视频播放)的使用
- AVPlayer的使用
- AVPlayer的基本使用
- AVPlayer的基本使用
- AVPlayer的基本使用
- AVPlayer的使用
- AVPlayer的基本使用
- AVplayer的使用教程
- AVPlayer的基本使用
- AVPlayer的使用
- Objective-C AVPlayer播放视频的使用与封装
- BILIBILI 高并发实时弹幕系统那些事(项目开源、架构演变)
- Security 101
- numpy学习
- PhantomJS(webkit)/SlimerJS (Gecko) + CasperJS获取JavaScript渲染后的网页内容
- mongodb 3.2版本的文本搜索
- AVPlayer与AVPlayerViewController的使用
- shell变量之环境变量
- IOS开发之语音合成(科大讯飞)详解
- JFreeChart 柱形图
- php禁止同一账户同时登陆
- Java面向对象三大特征
- Android Tools Attributes,让布局设计所见即所得
- 重载与引用
- 欧洲最美的地方