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

最后:代码风格

相关推荐
AOI小白新手上路33 分钟前
anomalib 缺陷检测复现笔记:从跑通库到 EfficientAD 落地
人工智能·笔记·机器学习
xxwl5851 小时前
RabbitMQ 学习笔记
笔记·学习·rabbitmq
加油努力有饭吃2 小时前
DLMS/COSEM 蓝皮书解读(二十六):Auto connect(class_id = 29)—— 自动拨号与主动连接(出站管理)
笔记
CarIise2 小时前
Java实训阶段查漏补缺复习笔记1
java·开发语言·笔记
陈卫军老师2 小时前
陈卫军谈商业底线:营销是术,产品是道
经验分享·笔记·流量运营
智者知已应修善业3 小时前
【51单片机只有一个8*8点阵数据如何滚动起来一片595+一组IO+花样】2022-1-15
c++·经验分享·笔记·单片机·蓝桥杯·硬件架构
Space655364 小时前
常见组学技术笔记:从 DNA 基因组学到 Multi-omics
笔记
lcj25116 小时前
【Linux】 Makefile 详解
linux·笔记·面试
常州晟凯电子科技6 小时前
sigmaStar SSC305DE/SSC308开发笔记之开发环境搭建和SDK编译
人工智能·笔记·嵌入式硬件·物联网·性能优化·视频编解码
redfred6 小时前
HyperFrames 部署教程:5.6 万 Star 开源「写 HTML 出视频」框架,Windows 从零上手(CLI 三条命令 + 7 个避坑)
ffmpeg·开源·自动化·html·音视频