iOS AVPlayer 与 AVPlayerViewController
iOS 媒体功能主要的类
- AVPlayer 全功能影音播放器
- AVPlayerLayer 主要用于显示视频
- AVPlayerViewController 提供了默认的可视化控制界面
一、 AVPlayer
1. 说明
- 使用AVPlayer需导入AVFoundation.h。
- 支持视频格式: WMV,AVI,MKV,RMVB,RM,XVID,MP4,3GP,MPG等。
- 支持音频格式:MP3,WMA,RM,ACC,OGG,APE,FLAC,FLV等。
在开发中,单纯使用AVPlayer类是无法显示视频的,要将视频层添加至AVPlayerLayer中,这样才能将视频显示出来
- AVPlayer并未提供视频操作组件,需用户自定义。
2. 初始化方法
+ (instancetype)playerWithURL:(NSURL *)URL;+ (instancetype)playerWithPlayerItem:(AVPlayerItem *)item;- (instancetype)initWithURL:(NSURL *)URL;- (instancetype)initWithPlayerItem:(AVPlayerItem *)item;
3. 属性
- status:获取播放媒体状态
- rate:设置播放速度
4. 常用方法
// 1、播放
- (void)play;// 2、暂停
- (void)pause;
二、 AVPlayerLayer
1. 初始化方法
// 1、遍历初始化
+ (instancetype)layer;// 2、alloc + init// 3、根据播放媒体初始化
+ (AVPlayerLayer *)playerLayerWithPlayer:(nullable AVPlayer *)player;
2. 常用属性
- bounds:设置播放矩形区域;
- position:设置播放区域中心点位置;
- videoGravity:设置拉伸模式
- player:设置播放媒体
三、 AVPlayerViewController
- 要使用AVPlayerViewController需导入AVKit.h。
- AVPlayerViewController整合了一个完整的播放器,可以作为控制器进行操作显示。
- 支持播放本地及网络视频文件
1. 常用属性
- 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;
五、 示例
//
// ViewController.m
// videotest
//
// Created by 谢厂节 on 2017/9/12.
// Copyright © 2017年 谢厂节. All rights reserved.
//#import "ViewController.h"
#import <AVKit/AVKit.h>
#import <AVFoundation/AVFoundation.h>enum {DirectPlayBtnTag = 10,FullScreenPlayBtnTag
};@interface ViewController () <AVPlayerViewControllerDelegate> {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] pathForResource:@"assets/2-0" ofType:@"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
文章内容转自:http://blog.csdn.net/hierarch_lee/article/details/47903979
iOS AVPlayer 与 AVPlayerViewController相关推荐
- iOS AVPlayer和AVPlayerViewController
1. AVPlayer AVPlayer是iOS常见的播放器,使用时需导入 #import <AVKit/AVKit.h> AVPlayer能控制播放器的播放,暂停,播放速度 // 初始化 ...
- iOS AVPlayer视频播放器
代码地址如下: http://www.demodashi.com/demo/11168.html 一.运行效果 二.实现过程 ①.创建播放器avPlayer //创建播放器url = [url str ...
- iOS: ios视频播放(MPMediaPlayerController,AVPlayer,AVPlayerViewcontroller、ffmpeg-AVPlayer)...
介绍: 和音频播放一样,ios也提供个很多的API.如mediaPlayer.framework下的MPMediaPlayerController.AVFounditon.framework下的AVP ...
- iOS AVPlayer 简单应用
//1 AVPlayerViewController *avvc = [[AVPlayerViewController alloc] init]; //2 avvc.player = [[AVPlay ...
- AVPlayer与AVPlayerViewController媒体播放器
1.简介 • AVPlayer是一个可以播放任何格式的全能影音播放器,使用AVPlayer需要导入AVFoundation.h. •支持视频格式:WMV,AVI,MKV,RMVB,RM,XVID,MP ...
- android ios av tv,iOS AVPlayer 实现后台连续播放视频
最近接到一个需求,需要做一个在后台播放视频的功能.折腾了一下,最后总算完成了.因此写一篇文章,介绍下具体的实现步骤,也说说自己遇到的坑,算是总结和记录. 前言 当 App 退到后台时,会进入 susp ...
- IOS AVPlayer无法播放H265编码格式的MP4视频
具体现象 使用 IOS 的 AVPlayer 播放 H265编码格式的mp4视频时,只有声音无图像. 原因 H265即 HEVC,在打包成mp4时需要有 codec tag.hev1 or hvc1是 ...
- 简单视频播放AVPlayer和AVPlayerViewController
NSURL *url = [NSURL URLWithString:@"http://flv3.bn.netease.com/videolib3/1712/13/ouwHf3421/SD/o ...
- iOS AVPlayer的使用
AVPlayer 在iOS开发中,播放视频通常有两种方式,一种是使用MPMoviePlayerController(需要导入MediaPlayer.Framework),还有一种是使用AVPlayer ...
最新文章
- java MDC_log4j MDC实现日志追踪
- selenium如何解决IE自动填充表单问题
- JavaEE实战班第18天
- SpringBoot 无法显示html文件 找不到html文件 如果显示html文件
- 美国纽约法院定于明年3月对BitMEX前高管进行审判
- Adblock Plus 下载 | Google 插件下载
- 各层电子数排布规则_电子排布式书写规则
- win10电脑连上wifi,后没有网络
- 西游记笔记与想法(5)
- html视频播放卡顿,电脑网页看视频卡?来看看我的解决方法!
- 笔记:Linux系统调用在文件中的分布情况
- Linux怎么安装ca证书,如何在CentOS上安装自定义CA证书?
- 了解如何通过 UltraEdit丨UEStudio 中的窗口停靠系统显示、控制和配置文件选项卡
- DB 查询分析器 6.04 发布 ,本人为之撰写的相关技术文章达78篇
- 完整教程:spring-boot-starter-data-elasticsearch整合elasticsearch 6.x
- 在Unity使用键盘控制摄像机的移动以及用鼠标滚轮控制摄像机视野放大和缩小
- 筛多肽(水解,活性预测,毒性预测,过敏性预测....)
- 厉害了,手把手教你搭建一个代码在线编辑预览工具
- np.degrees()
- python软件是做啥的_Python软件是干嘛的
热门文章
- Robust Real-time UAV Replanning Using Guided Gradient-based Optimization and Topological Paths
- JS : 网页樱花飘落特效
- 手把手教你用前端实现短视频App(滑动切换)
- P6 | Charge Pump calibration technique (JSSC-2008-02)
- 【蒸馏+剪枝】(一)Cascaded channel pruning using hierarchical self-distillation
- Django设置html背景图片失败,出现“GET /images/2.png HTTP/1.1“ 404 2552
- 为什么测试环境测试通过,线上还会有bug?
- 凌科芯安软件加密锁论手机APP智能产品安全
- iOS内购(IAP)自动续订订阅
- 1021.从前有座山