软编码:实现直接、简单,参数调整方便,升级易,但CPU负载重,性能较硬编码低
性能高,对CPU没有压力,但是对其他硬件要求较高(如GPU等)
硬编码 Gpu等非cpu编码 用 VideoToolBox框架
编码流程: 采集--> 获取到视频帧--> 对视频帧进行编码 --> 获取到视频帧信息 --> 将编码后的数据以NALU方式写入到文件
编码方式:H.264编码
帧率:每秒钟多少帧画面
码率:单位时间内保存的数据量
关键帧(GOPsize)间隔:多少帧为一个GOP
当编码成功后,将编码后的码流写入文件
编码成功后会回调之前输入的函数
1> 先判断是否是关键帧:
如果是关键帧,则需要在写入关键帧之前,先写入PPS、SPS的NALU
取出PPS、SPS数据,并且封装成NALU单元,写入文件
2> 将I帧、P帧、B帧分别封装成NALU单元写入文件
写入后,数据存储方式:
硬解码
软编码
软编码主要是利用CPU进行编码的过程, 具体的编码通常会用FFmpeg+x264
iOS项目中集成FFmpeg
将编译好的文件夹拖入到工程中添加依赖库: libiconv.dylib/libz.dylib/libbz2.dylib/CoreMedia.framework/AVFoundation.framework
FFmpeg编码两个重要的类
AVFormat
保存的是解码后和原始的音视频信息
AVPacket
解码完成的数据及附加信息(解码时间戳、显示时间戳、时长等
软解码---用到openGl 把解码的数据用openGl渲染出来
01-(掌握)FFmpeg介绍和Mac下使用
07-(掌握)服务器-购买
08-(掌握)服务器-搭建配置
09-(掌握)服务器-HLS支持
04-LFLiveKit-----推流框架(直接能获取到相机)----推到服务器(服务器地址)
05-kxMovie的使用(1.服务器推流 2.kxMovie获取地址进行播放 3.基于FFmpeg)
06-IJKPlayer的使用(1.服务器推流 2.IJKPlayer获取地址进行播放)
07-HelloOpenGL-----渲染画面用的