美文网首页
libavdevice这个库

libavdevice这个库

作者: 蓝色科学史 | 来源:发表于2019-12-02 14:42 被阅读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

    相关文章

      网友评论

          本文标题:libavdevice这个库

          本文链接:https://www.haomeiwen.com/subject/afpxgctx.html