AVPlayer 实现简单的视频播放功能
// 声明两个对象
@property (nonatomic,strong)AVPlayer *player;//播放器对象
@property (nonatomic,strong)AVPlayerItem *currentPlayerItem;
// 初始化播放器
AVPlayerItem *playerItem = [[AVPlayerItem alloc] initWithURL:FullImageUrl(self.messageViewCover.userModel.video_url)];
self.currentPlayerItem = playerItem;
self.player = [[AVPlayer alloc] initWithPlayerItem:playerItem];
AVPlayerLayer *avLayer = [AVPlayerLayer playerLayerWithPlayer:self.player];
avLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
avLayer.frame = self.videoImage.bounds;
[self.videoImage.layer addSublayer:avLayer];
// 播放完成通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(runLoopTheMovie:) name:AVPlayerItemDidPlayToEndTimeNotification object:_player.currentItem];
//1.注册观察者,监测播放器属性
//观察Status属性,可以在加载成功之后得到视频的长度
[self.player.currentItem addObserver:self forKeyPath:@“status” options:NSKeyValueObservingOptionNew context:nil];
//观察loadedTimeRanges,可以获取缓存进度,实现缓冲进度条
[self.player.currentItem addObserver:self forKeyPath:@“loadedTimeRanges” options:NSKeyValueObservingOptionNew context:nil];
// 播放
[self.player play];
//循环播放用到这个方法
- (void)runLoopTheMovie:(NSNotification *)notification{
AVPlayerItem *playerItem = notification.object;
[playerItem seekToTime:kCMTimeZero];
[_player play];
}
//2.添加属性观察
- (void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context {
AVPlayerItem *playerItem = (AVPlayerItem *)object;
if ([keyPath isEqualToString:@“status”]) {
//获取playerItem的status属性最新的状态
AVPlayerStatus status = [[change objectForKey:@“new”] intValue];
switch (status) {
case AVPlayerStatusReadyToPlay:{
//获取视频长度
CMTime duration = playerItem.duration;
//开始播放视频
// [self.player play];
break;
}
case AVPlayerStatusFailed:{//视频加载失败,点击重新加载
break;
}
case AVPlayerStatusUnknown:{
NSLog(@“未知问题:AVPlayerStatusUnknown”);
break;
}
default:
break;
}
} else if ([keyPath isEqualToString:@“loadedTimeRanges”]) {
// //获取视频缓冲进度数组,这些缓冲的数组可能不是连续的
// NSArray *loadedTimeRanges = playerItem.loadedTimeRanges;
// //获取最新的缓冲区间
// CMTimeRange timeRange = [loadedTimeRanges.firstObject CMTimeRangeValue];
// //缓冲区间的开始的时间
// NSTimeInterval loadStartSeconds = CMTimeGetSeconds(timeRange.start);
// //缓冲区间的时长
// NSTimeInterval loadDurationSeconds = CMTimeGetSeconds(timeRange.duration);
// //视频缓冲时间总长度
// NSTimeInterval currentLoadTotalTime = loadStartSeconds + loadDurationSeconds;
// //NSLog(@“开始缓冲:%f,缓冲时长:%f,总时间:%f”, loadStartSeconds, loadDurationSeconds, currentLoadTotalTime);
// //缓冲总时长
// _currentLoadTimeLabel.text = [self formatTimeWithTimeInterVal:currentLoadTotalTime];
// //视频的总时长
// _totalNeedLoadTimeLabel.text = [self formatTimeWithTimeInterVal:CMTimeGetSeconds(self.player.currentItem.duration)];
// //缓冲进度条的值
// _progressView.progress = currentLoadTotalTime/CMTimeGetSeconds(self.player.currentItem.duration);
}
}
AVPlayer 实现简单的视频播放功能相关推荐
- Adobe Premiere Pro找不到任何具有视频播放功能的模块。请更新视频显示驱动程序并再次启动 这个问题 的最简单的解决方案
安装的Adobe premiere pro cc 2017已经有几个月的时间了,偶尔会用一下单一直正常.今天打开的时候突然弹出了一个错误提示:"Adobe Premiere Pro找不到任何 ...
- Adobe Premiere Pro CC 2019启动时提示找不到任何具有视频播放功能的模板,请更新视频显示驱动程序并再次启动/PR启动时提示找不到任何具有视频播放功能的模板
Adobe Premiere Pro CC 2019启动时提示找不到任何具有视频播放功能的模板,请更新视频显示驱动程序并再次启动/PR启动时提示找不到任何具有视频播放功能的模板 一.开头 最近刚开学, ...
- 界面开发(4)--- PyQt5实现打开图像及视频播放功能
PyQt5创建打开图像及播放视频页面 上篇文章主要介绍了如何实现登录界面的账号密码注册及登录功能,还简单介绍了有关数据库的连接方法.这篇文章我们介绍一下如何在设计的页面中打开本地的图像,以及实现视频播 ...
- Android之使用MediaPlayer和SurfaceView组件播放一个简单的视频
1.MediaPlayer除了可以播放音乐外,还可以播放视频,但是使用MediaPlayer播放音乐时,没有提供图像输出界面,可以使用SurfaceView组件来显示视频画面,首先,必须在布局文件ac ...
- Android之使用VideoView组件播放一个简单的视频
1.在Android开发中,提供了VideoView组件用来播放视频文件.首先,要使用这个组件来播放视频,必须在布局文件下添加VideoView组件,然后再到Activity里获取这个组件,然后调用这 ...
- Java实现视频网站的视频上传、视频转码、视频关键帧抽图, 及视频播放功能
最近有个项目牵扯到上传视频,简直把我搞炸了.还么搞定,主要是当初设计有点小出入,心里一直不是坚持,所以,哎,还得努力撒! 下面是当时参考,睡觉,明天搞哎.http://www.cnblogs.com/ ...
- JavaScript css3模拟简单的视频弹幕功能
最近相对比较空闲,想写一些东西写着玩.就尝试写了一个demo模拟了最简单的视频弹幕功能~~. 思路: 设置一个<div>和所播放的video的大小一致,把这个div标签蒙在video上面用 ...
- android实现水平进度条_Flutter在线视频播放功能实现(chewie库)
前言: 实现在一个在线视频播放功能,使用第三方库Chewie. 实现步骤: 1.新建一个flutter项目. 2.获取Chewie插件. 3.添加播放视频所需要的权限. 4.调试代码实现你想要的效果. ...
- python做视频特效_python实现超简单的视频对象提取功能
视频对象提取 与其说是视频对象提取,不如说是视频颜色提取,因为其本质还是使用了OpenCV的HSV颜色物体检测.下面话不多说了,来一起看看详细的介绍吧. HSV介绍 HSV分别代表,色调(H:hue) ...
最新文章
- 《Cortex-M0权威指南》之体系结构---异常和中断
- 苹果为了不让AirTag被用来跟踪,将推出一个安卓应用
- 自定义SpringBoot项目的Maven原型
- vue父子组件、兄弟组件之间的通信和访问
- O’Reilly发布“微服务成熟度状态”报告:微服务是成功的
- C++一学就废?试试这个项目包
- 数据结构-Huffman树
- easylog 使用_Easyloggingpp的使用
- 科学地花钱:基于端智能的在线红包分配方案
- python replace替换多个字符_关于python:使用string.replace(x,y)替换所有
- 洛谷 P1404 平均数
- mysql技术简介_MySQL数据类型介绍
- Python使用ZeroMQ/inproc模式实现多线程服务端
- Python的繁体简体转换
- UNITER: UNiversal Image-TExt Representation Learning
- 评估 OKRs 的最佳频率是什么?
- MNIST导入图片数据集
- ipad一直卡在白苹果_iPad 为什么至今都没有天气和计算器应用?苹果回答来了
- MATLAB进阶教程第一节(图形绘制)
- C# 表达式与运算符