// 声明两个对象
@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 实现简单的视频播放功能相关推荐

  1. Adobe Premiere Pro找不到任何具有视频播放功能的模块。请更新视频显示驱动程序并再次启动 这个问题 的最简单的解决方案

    安装的Adobe premiere pro cc 2017已经有几个月的时间了,偶尔会用一下单一直正常.今天打开的时候突然弹出了一个错误提示:"Adobe Premiere Pro找不到任何 ...

  2. Adobe Premiere Pro CC 2019启动时提示找不到任何具有视频播放功能的模板,请更新视频显示驱动程序并再次启动/PR启动时提示找不到任何具有视频播放功能的模板

    Adobe Premiere Pro CC 2019启动时提示找不到任何具有视频播放功能的模板,请更新视频显示驱动程序并再次启动/PR启动时提示找不到任何具有视频播放功能的模板 一.开头 最近刚开学, ...

  3. 界面开发(4)--- PyQt5实现打开图像及视频播放功能

    PyQt5创建打开图像及播放视频页面 上篇文章主要介绍了如何实现登录界面的账号密码注册及登录功能,还简单介绍了有关数据库的连接方法.这篇文章我们介绍一下如何在设计的页面中打开本地的图像,以及实现视频播 ...

  4. Android之使用MediaPlayer和SurfaceView组件播放一个简单的视频

    1.MediaPlayer除了可以播放音乐外,还可以播放视频,但是使用MediaPlayer播放音乐时,没有提供图像输出界面,可以使用SurfaceView组件来显示视频画面,首先,必须在布局文件ac ...

  5. Android之使用VideoView组件播放一个简单的视频

    1.在Android开发中,提供了VideoView组件用来播放视频文件.首先,要使用这个组件来播放视频,必须在布局文件下添加VideoView组件,然后再到Activity里获取这个组件,然后调用这 ...

  6. Java实现视频网站的视频上传、视频转码、视频关键帧抽图, 及视频播放功能

    最近有个项目牵扯到上传视频,简直把我搞炸了.还么搞定,主要是当初设计有点小出入,心里一直不是坚持,所以,哎,还得努力撒! 下面是当时参考,睡觉,明天搞哎.http://www.cnblogs.com/ ...

  7. JavaScript css3模拟简单的视频弹幕功能

    最近相对比较空闲,想写一些东西写着玩.就尝试写了一个demo模拟了最简单的视频弹幕功能~~. 思路: 设置一个<div>和所播放的video的大小一致,把这个div标签蒙在video上面用 ...

  8. android实现水平进度条_Flutter在线视频播放功能实现(chewie库)

    前言: 实现在一个在线视频播放功能,使用第三方库Chewie. 实现步骤: 1.新建一个flutter项目. 2.获取Chewie插件. 3.添加播放视频所需要的权限. 4.调试代码实现你想要的效果. ...

  9. python做视频特效_python实现超简单的视频对象提取功能

    视频对象提取 与其说是视频对象提取,不如说是视频颜色提取,因为其本质还是使用了OpenCV的HSV颜色物体检测.下面话不多说了,来一起看看详细的介绍吧. HSV介绍 HSV分别代表,色调(H:hue) ...

最新文章

  1. 《Cortex-M0权威指南》之体系结构---异常和中断
  2. 苹果为了不让AirTag被用来跟踪,将推出一个安卓应用
  3. 自定义SpringBoot项目的Maven原型
  4. vue父子组件、兄弟组件之间的通信和访问
  5. O’Reilly发布“微服务成熟度状态”报告:微服务是成功的
  6. C++一学就废?试试这个项目包
  7. 数据结构-Huffman树
  8. easylog 使用_Easyloggingpp的使用
  9. 科学地花钱:基于端智能的在线红包分配方案
  10. python replace替换多个字符_关于python:使用string.replace(x,y)替换所有
  11. 洛谷 P1404 平均数
  12. mysql技术简介_MySQL数据类型介绍
  13. Python使用ZeroMQ/inproc模式实现多线程服务端
  14. Python的繁体简体转换
  15. UNITER: UNiversal Image-TExt Representation Learning
  16. 评估 OKRs 的最佳频率是什么?
  17. MNIST导入图片数据集
  18. ipad一直卡在白苹果_iPad 为什么至今都没有天气和计算器应用?苹果回答来了
  19. MATLAB进阶教程第一节(图形绘制)
  20. C# 表达式与运算符

热门文章

  1. linux服务器抓包分析,抓包分析SSL/TLS连接建立过程总结
  2. 自动驾驶系统进阶与项目实战(十)基于PointPillars的点云三维目标检测和TensorRT实战(1)
  3. Visual Studio Express 下载_微软学生中心 (图)
  4. PowerBI视觉对象共计271组,2021.01.20日更新
  5. K210学习笔记(十)——二维码识别
  6. python学习教程2
  7. 斯蒂夫乔布斯传 读后感
  8. ACW95 费解的开关
  9. 华为路由器开启ftp出现530错误
  10. JavaScript基础语法笔记