OCiOS开发:媒体播放器 AVPlayer 与 AVPlayerViewController

简介

  • AVPlayer是一个可以播放任何格式的全功能影音播放器,使用AVPlayer需导入AVFoundation.h。

  • 支持视频格式: WMV,AVI,MKV,RMVB,RM,XVID,MP4,3GP,MPG等。

  • 支持音频格式: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;

常用属性

  • status:获取播放媒体状态

  • rate:设置播放速度

常用方法

// 1、播放
- (void)play;// 2、暂停
- (void)pause;

AVPlayerLayer

AVPlayerLayer主要用于显示视频;

1、初始化方法

// 1、遍历初始化
+ (instancetype)layer;// 2、alloc + init// 3、根据播放媒体初始化
+ (AVPlayerLayer *)playerLayerWithPlayer:(nullable AVPlayer *)player;

2、常用属性

  • bounds:设置播放矩形区域;

  • position:设置播放区域中心点位置;

  • videoGravity:设置拉伸模式

  • player:设置播放媒体

AVPlayerViewController

  • AVPlayerViewController提供了默认的可视化控制界面,要使用AVPlayerViewController需导入AVKit.h。

  • AVPlayerViewController整合了一个完整的播放器,可以作为控制器进行操作显示。

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

常用属性

  • player:设置播放器

  • showsPlaybackControls:设置是否显示媒体播放组件,默认YES

  • videoGravity:设置视频拉伸模式

  • allowsPictureInPicturePlayback:设置是否允许画中画回放,默认YES

  • delegate:设置代理

AVPlayerViewControllerDelegate

// 1、即将开始画中画
- (void)playerViewControllerWillStartPictureInPicture:(AVPlayerViewController *)playerViewController;// 2、开始画中画
- (void)playerViewControllerDidStartPictureInPicture:(AVPlayerViewController *)playerViewController;// 3、画中画失败
- (void)playerViewController:(AVPlayerViewController *)playerViewController failedToStartPictureInPictureWithError:(NSError *)error;// 4、即将结束画中画
- (void)playerViewControllerWillStopPictureInPicture:(AVPlayerViewController *)playerViewController;// 5、结束画中画
- (void)playerViewControllerDidStopPictureInPicture:(AVPlayerViewController *)playerViewController;

媒体播放器案例

本案例主要讲解播放视频的使用方法;

效果展示

这里写图片描述

代码示例

