视频专家之路【四】:ffmpeg简单实战之获取属性
2024-09-06 05:44:45
本文是听了雷宵骅大神的课之后的总结,部分内容借用了其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被声明为已否决
根据网上查到的答案,出现这种现象的原因是可能未来这个接口会被替换,但是我在其声明中并没有找到替换的接口,所以采取了另一种方式
如下图所示:
最新文章
- 警告: [unchecked] 对作为原始类型IScheme的成员的write(TProt ocol,T)的调用未经过检查
- Tomcat version 7.0 only support J2EE 1.2。。。。。。。
- PHP 7 vs HHVM 比较
- Python生成二维码脚本
- linux装载可执行程序简析
- 不可或缺 Windows Native (7) - C 语言: 指针
- [原创]java WEB学习笔记52:国际化 fmt 标签,国际化的总结
- asp.net c# 打开新页面或页面跳转
- java 菱形
- 50道经典的JAVA编程题(41-45)
- cpanel导入大数据库(mysql)的方法
- 百度API地图的标注不居中显示,而显示在左上角
- Swift基础之设计折线坐标图
- AWS EC2实例Linux系统创建root用户并更改为root用户登录
- MVC 当前上下文中不存在名称“Styles” “Scripts”
- Spring 中初始化一个Bean对象时依赖其他Bean对象空指针异常
- in packet sniffer
- 基于comet服务器推送技术(web实时聊天)
- 兼容多浏览器的网页复制插件(ZeroClipboard)
- MySQL(四)执行计划