视频播放方式

iOS开发视频播放,四种方法,MPMoviePlayerController,MPMoviePlayerViewController,AVPlayer,AVPlayerViewController,前俩已经弃用,AVPlayer相对AVPlayerViewController,更接近底层,自由度更高,

使用AVPlayer需要了解的常用类

  • AVAsset:一个用于获取多媒体信息的抽象类,但不能直接使用
  • AVURLAsset:AVAsset的子类,可以根据一个URL路径创建一个包含媒体信息的AVURLAsset对象
  • AVPlayerItem:一个媒体资源管理对象,用于管理视频的基本信息和状态,一个AVPlayerItem对应一个视频资源
  • AVPlayer:负责视频播放、暂停、时间控制等操作
  • AVPlayerLayer:负责显示视频的图层,如果不设置此属性,视频就只有声音没有图像

AVPlayer的使用步骤

//第一步:引用AVFoundation框架,添加播放器属性
#import <AVFoundation/AVFoundation.h>
@property (nonatomic,strong)AVPlayer *player;//播放器对象
@property (nonatomic,strong)AVPlayerItem *currentPlayerItem;
//第二步:获取播放地址URL
//本地视频路径
NSString* localFilePath=[[NSBundle mainBundle]pathForResource:@"不能说的秘密" ofType:@"mp4"];
NSURL *localVideoUrl = [NSURL fileURLWithPath:localFilePath];
//网络视频路径
NSString *webVideoPath = @"http://api.junqingguanchashi.net/yunpan/bd/c.php?vid=/junqing/1129.mp4";
NSURL *webVideoUrl = [NSURL URLWithString:webVideoPath];
//第三步:创建播放器(四种方法)
//如果使用URL创建的方式会默认为AVPlayer创建一个AVPlayerItem
//self.player = [AVPlayer playerWithURL:localVideoUrl];
//self.player = [[AVPlayer alloc] initWithURL:localVideoUrl];
//self.player = [AVPlayer playerWithPlayerItem:playerItem];
AVPlayerItem *playerItem = [[AVPlayerItem alloc] initWithURL:webVideoUrl];
self.currentPlayerItem = playerItem;
self.player = [[AVPlayer alloc] initWithPlayerItem:playerItem];
//第四步:创建显示视频的AVPlayerLayer,设置视频显示属性,并添加视频图层
//contentView是一个普通View,用于放置视频视图
/*AVLayerVideoGravityResizeAspectFill等比例铺满,宽或高有可能出屏幕AVLayerVideoGravityResizeAspect 等比例  默认AVLayerVideoGravityResize 完全适应宽高
*/
AVPlayerLayer *avLayer = [AVPlayerLayer playerLayerWithPlayer:self.player];
avLayer.videoGravity = AVLayerVideoGravityResizeAspect;
avLayer.frame = _containerView.bounds;
[_containerView.layer addSublayer:avLayer];
//第五步:执行play方法,开始播放
//本地视频可以直接播放
//网络视频需要监测AVPlayerItem的status属性为AVPlayerStatusReadyToPlay时方法才会生效
[self.player play];

AVplaer使用实例

