一:简介
AVFoundation是苹果在iOS和OS X系统中用于处理基于时间的媒体数据的Objective-C框架. 供使用者来开发媒体类型的应用程序。
上图是iOS系统下媒体应用的结构层. AVKit框架用于简化媒体应用的创建过程,如果你只需要看电影,那么使用这个就可以了, UKit可以支持简单的录制功能 . 而更多功能需要低层级框架支持.下面简单介绍下AVFoundation内最主要的支撑框架和其提供的功能。
CoreAudio : 处理所有音频事件.是由多个框架整合在一起的总称,为音频和MIDI内容的录制,播放和处理提供相应接口.设置可以针对音频信号进行完全控制,并通过Audio Units来构建一些复杂的音频处理.有兴趣的可以单独了解一下这个框架。
CoreMedia: 是AVFoundation所用到低层级媒体管道的一部分.提供音频样本和视频帧处理所需的低层级数据类型和接口。
CoreAnimation: 动画相关框架, 封装了支持OpenGL和OpenGL ES功能的ObjC各种类. AVFoundation可以利用CoreAnimation让开发者能够在视频的编辑和播放过程中添加动画和图片效果。
下面我就和大家详细的分享一下,如何使用AVFoundation来实现一个好用的视频播放器。如果好用或者对你有所帮助,不要忘了关注点个赞呦!!!
二:实现思路分析
视频控制界面实现
用于视频显示的View创建
视频数据下载器FBYVideoDownload创建
播放、暂停、横竖屏操作方法实现
监听播放进度
控制存储缓冲范围
拖动滑块,控制快进快退
定义临时文件路径
定义缓存文件夹路径
发起视频路径网路请求方法
播放结束设置
前后视频播放控制
三:实现源码分析
根据实现思路分析,一步步进行编码实现:
1. 视频控制界面实现
1 | - (FBYVideoPlayerView *)videoPlayControl{ |
2. 用于视频显示的View创建
1 | - (UIView *)videoShowView{ |
3. 视频数据下载器FBYVideoDownload创建
1 | @property(nonatomic, weak) id <FBYVideoDownloadDelegate> delegate; |
4. 播放、暂停、横竖屏操作方法实现
1 | //全屏 |
5. 监听播放进度
1 | self.timeObserve = [self.player addPeriodicTimeObserverForInterval:CMTimeMake(1, 1) queue:dispatch_get_main_queue() usingBlock:^(CMTime time) { |
6. 监听播放器的状态
1 | [self.currentPlayerItem addObserver:self forKeyPath:@"status" options:NSKeyValueObservingOptionNew context:nil]; |
7. 监听当前的缓冲进度
1 | [self.currentPlayerItem addObserver:self forKeyPath:@"loadedTimeRanges" options:NSKeyValueObservingOptionNew context:nil]; |
8. 监听到当前没有缓冲数据
1 | [self.currentPlayerItem addObserver:self forKeyPath:@"playbackBufferEmpty" options:NSKeyValueObservingOptionNew context:nil]; |
9. 控制存储缓冲范围
1 | - (void)playForActivity{ |
10. 拖动滑块,控制快进快退
1 | //拖动滑块 |
11. 定义临时文件路径
1 | self.videoTempPath = [NSString tempFilePathWithFileName:videoName]; |
12. 定义缓存文件夹路径
1 | self.videoCachePath = [NSString cacheFilePathWithName:videoName]; |
13. 发起视频路径网路请求方法
1 | - (void)sendHttpRequst |
14. 播放结束设置
1 | - (void)playerItemDidPlayToEnd:(NSNotification *)notification{ |
15. 前后视频播放控制
1 | //进入后台 |
五:项目实际使用
1. 下载demo
下载demo,将demo中FBYVideoData文件夹引入项目中。
2. 在项目中引入FBYVideoPlayer并继承FBYVideoPlayerDelegate代理
1 | #import "FBYVideoPlayer.h" |
3. 初始化创建基层view
1 | self.videoPlayBGView = [[UIView alloc] initWithFrame:CGRectMake(0, 90, SCREEN_WIDTH, SCREEN_WIDTH * 0.6)]; |
4. 初始化调用视频播放方法
1 | self.videoPlayer = [[FBYVideoPlayer alloc] init]; |
5. 初始化调用视频播放方法
1 | self.videoPlayer = [[FBYVideoPlayer alloc] init]; |