FFmpeg开发笔记(三十)解析H.264码流中的SPS帧和PPS帧

6 月 20 日
阅读 2 分钟
858
​《FFmpeg开发实战:从零基础到短视频上线》一书的“2.1.1  音视频编码的发展历程”介绍了H.26x系列的视频编码标准,其中H.264至今仍在广泛使用,无论视频文件还是网络直播,H.264标准都占据着可观的市场份额。
封面图

FFmpeg开发笔记(二十九)Windows环境给FFmpeg集成libxvid

6 月 17 日
阅读 2 分钟
460
​XviD是个开源的视频编解码器,它与DivX一同被纳入MPEG-4规范第二部分的视频标准,但DivX并未开源。早期的MP4视频大多采用XviD或者DivX编码,当时的视频格式被称作MPEG-4。现在常见的H.264后来才增补到MPEG-4规范的第十部分,当然如今使用XviD压缩的视频已经不多了。
封面图

FFmpeg开发笔记(二十八)Linux环境给FFmpeg集成libxvid

6 月 14 日
阅读 2 分钟
427
​XviD是个开源的视频编解码器,它与DivX一同被纳入MPEG-4规范第二部分的视频标准,但DivX并未开源。早期的MP4视频大多采用XviD或者DivX编码,当时的视频格式被称作MPEG-4。现在常见的H.264后来才增补到MPEG-4规范的第十部分,当然如今使用XviD压缩的视频已经不多了。
封面图

FFmpeg开发笔记(二十七)解决APP无法访问ZLMediaKit的直播链接问题

6 月 11 日
阅读 4 分钟
529
​上一篇文章介绍了如何通过ZLMediaKit实现视频推拉流,并使用VLC播放器验证视频直播地址。即使不用VLC播放器,直接在Qt工程的C++代码中调用FFmpeg的API,也能访问ZLMediaKit的直播地址,并正常渲染视频画面。关于如何在Qt工程中引入FFmpeg,可参考《FFmpeg开发实战:从零基础到短视频上线》一书的“第11章  FFmpeg的桌面...
封面图

FFmpeg开发笔记(二十六)Linux环境安装ZLMediaKit实现视频推流

6 月 8 日
阅读 3 分钟
649
​《FFmpeg开发实战:从零基础到短视频上线》一书在第10章介绍了轻量级流媒体服务器MediaMTX,通过该工具可以测试RTSP/RTMP等流媒体协议的推拉流。不过MediaMTX的功能实在是太简单了,无法应用于真实直播的生产环境,真正能用于生产环境的流媒体服务器还要看SRS或者ZLMediaKit。
封面图

FFmpeg开发笔记(二十五)Linux环境给FFmpeg集成libwebp

6 月 5 日
阅读 2 分钟
460
​《FFmpeg开发实战:从零基础到短视频上线》一书介绍了JPEG、PNG、GIF等图片格式,以及如何通过FFmpeg把视频画面转存为这些格式。除了上述这些常见的图片格式,还有较新的WebP格式,它由VP8视频标准派生而来,VP8演进的视频格式叫做WebM,图片格式则叫WebP。
封面图

FFmpeg开发笔记(二十四)Linux环境给FFmpeg集成AV1的编解码器

6 月 2 日
阅读 3 分钟
578
​AV1是一种新兴的免费视频编码标准,它由开放媒体联盟(Alliance for Open Media,简称AOM)于2018年制定,融合了Google VP10、Mozilla Daala以及Cisco Thor三款开源项目的成果。据说在实际测试中,AV1标准比H.265(HEVC)的压缩率提升了大约27%。由于AV1具有性能优势,并且还是免费授权,因此各大流媒体平台更倾向使用A...
封面图

FFmpeg开发笔记(二十三)使用OBS Studio开启RTMP直播推流

6 月 1 日
阅读 2 分钟
547
​OBS是一个开源的直播录制软件,英文全称叫做Open Broadcaster Software,广泛用于视频录制、实时直播等领域。OBS不但开源,而且跨平台,兼容Windows、Mac OS、Linux等操作系统。
封面图

FFmpeg开发笔记(二十二)FFmpeg中SAR与DAR的显示宽高比

5 月 30 日
阅读 3 分钟
490
《FFmpeg开发实战:从零基础到短视频上线》一书提到:通常情况下,在视频流解析之后,从AVCodecContext结构得到的宽高就是视频画面的宽高。然而有的视频文件并非如此,如果按照AVCodecContext设定的宽高展示视频,会发现画面被压扁或者拉长了。比如该书第10章源码playsync.c在播放meg.vob时的视频画面如下图所示:
封面图

FFmpeg开发笔记(二十一)Windows环境给FFmpeg集成AVS3解码器

5 月 27 日
阅读 4 分钟
460
AVS3是中国AVS工作组制定的第三代音视频编解码技术标准,也是全球首个已推出的面向8K及5G产业应用的视频编码标准。AVS工作组于2019年3月9日完成第三代AVS视频标准(AVS3)基准档次的制订工作,参考软件的测试表明,AVS3基准档次的性能比上一代标准AVS2和HEVC提升了约30%。
封面图

