版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/samuelandkevin/article/details/88807217
参考资料:
iOS实现边下边播
mp4的基本格式可参考
TCP交互协议中的字节处理,查看iOS基础之字节处理(NSData,Byte,NSString转换)
解析媒体文件,最关心是视频文件的宽高,时长,码率,编码格式,帧列表,关键帧列表
开发难点:
1.解析视频的头信息(mp4)
2.播放优化(播放到未下载的地方的处理方式)
注意:
手机录制的视频都比较大,1s就得占用1M
上传服务器必须压缩
功能实现:
将视频或图片分段读取并上传服务器,NSFileHandle
读取服务器返回的分段数据并保存在本地
AVPlayer包含以下几个类:
AVURLAsset 是AVAsset的子类,负责网络连接,请求数据
AVPlayerItem 播放资源的状态。
AVPlayer 解码处理成为图像和声音
AVPlayerLayer 图像层
注意:
视频没准备好播放,不要把AVPlayerLayer图层添加到cell上,这样会造成显示的图层变成黑色.
流程:(AVFoundation可以帮我们完成)
建立连接,请求数据 AVURLAsset
数据状态管理 AVPlayerItem
解码数据 AVPlayer
音视频输出 AVPlayerLayer
手动干预系统播放器加载数据的内部实现
AVURLAsset下有一个AVAssetResourceLoader属性
AVAssetResourceLoader 负责加载数据,调用时机:AVURLAsset不知道如何去加载这个URL资源时
AVAssetResourceLoaderDelegate
怎么手动干预?回答:把目标视频URL地址的scheme替换为不能识别的scheme.
视频第一次播放,播放器获取前两个字节的数据,就是URL的contentType
注意:
大文件读取应该分段读取.不应该将视频文件一次性全部读出来.假如一个视频有 1 GB,那内存会突然爆掉