猜你喜欢
FFmpeg入门详解——SDK二次开发与直播美颜原理及应用

FFmpeg入门详解——SDK二次开发与直播美颜原理及应用

书籍作者:梅会东 ISBN:9787302626954
书籍语言:简体中文 连载状态:全集
电子书格式:pdf,txt,epub,mobi,azw3 下载次数:3153
创建日期:2024-03-27 发布日期:2024-03-27
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板
内容简介

本书系统讲解了FFmpeg SDK二次开发及直播美颜的基础理论及应用,包括FFmpeg各大核心组件,包括音视频转封装、转码、滤镜、音频重采样、视频缩放等,包括读取摄像头和话筒,包括流媒体直播推流等功能。在本书的最后一章,介绍了OpenCV的图像特效处理,并结合FFmpeg进行直播推流。本书为FFmpeg音视频流媒体系列的第四部,前三部分别是《FFmpeg入门详解——音视频原理及应用》《FFmpeg入门详解——流媒体直播原理及应用》和《FFmpeg入门详解——命令行及音视频特效原理及应用》。

全书共分为13章,系统讲解了FFmpeg源码编译及环境搭建的基础知识、转封装与转码、过滤器、音视频采集功能、音频重采样、视频缩放、流媒体直播等功能,并结合OpenCV进行图像特效处理等。

书中包含大量的示例,图文并茂,争取让一个音视频流媒体领域的读者真正入门,从此开启流媒体直播编程的大门。本书知识体系比较完整,侧重FFmpeg SDK二次开发及直播美颜的原理讲解及应用。建议读者先学习FFmpeg音视频流媒体系列的前3部,然后来学习本书。本书的讲解过程由浅入深,让读者在不知不觉中学会了FFmpeg SDK二次开发的基础知识,并能动手实现各种转码功能、音视频特效处理、并能实现流媒体直播功能。

本书可作为FFmpeg SDK二次开发、音视频特效处理及流媒体直播方向的入门书籍,也可作为高年级本科生和研究生的学习参考书籍。


作者简介

梅会东,一个在音视频领域摸爬滚打二十多年的老程序员、培训师、作者,精通多种IT技术。参与设计和开发了多个音视频项目,包括播放器、视频服务器、全套直播系统等。精通多个音视频开源库项目,包括FFmpeg、Live555、SRS、Darwin、Nginx、WebRTC、ZLMediaKit等。 目前专注于音视频流媒体的教育传播事业,为多家大型国企单位讲授音视频专业知识。

前言





前言


近些年来,随着5G网络技术的迅猛发展,FFmpeg音视频及流媒体直播应用越来越普及,音视频流媒体方面的开发岗位也非常多,然而,市面上没有一本通俗易懂的系统完整的FFmpeg SDK二次开发及直播美颜的入门图书。网络上的知识虽然不少,但是太散乱,不适合读者入门。


众所周知,FFmpeg命令行应用起来简单,但SDK二次开发相对比较难以理解。很多程序员想从事音视频或流媒体开发,但始终糊里糊涂、不得入门。笔者刚毕业时,也是纯读者一个,付出了艰苦的努力,终于有一些收获。借此机会,整理成专业书籍,希望给读者带来帮助,少走弯路。


FFmpeg发展迅猛,功能强大,命令行也很简单、很实用,但是有一个现象: 即便使用命令行做出了一些特效,但依然不理解原理,不知道具体的参数是什么含义。音视频与流媒体是一门很复杂的技术,涉及的概念、原理、理论非常多,很多初学者不学基础理论,而是直接做项目、看源码,但往往在看到C/C++的代码时一头雾水,不知道代码到底是什么意思。这是因为没有学习音视频和流媒体的基础理论,就像学习英语,不学习基本单词,而是天天听英语新闻,总也听不懂,所以一定要认真学习基础理论,然后学习播放器、转码器、非编、流媒体直播、视频监控等。


阅读建议


本书是FFmpeg SDK二次开发及直播美颜的入门图书,既有通俗易懂的基本概念,又有丰富的案例和原理分析,图文并茂,知识体系非常完善。对音视频、流媒体和直播的基本概念和原理进行复习,对重要的概念进行了具体的阐述,然后结合FFmpeg的SDK进行案例实战,既能学到实践操作知识,也能理解底层理论,非常适合初学者。建议读者先学习FFmpeg音视频流媒体系列的前3部,然后来学习本书。


