libavdevice这个库

2019-12-02  本文已影响0人  蓝色科学史

FFmpeg中有一个和多媒体设备交互的类库:Libavdevice。使用这个库可以读取电脑(或者其他设备上)的多媒体设备的数据,或者输出数据到指定的多媒体设备上。

ibavfilter是FFmpeg提供的滤波器类,可以用其做一些音视频处理,如音视频倍速、水平翻转、裁剪、加方框、叠加文字等功能。
例如之前介绍过的音频重采样,视频的像素格式转换,本质上也是滤波,所以libavfilter也可以实现libswresample、libswscale提供的对音视频格式变换的功能。

libavutil:包含一些公共的工具函数。
libswscale:用于视频场景比例缩放、色彩映射转换。
libpostproc:用于后期效果处理。

课后作业:
(1)将一个mp4文件转换为rgb和yuv。
(2)yuv和rgb转换为mp4文件。
(3)码流中的dts和pts,(decoding time stamp)和(presentation time stamp) 。

假设从摄像头采集,采集顺序 1 2 3 4 5 ,最终编码结果是:1编码成I帧,2,3,4编码成B帧,5编码成P帧。
让我们来看下编码,存储以及解码,显示的具体步骤:

视频帧采集后,经过编码器encode以及mux成容器格式,编码和存储过程如下:

编码:
1)先编码 1,编成I帧
2)2,3,4准备编码成b帧,先缓存下来,记录下采集的时间点,后续作为pts基准
3)再编码 5,编成P帧,(注意5虽然先编码,dts相对2,3,4靠前,但是它的采集时间比2,3,4要晚,所以pts大于2,3,4)
4)编码 2, 3, 4 ,编成B帧

编码后立即经过mux写文件,所以存储顺序和编码顺序是一致的,编码后的顺序为(dts顺序)
1 5 2 3 4
I P B B B

视频保存下来后,如果通过player播放,需要解码和渲染,解码和显示的过程如下:
解码:(按照dts顺序)
1 5(参考1) 2(参考1,5) 3(参考1,5) 4(参考1,5)

解码后重新排序(按照pts),显示
1 2 3 4 5

(4)sei帧:可有可无的帧,有时会对视频播放造成干扰。

(5)汇编,最低级系统差异就体现在汇编:
ffmpeg可以用汇编优化C语言代码,详细一些可以了解如下博客:
https://www.cnblogs.com/JeroZeng/p/4782438.html

上一篇下一篇

猜你喜欢

热点阅读