#import "ViewController.h"
#import 
#import enum {DirectPlayBtnTag = 10,FullScreenPlayBtnTag
};@interface ViewController ()  {AVPlayer *_player; /**< 媒体播放器 */AVPlayerViewController *_playerViewController; /**< 媒体播放控制器 */}@property (nonatomic, strong) UIButton *directPlayBtn;     /**< 直接播放按钮 */
@property (nonatomic, strong) UIButton *fullscreenPlayBtn; /**< 全屏播放 */@property (nonatomic, strong) AVPlayer *player; /**< 媒体播放器 */
@property (nonatomic, strong) AVPlayerViewController *playerViewController; /**< 媒体播放控制器 */- (void)initializeUserInterface; /**< 初始化用户界面 */@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];[self initializeUserInterface];
}#pragma mark *** Initialize methods ***- (void)initializeUserInterface {self.title = @"音乐播放器";self.view.backgroundColor = [UIColor whiteColor];// 加载视图[self.view addSubview:self.directPlayBtn];[self.view addSubview:self.fullscreenPlayBtn];
}#pragma mark *** Events ***
- (void)respondsToButton:(UIButton *)sender {switch (sender.tag) {// 直接播放case DirectPlayBtnTag: {if (_player) {[_player pause];_player = nil;}if (_playerViewController) {[_playerViewController removeFromParentViewController];[_playerViewController.view removeFromSuperview];_playerViewController = nil;}// 1、获取媒体资源地址NSString *path = [[NSBundle mainBundle] pathForAuxiliaryExecutable:@"宣传资料.mp4"];NSURL *sourceMovieURL = [NSURL fileURLWithPath:path];// 2、创建AVPlayerItemAVPlayerItem *playerItem = [AVPlayerItem playerItemWithURL:sourceMovieURL];// 3、根据AVPlayerItem创建媒体播放器_player = [AVPlayer playerWithPlayerItem:playerItem];// 4、创建AVPlayerLayer,用于呈现视频AVPlayerLayer *playerLayer = [AVPlayerLayer playerLayerWithPlayer:_player];// 5、设置显示大小和位置playerLayer.bounds = CGRectMake(0, 0, 350, 300);playerLayer.position = CGPointMake(CGRectGetMidX(self.view.bounds), 64 + CGRectGetMidY(playerLayer.bounds) + 30);// 6、设置拉伸模式playerLayer.videoGravity = AVLayerVideoGravityResizeAspect;// 7、获取播放持续时间NSLog(@"%lld", playerItem.duration.value);[_player play];[self.view.layer addSublayer:playerLayer];}break;// 全屏播放case FullScreenPlayBtnTag: {if (_player) {[_player pause];_player = nil;}// 初始化URL资源地址// 获取网络资源地址// + (nullable instancetype)URLWithString:(NSString *)URLString;// 1、获取本地资源地址NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForAuxiliaryExecutable:@"宣传资料.mp4"]];// 2、初始化媒体播放控制器if (_playerViewController) {_playerViewController = nil;}// 3、配置媒体播放控制器_playerViewController = [[AVPlayerViewController alloc]  init];// 设置媒体源数据_playerViewController.player = [AVPlayer playerWithURL:url];// 设置拉伸模式_playerViewController.videoGravity = AVLayerVideoGravityResizeAspect;// 设置是否显示媒体播放组件_playerViewController.showsPlaybackControls = YES;// 设置大力_playerViewController.delegate = self;// 播放视频[_playerViewController.player play];// 设置媒体播放器视图大小_playerViewController.view.bounds = CGRectMake(0, 0, 350, 300);_playerViewController.view.center = CGPointMake(CGRectGetMidX(self.view.bounds), 64 + CGRectGetMidY(_playerViewController.view.bounds) + 30);// 4、推送播放// 推送至媒体播放器进行播放// [self presentViewController:_playerViewController animated:YES completion:nil];// 直接在本视图控制器播放[self addChildViewController:_playerViewController];[self.view addSubview:_playerViewController.view];}break;default:break;}
}#pragma mark *** AVPlayerViewControllerDelegate ***
- (void)playerViewControllerWillStartPictureInPicture:(AVPlayerViewController *)playerViewController {NSLog(@"%@", NSStringFromSelector(_cmd));
}- (void)playerViewControllerDidStartPictureInPicture:(AVPlayerViewController *)playerViewController {NSLog(@"%@", NSStringFromSelector(_cmd));
}- (void)playerViewControllerWillStopPictureInPicture:(AVPlayerViewController *)playerViewController {NSLog(@"%@", NSStringFromSelector(_cmd));
}- (void)playerViewControllerDidStopPictureInPicture:(AVPlayerViewController *)playerViewController {NSLog(@"%@", NSStringFromSelector(_cmd));
}- (void)playerViewController:(AVPlayerViewController *)playerViewController failedToStartPictureInPictureWithError:(NSError *)error {NSLog(@"%@", NSStringFromSelector(_cmd));
}
#pragma mark *** Getters ***
- (UIButton *)directPlayBtn {if (!_directPlayBtn) {_directPlayBtn = [UIButton buttonWithType:UIButtonTypeSystem];_directPlayBtn.bounds = CGRectMake(0, 0, 100, 40);_directPlayBtn.center = CGPointMake(CGRectGetMidX(self.view.bounds) - CGRectGetMidX(_directPlayBtn.bounds), CGRectGetMidY(self.view.bounds) + 100);_directPlayBtn.tag = DirectPlayBtnTag;[_directPlayBtn setTitle:@"直接播放" forState:UIControlStateNormal];[_directPlayBtn addTarget:self action:@selector(respondsToButton:) forControlEvents:UIControlEventTouchUpInside];}return _directPlayBtn;
}- (UIButton *)fullscreenPlayBtn {if (!_fullscreenPlayBtn) {_fullscreenPlayBtn = [UIButton buttonWithType:UIButtonTypeSystem];_fullscreenPlayBtn.bounds = CGRectMake(0, 0, 100, 30);_fullscreenPlayBtn.center = CGPointMake(CGRectGetMidX(self.view.bounds) + CGRectGetMidX(_fullscreenPlayBtn.bounds), CGRectGetMidY(self.view.bounds) + 100);_fullscreenPlayBtn.tag = FullScreenPlayBtnTag;[_fullscreenPlayBtn setTitle:@"全屏播放" forState:UIControlStateNormal];[_fullscreenPlayBtn addTarget:self action:@selector(respondsToButton:) forControlEvents:UIControlEventTouchUpInside];}return _fullscreenPlayBtn;
}
@end


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部