FFmpeg开发笔记(二十)Linux环境给FFmpeg集成AVS3解码器

5 月 26 日
阅读 2 分钟
481
​AVS3是中国AVS工作组制定的第三代音视频编解码技术标准,也是全球首个已推出的面向8K及5G产业应用的视频编码标准。AVS工作组于2019年3月9日完成第三代AVS视频标准(AVS3)基准档次的制订工作,参考软件的测试表明,AVS3基准档次的性能比上一代标准AVS2和HEVC提升了约30%。
封面图

FFmpeg开发笔记(十九)FFmpeg开启两个线程分别解码音视频

5 月 24 日
阅读 4 分钟
491
同步播放音视频的时候,《FFmpeg开发实战:从零基础到短视频上线》一书第10章的示例程序playsync.c采取一边遍历一边播放的方式,在源文件的音频流和视频流交错读取的情况下,该方式可以很好地实现同步播放功能。
封面图

FFmpeg开发笔记(十八)FFmpeg兼容各种音频格式的播放

5 月 21 日
阅读 3 分钟
350
​FFmpeg结合SDL可以播放音频文件,也能播放视频文件中的音频流,《FFmpeg开发实战:从零基础到短视频上线》一书第10章的示例程序playaudio.c支持播放mp3和aac两种格式的音频,却不支持播放其他格式的音频。
封面图

FFmpeg开发笔记(十七)Windows环境给FFmpeg集成字幕库libass

5 月 19 日
阅读 7 分钟
312
​libass是一个适用于ASS和SSA格式(Advanced Substation Alpha/Substation Alpha)的字幕渲染器,支持的字幕类型包括srt、ass等,凡是涉及到给视频画面添加字幕,均需事先集成libass。
封面图

FFmpeg开发笔记(十六)Linux交叉编译Android的OpenSSL库

5 月 18 日
阅读 2 分钟
156
​《FFmpeg开发实战:从零基础到短视频上线》一书的例程主要测试本地的音视频文件,当然为了安全起见,很多网络视频都采用了https地址。FFmpeg若要访问https视频,就必须集成第三方的openssl库,但编译FFmpeg时却默认关闭了openssl。为了让App能够播放采用https的在线视频,需要编译安装并启用openssl。
封面图

FFmpeg开发笔记(十五)详解MediaMTX的推拉流

5 月 16 日
阅读 2 分钟
404
​MediaMTX是个开源的轻量级流媒体服务器,它的安装过程参见《FFmpeg开发实战:从零基础到短视频上线》一书的“10.2.2  FFmpeg向网络推流”。MediaMTX下载后的压缩包包括可执行程序mediamtx.exe和配置文件mediamtx.yml,看起来非常简约,但它提供的流媒体服务一点也没缩水。双击mediamtx.exe,MediaMTX弹出一个命令行窗口,...
封面图

FFmpeg开发笔记(十四)FFmpeg音频重采样的缓存

5 月 13 日
阅读 2 分钟
235
​FFmpeg在很多地方都运用了缓存机制,比如《FFmpeg开发实战:从零基础到短视频上线》一书的“3.3.2  对视频流重新编码”介绍了编解码的数据缓存,不单是视频编码过程和视频解码过程有缓存,甚至连音频重采样都用到了缓存。
封面图

FFmpeg开发笔记(十三)Windows环境给FFmpeg集成libopus和libvpx

5 月 12 日
阅读 3 分钟
267
​MP4是最常见的视频封装格式,在《FFmpeg开发实战:从零基础到短视频上线》一书的“1.2.3  自行编译与安装FFmpeg”介绍了如何给FFmpeg集成x264和x265两个库,从而支持H.264和H.265两种标准的编解码。
封面图

FFmpeg开发笔记(十二)Linux环境给FFmpeg集成libopus和libvpx

5 月 11 日
阅读 2 分钟
488
​MP4是最常见的视频封装格式,在《FFmpeg开发实战:从零基础到短视频上线》一书的“1.2.3  自行编译与安装FFmpeg”介绍了如何给FFmpeg集成x264和x265两个库,从而支持H.264和H.265两种标准的编解码。
封面图

FFmpeg开发笔记(十一)Windows环境给FFmpeg集成vorbis和amr

5 月 10 日
阅读 4 分钟
242
​FFmpeg内置了aac音频格式,在《FFmpeg开发实战:从零基础到短视频上线》一书的“5.2.2  Linux环境集成mp3lame”又介绍了如何给FFmpeg集成mp3格式,常见的音频文件除了这两种之外,还有ogg和amr两种格式也较常用。其中ogg格式的编解码依赖于libogg和libvorbis,而amr格式的编解码依赖于opencore-amr。前文介绍了在Linux环...
封面图

