读书之深入理解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调试(编译时要带相关参数)

最后:代码风格

相关推荐
sheeta199811 小时前
LeetCode 每日一题笔记 日期:2025.11.24 题目:1018. 可被5整除的二进制前缀
笔记·算法·leetcode
chinesegf12 小时前
图文并茂的笔记、便签是如何用py开发的
笔记·状态模式
我先去打把游戏先18 小时前
ESP32学习笔记(基于IDF):基于OneNet的ESP32的OTA功能
笔记·物联网·学习·云计算·iphone·aws
初願致夕霞18 小时前
学习笔记——基础hash思想及其简单C++实现
笔记·学习·哈希算法
hd51cc18 小时前
C++ 学习笔记 名称
笔记·学习
摇滚侠18 小时前
2025最新 SpringCloud 教程,负载均衡 API 测试,笔记10
笔记·spring cloud·负载均衡
风123456789~20 小时前
【OceanBase专栏】OB租户-创建实验
数据库·笔记·oceanbase
cmcm!20 小时前
学习笔记1
数据库·笔记·学习
Jay200211121 小时前
【机器学习】7-9 分类任务 & 逻辑回归的成本函数 & 逻辑回归的梯度下降
笔记·机器学习·分类
WXG10111 天前
【Flask】前后端交互示例
笔记·学习