博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ffmpeg视频解码器
阅读量:3658 次
发布时间:2019-05-21

本文共 1576 字,大约阅读时间需要 5 分钟。

1、目录

#################################################

#################################################

2、视频解码知识

#################################################

#################################################

3、VC下FFmpeg开发环境的搭建

测试:因为ffmpeg本身是基于C的,C++调用C时需要添加extern"C",告诉C++这里面调用的是C语言,#define _STDC_CONSTANT_MACROS是ffmpeg规定在C++里面必须加的。

FFmpeg库

#################################################

#################################################

4、FFmpeg解码的函数(流程)

(4.1)解码函数

av_register_all()注册所有组件

avformat_open_input()打开视频流

avformat_find_stream_info()查找视频流信息(宽、高、解码器的类型)

avcodec_find_decoder()找出对应视频的解码器(H264,MPEG2)

avcodec_open2()打开解码器

循环:

每调用一次读取一帧压缩的视频数据(H.264码流),判断是否读到或读到文件末尾就结束退出。能读到会读到AVPacket(结构体)(装的是H.264视频流数据),解码器也就是avco

dec_decode_video2这个函数,生成AVFrame(装的是YUV数据),

(4.2)解码流程

#################################################

#################################################

5、FFmpeg解码的数据结构

(5.1)AV是音频(Audio )和视频(Video )的简称

(5.2)avformatcontext是视频封装格式的上下文,包含视频最外层的信息(处理封装格式)

(5.3)avinputformat结构体指明了文件用什么封装格式(flv,mkv等)。avstream[0]是视频流,avcodeccontext专门处理编解码,avcodec指明了编码器时什么类型的。

avstream[1]是音频流

(5.4)avpacket是解码前存储一帧视频数据的结构体,avframe是解码完后保存的数据结构体

#################################################

#################################################

6、数据结构分析

跟封装格式相关的

编解码相关的

AVPacket是装H.264数据的,而AVFrame是装YUV数据的。

#################################################

#################################################

7、补充小知识

8、练习

9、代码补充

解码前的文件(通过av_read_frame函数从码流中读取一帧H.264的压缩数据,存在packet里面)判断是否为 视频流,把packet的data写入文件里面

输出yuv数据中的y数据

输出yuv数据(U和V宽和高是Y的1/2)

保存参数到文件中(fprintf函数)

你可能感兴趣的文章
渗透测试基础
查看>>
GitLab服务应用
查看>>
JenKins+GitLab服务应用
查看>>
HTML概述
查看>>
初识 HTML5
查看>>
图像和超链接
查看>>
firewalld-cmd命令
查看>>
DVWA靶场CentOS
查看>>
nginx服务器
查看>>
git命令
查看>>
KVM部署及配置
查看>>
基于Gitlab+Jenkins的测试环境自动构建和生产多环境手动发布方案
查看>>
权限和归属
查看>>
LDAP
查看>>
GREP
查看>>
cron计划
查看>>
用户.组.成员
查看>>
家目录漫游
查看>>
查找文件
查看>>
Shell脚本
查看>>