本书总共13章。


第1~4章介绍FFmpeg 环境搭建、基础架构、核心数据结构及重要API。


第5~13章介绍FFmpeg的八大核心开发库,实现转封装、转码、过滤器、各种音视频特效、直播功能、音视频采集、音频重采样、视频缩放等功能,并结合OpenCV对图像进行特效处理等知识。


建议读者在学习过程中,循序渐进,不要跳跃。本书的知识体系是编者精心准备的,由浅入深,层层深入,对于抽象复杂的概念和原理,笔者尽量通过图文并茂的方式进行讲解,非常适合初学者。从最基础的FFmpeg SDK入门案例开始,理论与实践并重,读者一定要动手实践,亲自试验各个案例,并理解原理和流程。首先详细讲解API函数选项,然后应用到具体的案例中,争取每个案例都能将知识点活学活用。建议读者将本系列的第一部和第二部所学的音视频基础知识和流媒体直播基础知识应用到本书中,理论指导实践,加深对每个知识点的理解。不但要会用FFmpeg的SDK来完成各种复杂的音视频特效及直播功能,还要能理解底层原理及相关的理论基础。最后进行分析总结,争取使所学的理论得到升华,做到融会贯通。







致谢


首先感谢清华大学出版社责任编辑赵佳霓给编者提出了许多宝贵的建议,以及推动了本书出版。


在这里特别感谢雷(霄骅)博士对FFmpeg及音视频流媒体开发所做出的无私奉献,祝雷神在天堂一切安好。


感谢我的家人和亲朋好友,祝大家快乐健康每一天。


感谢我的学员,群里的学员越来越多,并经常提出很多宝贵意见。随着培训时间和经验的增长,对知识点的理解也越来越透彻,希望给大家多带来一些光明,尽量让大家少走弯路。群里的部分老学员通过学到的FFmpeg音视频流媒体知识已经获得了50万元的年薪(几乎没有低于30万元年薪的),这一点让我感到非常兴奋。将知识分享出去,是1变N的成效,看着大家成长起来,心里确实有一股股暖流。学习是一个过程,没有终点,唯有坚持,大家一起加油,为美好的明天而奋斗。


由于时间仓促,书中难免存在不妥之处,请读者见谅,并提宝贵意见。



梅会东

2022年7月8日于北京清华园


目录


目录





第1章编译FFmpeg源码并搭建开发环境


1.1FFmpeg源码简介


1.2Windows平台下编译FFmpeg 5.0源码


1.2.1MinGW简介


1.2.2安装MSYS2


1.2.3更新MSYS2


1.2.4Pacman使用命令


1.2.5在MSYS2安装依赖项


1.2.6使用MSVC工具链来编译FFmpeg 5.0+Libx264+Libx265


1.2.7使用MinGW64工具链来编译FFmpeg 5.0+Libx264


1.3Linux平台下编译FFmpeg 5.0源码


1.4搭建FFmpeg的Qt开发环境


1.5搭建FFmpeg的VS开发环境


1.6Linux下使用GCC编译FFmpeg的程序


第2章把控FFmpeg骨架: “八大金刚”核心开发库


2.1FFmpeg八大核心开发库


2.2libavutil库简介


2.3libavformat简介


2.4libavcodec库简介


2.5libpostproc库简介


2.6libavdevice库简介


2.7libavfilter库简介


2.8libswresample库简介


2.9libswscale库简介


第3章夯实FFmpeg基础: 重要数据结构及API


3.1FFmpeg的读者入门案例


3.1.1初识FFmpeg的API


3.1.2FFmpeg的解码及播放流程


3.1.3使用FFmpeg解封装并读取流信息的案例


3.2FFmpeg的经典数据结构


3.2.1使用FFmpeg进行解码的10个经典结构体


3.2.2AVPacket与AVFrame


3.3协议层的三大重要数据结构


3.4封装层的四大重要数据结构


3.5编解码层的三大重要数据结构


