读书之深入理解ffmpeg_简单笔记3(初步)

通读完只能对书中内容有大概的了解,具体的细节还得一一实践攻克。

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模块添加

支持多线程图像处理

17:FFmpeg 调试和测试

17.1 debug选项 如何使用?

17.2 DTS/PTS 问题排查(-debug_ts,show_info)

17.3 loglevel(-v)和report(存文件)

17.4 调试库 基于日志(设置日志级别)

17.5 gdb调试(编译时要带相关参数)

最后:代码风格

你可能感兴趣的:(读书,ffmpeg,笔记)