美文网首页
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这个库

    FFmpeg中有一个和多媒体设备交互的类库:Libavdevice。使用这个库可以读取电脑(或者其他设备上)的多媒...

  • ffmpeg

    FFmpeg主要分为8大模块: libavcodec:用于各种类型声音/图像编解码; libavdevice:用于...

  • 2019-03-15

    学习库和框架之前,首先问自己几个问题 这个库是什么 这个库是要解决什么问题 这个库的先决条件,是要学会什么

  • 写一个时间处理的库

    本文基于我对 ms 这个库的阅读。这个库的代码一共一百多行,完整看下来也就十几分钟,但是这个库非常的有用。这个库的...

  • Spring Boot & JDBC

    :) 依赖 starter 依赖 这个start依赖的其他库 这个库依赖了HikariCP,这是个数据库连接池 关...

  • 微信公众号开发自动回复的Python库——werobot

    werobot 再说werobot这个库,这个库是我最近在做微信公众号开发的时候找到的。这个库封装了微信公众号的很...

  • 存库

    我说的这个存库,可不是商店里面的那个存库。我说的这个存库,是我弟弟小旦的“特异功能”。 表情存库! “咳...

  • magento2中文教程-使用magento2中的时间类库

    日期时间库 这个 DateTime 库提供了处理日期和时间格式的实用程序。这个库中提供的方法描述如下。format...

  • Go 使用 gomail 发送邮件

    我们使用 gomail 这个库来发送邮件 下载库 调用库 使用Goruntine 来并发发送邮件。

  • requests源码简略阅读

    背景 requests库号称是为人类设计的HTTP请求库,个人也经常使用这个库,因此对它的源码产生了兴趣,带着这个...

网友评论

      本文标题:libavdevice这个库

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