3.6FFmpeg的重要API函数


3.7Ubuntu下编译并运行解封装案例


第4章精通FFmpeg框架流程: 击鼓传花之责任链设计模式


4.1击鼓传花之责任链设计模式简介


4.2FFmpeg的框架原理及流程分析


4.3FFmpeg的解码流程分析


4.4FFmpeg的编码流程分析


4.5FFmpeg的转码流程分析


4.5.1FFmpeg转码流程简介


4.5.2FFmpeg的两种转码方式


4.5.3基于RTP传输的FFmpeg转码应用


4.5.4FFmpeg转码流程小结


4.5.5视频文件转码流程案例分析


第5章AVUtil通用工具层理论及案例实战


5.1AVUtil库及相关API简介


5.2AVLog应用案例及剖析


5.3AVParseUtil应用案例及剖析


5.4AVDictionary应用案例及剖析


5.5AVOption应用案例及剖析


第6章AVProtocol协议层理论及案例实战


6.1协议层AVIO的流程及数据结构


6.2AVIO案例实战之打开本地文件


6.3AVIO案例实战之打开网络直播流


6.4内存IO模式之自定义AVIO案例实战


6.5内存映射文件技术


第7章AVFormat封装层理论及案例实战


7.1封装格式原理分析


7.1.1视频封装格式简介


7.1.2使用FFmpeg处理音视频的封装与解封装


7.2封装层的重要API函数简介


7.3FFmpeg解封装案例实战


7.4FFmpeg封装格式之时间基与时间刻度


7.5FFmpeg解封装后直接存储AVPacket


7.6FFmpeg转封装案例实战


第8章AVCodec编解码层理论及案例实战


8.1编解码原理流程及API解析


8.2解码流程与案例实战


8.3编程流程与案例实战


8.4FFmpeg编解码与时间基详解


第9章AVFilter过滤器层理论及案例实战


9.1过滤器层的架构原理解析


9.1.1FFmpeg包含滤镜的转码流程


9.1.2FFmpeg责任链模式简介


9.1.3简单滤镜和复杂滤镜之间的区别


9.1.4FFmpeg滤镜流程图


9.1.5滤镜图、滤镜链、滤镜之间的关系


9.1.6FFmpeg滤镜相关的重要结构体


9.2DirectShow框架原理与流程解析


9.3FFmpeg过滤器层的重要API解析


9.3.1FFmpeg中使用过滤器的步骤


9.3.2AVFilter的API


9.4FFmpeg过滤器案例实战


9.4.1FFmpeg命令行方式体验过滤器


9.4.2FFmpeg的API方式实现过滤器


第10章SWResample音频重采样理论及案例实战


10.1音频重采样简介


10.1.1音频基础


10.1.2PCM简介


10.1.3PCM重采样


10.1.4C语言实现PCM重采样


10.2SWResample库结构简介


10.2.1FFmpeg与PCM格式


10.2.2Packed和Planar的区别


10.2.3音频播放时间计算


10.2.4C语言分离左右声道


10.2.5lswr的使用流程及API简介


10.3SWResample音频重采样案例实战


10.3.1SwrContext使用步骤解析


10.3.2使用lswr实现PCM重采样案例实战


10.3.3Packed模式转Planar模式


第11章SWScale图像缩放与颜色空间转换


11.1色彩空间转换的原理简介


11.2SWScale库结构简介


11.3SWScale图片色彩空间转换案例实战


第12章AVDevice设备读写理论及案例实战


12.1AVDevice的使用步骤及API解析


12.2AVDevice的API方式采集本地摄像头获取的数据


12.3VMWare中的Ubuntu采集本地摄像头获取的数据


12.4AVDevice的API方式采集话筒获取的数据


12.5FFmpeg读取网络视频流并解码为YUV


12.6给摄像头实时添加水印后编码为H.264


第13章FFmpeg直播综合案例实战


13.1直播系统架构及流程简介


13.2流媒体服务器的搭建


13.3FFmpeg进行RTMP直播推流


13.4两个C++封装类的小结


13.5OpenCV4基础操作及磨皮美颜


13.6OpenCV4磨皮美颜并结合FFmpeg直播推流


产品特色