本文是听了雷宵骅大神的课之后的总结,部分内容借用了其PPT的内容,如有侵权请告知删除。

雷宵骅大神的博客为:https://blog.csdn.net/leixiaohua1020

本节的目的正式开始接触ffmpeg的API,来使用其API来获取属性


ffmpeg接口的常规操作:


原来在视频专家之路【一】:音视频入门知识基础 这一节中提到过播放器在播放视频时采取的所有动作,将其和ffmpeg的API接口对应起来,如下图所示。

   

其实在ffmpeg的处理中也是严格按照该流程去执行的。

现在对这些接口进行讲解。

  • av_register_all:注册所有组件,一般流程上开头都是这个函数
  • avformat_open_input:打开视频文件
  • avformat_find_stream_info:找到流信息
  • avcodec_find_decoder:找到解码器
  • avcodec_open2:打开解码器
  • av_read_frame:读取帧
  • avcodec_decode_video2:开始解码

ffmpeg中的常用结构体解析


先给一张总体的结构体图

AVFormatContext(封装格式上下文结构体,统领全局的结构体)

  • iformat:输入视频的AVInputFormat
  • nb_streams:输入视频的AVStream个数
  • streams:输入视频的AVStream[]数组
  • duration:输入视频的时长
  • bit_rate:输入视频的码率

AVInputFormat(每种封装格式例如FLV\MKV\MP4\AVI对应一个该结构体)

  • name:封装格式
  • long_name:封装格式的长名称
  • extensions:封装格式的扩展名
  • id:封装格式ID
  • 一些封装格式处理的函数接口

AVStream(视频文件中每个视频/音频流对应一个该结构体)

  • id:序号
  • codec:该流对应的AVCodecContext
  • time_base:该流的时基
  • r_frame_rate:该流的帧率

AVCodecContext(编解码器上下文结构体,保存了视频/音频编解码相关信息)

  • codec:编解码器的AVCodec
  • width,height:图像的宽高(只针对视频)
  • pix_fmt:x像素格式(只针对视频)
  • sample_rate:采样率(只针对音频)
  • channels:声道数(只针对音频)
  • sample_fmt:采样格式(只针对音频)

AVCodec(每种视频/音频编解码器例如H.264解码器对应一个该结构体)

  • name:编解码器名称
  • long_name:编解码器长名称
  • type:编解码器类型
  • id:编解码器ID
  • 一些编解码的接口函数

AVPacket(存储一帧压缩编码数据)

AVFrrame(存储一帧解码后像素/采样数据)

附件:过程中遇到的问题及解决


1.av_register_all被声明为已否决

根据网上查到的答案,出现这种现象的原因是可能未来这个接口会被替换,但是我在其声明中并没有找到替换的接口,所以采取了另一种方式

如下图所示:

最新文章

  1. 警告: [unchecked] 对作为原始类型IScheme的成员的write(TProt ocol,T)的调用未经过检查
  2. Tomcat version 7.0 only support J2EE 1.2。。。。。。。
  3. PHP 7 vs HHVM 比较
  4. Python生成二维码脚本
  5. linux装载可执行程序简析
  6. 不可或缺 Windows Native (7) - C 语言: 指针
  7. [原创]java WEB学习笔记52:国际化 fmt 标签,国际化的总结
  8. asp.net c# 打开新页面或页面跳转
  9. java 菱形
  10. 50道经典的JAVA编程题(41-45)
  11. cpanel导入大数据库(mysql)的方法
  12. 百度API地图的标注不居中显示,而显示在左上角
  13. Swift基础之设计折线坐标图
  14. AWS EC2实例Linux系统创建root用户并更改为root用户登录
  15. MVC 当前上下文中不存在名称“Styles” “Scripts”
  16. Spring 中初始化一个Bean对象时依赖其他Bean对象空指针异常
  17. in packet sniffer
  18. 基于comet服务器推送技术(web实时聊天)
  19. 兼容多浏览器的网页复制插件(ZeroClipboard)
  20. MySQL(四)执行计划

热门文章

  1. Django 模型层 ORM 操作
  2. Spring 讲解(四)
  3. sql中的(case when then else end )的用法(相当于java中的if else)
  4. sparksql笔记
  5. dedecms SESSION变量覆盖导致SQL注入漏洞修补方案
  6. IDEA入门使用--二
  7. 数据库的显示、创建、使用 、用户授权管理及忘记root用户后重置密码
  8. javascript全量匹配屏蔽词
  9. Linux虚拟机网络连接的三种方式
  10. Spring事物的传播