通读完只能对书中内容有大概的了解,具体的细节还得一一实践攻克。
10: libavformat接口使用
媒体流,文件等封装,解封装,转封装
视频截取,AVFormatContext,AVPacket等介绍
11:libavcodec接口使用
视频,音频的编码,解码对应的新接口和旧接口。
硬件加速编码和解码。(涉及硬件相关结构体,接口,显存和cpu之间数据的交互)
AVFrame的介绍,以及相关接口demo的使用。
关注avframe使用时的内存情况。
内存操作相关接口。 av_malloc av_free AVBuffer AVBufferRef
avbuffer在调用编解码,滤镜处理时使用。
AVbufferPool
12: libavfilter接口使用(滤镜处理)
FilterGraph
音频,视频相关内置滤镜。(transtorm filter, source filter, sink filter)
libavfilter 相关api的使用。
AVFilterGraph(滤镜图,整个滤波过程中的结构体), AVFilterLink, AVFilterInout,AVFilter,AVFilterContext,AVFilterPad,
AVFilterCommand,buffersrc, buffersink
demo:使用滤镜给视频加logo (AVFilterContext)
13:ffmpeg辅助库(libavutil,libswscale, libswresample)
libavutil 字符串,随机数,数据结构,数学函数,密码,多媒体等。
libswscale 图像转换,缩放。
libswresample 音频重采样,格式转换。
libavutil dist和opt方式传递参数(demo)。
libswscale sws_scale图像转换(颜色转换,图像大小转换 demo)。
libswresample 声音转换(demo)(PCM进行转换)
14:播放器开发
demo代码在github中。
14.1:SDL核心功能API
14.2:sdl初始化,图像渲染(创建渲染窗口,创建渲染器,创建图像纹理,上传纹理到gpi,纹理显示)
14.3:音频播放(打开音频设备,配置参数回调等,开始或者暂停,声卡驱动获取数据,开始播放)
事件循环(鼠标,键盘,窗口,自定义事件等)
注册事件,处理事件的方式。
SDL定时器(demo)
14.4 播放器解码和展示
多线程(事件循环线程,demux线程,视频解码线程,音频播放线程)
FFmpegPlayerCtx
音视频同步(音频时钟,视频时钟,外部时钟)
其他(精准seek,视频滤镜(增强图像,降低噪点),特效处理(AI人脸识别,动作识别,美颜),音频处理(噪声抑制,音频增强等))
15:FFMpeg在RTC中的实例解析
RTC(webRTC web实时通信 一般基于udp)
15.1 webrtc(音视频编解码,流媒体传输,安全加密,回声消除/降噪,NAT穿透技术,网络拥塞控制/丢包补偿等技术)
sdp技术,协商
rtp,srtp,rtcp
nack (负反馈,用于丢包重传)
trasport-cc拥塞控制
ulpfec和FlexFEC向前纠错
chromium浏览器,JavaScript代码,ipc通信
chromium中使用ffmpeg ,webrtc使用ffmpeg对h264进行解码,openh264解码。 了解webrtc源码,chromium源码
15.2 FFmpeg在FreeSwitch(电话软件交互平台)的使用 (sip rtp)
FreeSwitch基于webrtc进行通信
FreeSwitch使用ffmpeg (demo验证) libav库(ffmpeg的分支库衍生)
一般用的CBR(动态码率) 满足一对一视频通话或者简单视频会议场景。
VBR(动态码率)能节省带宽,不好控制最大带宽。
===》demo源码解析
freeswitch 中vp8,vp9编码没有使用ffmpeg,直接使用libvpx
15.3 FFmpeg在BareSip(嵌入式/服务器上 音频视频通信的实时通信框架)
baresip依赖几个跨平台库: libre,librem,openssl,ffmpeg
学习BareSip上的demo (源码分析)
16:定制ffmpeg
在ffmpeg中新建分支,新增一个模块进行自定义的编码解码。
AVFilter模块添加
支持多线程图像处理