FFmpeg4-视频编码
2020-07-02 本文已影响0人
AlanGe
一、视频编码?->YUV编码为H.264
分析视频编码原理->流程
- 第一步:注册组件->编码器、解码器等等…
av_register_all() - 第二步:初始化封装格式上下文
avformat_alloc_context() - 第三步:打开输入文件
avio_open() - 第四步:创建输出码流->视频流->今后设置->设置为视频流
avformat_new_stream() - 第五步:查找视频编码器
avcodec_find_encoder() - 第六步:打开视频编码器
avcodec_open2 - 第七步:写入文件头信息(有些文件头信息)->一般情况下都会有
avformat_write_header() - 第八步:循环编码视频像素数据->视频压缩数据
avcodec_receive_packet() - 第九步:将编码后的视频压缩数据写入文件中
av_write_frame() - 第十步:输入像素数据读取完毕后回调函数
作用:输出编码器中剩余AVPacket
flush_encoder() - 第十一步:写入文件尾部信息
av_write_trailer() - 第十二步:释放内存,关闭编码器等等…
avcodec_close(avcodec_context);
av_free(av_frame);
av_free(out_buffer);
av_packet_free(&av_packet);
avio_close(avformat_context->pb);
avformat_free_context(avformat_context);
fclose(in_file);
二、视频编码->实现功能->yuv编码为h264
yuv:视频像素数据格式
h264:视频压缩数据格式
1、查找编码器?
获取编码器名称
找不到编码器->h264
重要原因是因为:编译库没有依赖x264库(默认情况下)
- 第一步:下载x264库
通过git下载:git clone git://git.videolan.org/x264.git - 第二步:解压这个库
- 第三步:编写脚本->编译x264的.a静态库
指定编译平台类型:iOS平台、安卓平台、Mac平台、Windows平台等等…
编写Android平台.a静态库->课前准备好了->研究一下 - 第四步:编译Android动态库->编译FFmpeg>修改脚本文件?
- 第五步:加入x264库,将其编译进去