FFmpeg开发笔记(十)Linux环境给FFmpeg集成vorbis和amr

5 月 7 日
阅读 3 分钟
214
​FFmpeg内置了aac音频格式,在《FFmpeg开发实战:从零基础到短视频上线》一书的“5.2.2  Linux环境集成mp3lame”又介绍了如何给FFmpeg集成mp3格式,常见的音频文件除了这两种之外,还有ogg和amr两种格式也较常用。其中ogg格式的编解码依赖于libogg和libvorbis,而amr格式的编解码依赖于opencore-amr。因此要先安装编译这三...
封面图

FFmpeg开发笔记(九)Linux交叉编译Android的x265库

5 月 5 日
阅读 3 分钟
329
​《FFmpeg开发实战:从零基础到短视频上线》一书的“12.1.2  交叉编译Android需要的so库”介绍了如何在Windows环境交叉编译Android所需FFmpeg的so库,前文又介绍了如何在Linux环境交叉编译Android所需FFmpeg的so库,接下来介绍如何在Linux环境交叉编译Android所需x265的so库。
封面图

FFmpeg开发笔记(八)Linux交叉编译Android的FFmpeg库

5 月 4 日
阅读 2 分钟
292
​《FFmpeg开发实战:从零基础到短视频上线》一书的“12.1.2  交叉编译Android需要的so库”介绍了如何在Windows环境交叉编译Android所需FFmpeg的so库,接下来介绍如何在Linux环境交叉编译Android所需FFmpeg的so库。
封面图

FFmpeg开发笔记(七)欧拉系统编译安装FFmpeg

5 月 1 日
阅读 5 分钟
369
FFmpeg支持Linux、macOS、Windows、Android等操作系统,其中Linux系列包括Ubuntu、Debian、Mint、CentOS、RHEL、Fedora等分支。FFmpeg官网的编译入口地址为[链接],在这里可以找到FFmpeg对各系统的编译说明。更多详细的FFmpeg开发知识参见《FFmpeg开发实战:从零基础到短视频上线》一书。
封面图

FFmpeg开发笔记(六)如何访问Github下载FFmpeg源码

4 月 28 日
阅读 2 分钟
320
学习FFmpeg的时候,经常要到GitHub下载各种开源代码,比如FFmpeg的源码页面位于[链接]。然而国内访问GitHub很不稳定,经常打不开该网站,比如在命令行执行下面的ping命令。
封面图

FFmpeg开发笔记(五)更新MSYS的密钥环

4 月 27 日
阅读 3 分钟
201
《FFmpeg开发实战:从零基础到短视频上线》一书提到:使用MSYS对FFmpeg进行交叉编译时,需要事先安装交叉编译工具链,也就是执行下面命令。
封面图

FFmpeg开发笔记(四)FFmpeg的动态链接库介绍

4 月 21 日
阅读 2 分钟
310
FFmpeg不仅提供了ffmpeg、ffplay和ffprobe三个可执行程序,还提供了八个工具库,使得开发者能够调用库里面的函数,从而实现更精准的定制化开发需求。这八个库的名字是avcodec、avdevice、avfilter、avformat、avutil、postproc、swresample、swscale,下面分别对这些库展开介绍。更多详细的FFmpeg开发知识参见《FFmpeg开...
封面图

FFmpeg开发笔记(三)FFmpeg的可执行程序介绍

4 月 21 日
阅读 3 分钟
293
外界对于FFmpeg主要有两种使用途径,一种是在命令行运行FFmpeg的可执行程序,该方式适合没什么特殊要求的普通场景;另一种是通过代码调用FFmpeg的动态链接库,由于开发者可以在C代码中编排个性化的逻辑,因此该方式适合厂商专用的特制场景。更多详细的FFmpeg开发知识参见《FFmpeg开发实战:从零基础到短视频上线》一书。
封面图

FFmpeg开发笔记(二)搭建Windows系统的开发环境

4 月 21 日
阅读 2 分钟
382
由于Linux系统比较专业,个人电脑很少安装Linux,反而大都安装Windows系统,因此提高了FFmpeg的学习门槛,毕竟在Windows系统搭建FFmpeg的开发环境还是比较麻烦的。不过若有已经编译好的Windows版本FFmpeg开发包,那就免去了繁琐的Windows编译过程,所以直接安装已编译的FFmpeg开发包,还是相对容易的。在Windows系统安装...
封面图

FFmpeg开发笔记(一)搭建Linux系统的开发环境

4 月 20 日
阅读 3 分钟
586
对于初学者来说,如何搭建FFmpeg的开发环境是个不小的拦路虎,因为FFmpeg用到了许多第三方开发包,所以要先编译这些第三方源码,之后才能给FFmpeg集成编译好的第三方库。不过考虑到刚开始仅仅调用FFmpeg的API,不会马上去改FFmpeg的源码,因此只要给系统安装编译好的FFmpeg动态库,即可着手编写简单的FFmpeg程序。比如这...
封面图