-(void)videoBackView{NSString *localFilePath = [[NSBundle mainBundle] pathForResource:@"videoBack" ofType:@"mp4"];NSURL *localVideoUrl = [NSURL fileURLWithPath:localFilePath];self.player_video = [AVPlayer playerWithURL:localVideoUrl];self.avLayer = [AVPlayerLayer playerLayerWithPlayer:self.player_video];self.avLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;self.avLayer.frame = self.view.bounds;[self.view.layer addSublayer: self.avLayer];self.player_video.volume = 0.0;[self.player_video play];[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playerItemDidReachEnd:) name:AVPlayerItemDidPlayToEndTimeNotification object:[self.player_video currentItem]];}
- (void)playerItemDidReachEnd:(NSNotification *)notification {AVPlayerItem *p = [notification object];
//    [p seekToTime:kCMTimeZero];[p seekToTime:kCMTimeZero completionHandler:^(BOOL finished) {[self.player_video play];}];}

目前为止可以进行循环播放,但会出现视频播放闪屏 现象。

可通过添加视频缩略图的方式解决,缩略图大小与所设置的播放背景大小,相同即可。

CGImageRef image = [self getFirstFrameOfVideoWithURL:localVideoUrl];self.view.layer.contents = (__bridge id)image;self.view.layer.contentsGravity = kCAGravityResizeAspectFill;
- (CGImageRef)getFirstFrameOfVideoWithURL:(NSURL *)url
{AVURLAsset* asset = [AVURLAsset URLAssetWithURL:url options:nil];AVAssetImageGenerator* imageGenerator = [AVAssetImageGenerator assetImageGeneratorWithAsset:asset];return [imageGenerator copyCGImageAtTime:CMTimeMake(0, 1) actualTime:nil error:nil];
}

循环播放造成的卡顿问题,可以通过剪辑尽量缩小,视频首尾尽量相同,将视频末几帧放在视频前。

参考:https://www.jianshu.com/p/b304694af77a

iOS开发视频背景及播放闪屏处理,卡顿处理相关推荐

  1. 性能分析—白屏、闪屏和卡顿

    一.关键字 白屏.闪屏.卡顿.页面崩溃.渲染异常 二.概述 项目开发.交付过程中,偶尔会遇到白屏.闪屏和卡顿现象.造成此类问题的原因有很多,例如内存不足.显存不足.内存泄漏等,但想要精确定位到具体什么 ...

  2. Jiecaovideoplayer开始播放闪屏问题处理

    本人很喜欢这个开源框架,但是再好用也有不顺心的时候,今天老板就提出了播放闪屏问题,经过阅读源码以及各种查阅资料,差不多处理完了,这里总结一下. 首先问题出现的原因是因为视频播放的监听处理不当导致的,这 ...

  3. iOS开发之网络音乐播放器(SC音乐)(二)

    iOS开发之网络音乐播放器(SC音乐)(二) 前言 iOS开发之网络音乐播放器(SC音乐)(一)已经介绍完播放控制.音乐数据获取解析.歌词显示等.本文在上文的基础上介绍锁屏播放设置,后台播放设置,手势 ...

  4. 前端性能优化方法与实战05 指标采集:白屏、卡顿、网络环境指标采集方法

    上一讲我们介绍了首屏时间的指标采集,这一讲我们来聊聊前端其他的性能指标采集,比如白屏.卡顿和网络环境. 你乘火车.地铁.飞机都走过安检吧?如果说首屏时间类似你过安检的时刻,那么,白屏时间就是你排队到安 ...

  5. oracle怎么设置能使用别的账户存储过程的全向_教你怎么重装100%纯净的Win10系统,告别蓝屏,卡顿。...

    原文 :https://mp.weixin.qq.com/s/4TYOF9L5BQ2gyBNQa5uFtg 随着社会的发展,电脑逐渐成为了我们工作中必不可少的工具.也就是它的<健康>与我们 ...

  6. KERNEL_DATA_INPAGE_ERROR 蓝屏开机卡顿修复

    一.KERNEL_DATA_INPAGE_ERROR 蓝屏开机卡顿修复 1.选择系统盘符,我的系统盘是C盘,如下图所示. 2.右键属性,工具里面选择开始检查,并勾选所有,点击开始后重启进行修复,重启修 ...

  7. 安装小米笔记本安装华为管家,实现手机在电脑多屏协同卡顿

    安装小米笔记本安装华为管家,实现手机在电脑多屏协同卡顿 刚开始是点击多屏协同,电脑不出现手机屏幕,然后驱动精灵更新了蓝牙驱动后重启电脑,就可以多屏协同了,但是又出现了卡顿,根据提示语是提示了WLAN问 ...

  8. 【多屏协同卡顿AX200 AX210 AC9260无法开5g热点 wifi direct 8021n解决办法】

    多屏协同卡顿AX200 AX210 AC9260无法开5g热点 wifi direct 8021n解决办法 搜索到这里,破解的多屏协同肯定已经过了前期的种种困难,但是卡顿问题一直无法解决. 新的解决方 ...

  9. iOS 视频播放 AVPlayer 循环播放 闪屏

    问题终于解决,选用AVPlayer,重置一下AVPlayerItem就不会出现闪屏现象,注册一个通知同样可以实现循环播放,而且AVPlayer可以自定义播放样式,给了我们更大的发挥空间,完全可以自己D ...

最新文章

  1. Node.js实现服务器端生成Excel文件(xls格式、xlsx格式文件)并弹出下载文件
  2. Gradle for Android 第三篇( 依赖管理 )
  3. python自动补全库_叼炸天的库! 自动补全 Python 代码,能节省 60% 敲码时间
  4. FFMpeg的基本用法
  5. Serverless实战 —— 使用 Wintersmith + Serverless Framework 快速创建个人站点
  6. java 类变量方法实例对象方法
  7. php里为什么要用ds,为什么选择DSBridge
  8. [转载] numpy.ma详解
  9. ElasticSearch学习(四):可视化管理之Kibana
  10. java构造方法不允许调用重载方法
  11. OTT网络电视直播APP运营平台-如何保证视频的流畅性
  12. 基于51单片机病床呼叫系统proteus仿真设计(protues仿真+源码+报告)
  13. s7edge 无法连接计算机,s7-200,CPU224CN无法连接到电脑-工业支持中心-西门子中国...
  14. Android应用实现开机自启动
  15. 丹佛机场行李处理系统分析
  16. 神经网络模型的模型假设,神经网络模型预测控制
  17. 射频基础——射频同轴线缆介绍
  18. 史上最全最牛的C++整人代码
  19. 连接无限·协同无界|融云首届全球企业通信云大会 WECC 来了
  20. 文献中常见的表格(三线表)制作

热门文章

  1. 奔四的听力障碍码农,被开除15次
  2. 小米note_2014616 2014619 2015021 2015022_通用官方线刷包_救砖包_解账户锁
  3. Teamviewer 一分钟限制解除方法
  4. DreamCamera2 App,大光圈配置快显问题
  5. 计算机公式求时间差公式,(EXCEL怎么算时间差?函数。)excle函数差怎么算
  6. 《程序设计教学法--以Java程序设计为例》
  7. React严格模式-React.StrictMode
  8. 内推了 41 人来微软之后,竟然有位大佬要离职了。。。原因竟然是。。。
  9. 盖亚游戏数据分析实习生2面
  10. 从 LGBTQ 小网站到粉红经济全球第一股,这家公司花了 20 年