博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
FFmpeg 与媒体文件关系
阅读量:4631 次
发布时间:2019-06-09

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

1. 容器/文件(Container/File):即特定格式的多媒体文件,比如MP4,flv,mov等。

2. 媒体流(Stream):表示在时间轴上的一段连续的数据,比如一段声音数据、一段视频数据或者一段字母数据,可以是压缩的,也可以是非压缩的,压缩的数据需要关联特定的编解码器。

3. 数据帧/数据包(Frame/Packet):通常一个媒体流是由大量的数据帧组成的,对于压缩数据,帧对应着编解码器的最小处理单元,分属于不同媒体流的数据帧交错存储与容器之中。

4. 编解码器:编解码器是以帧为单位实现压缩数据和原始数据之间的相互转换的。

前面介绍的术语,就是FFmpeg中抽象出来的概念。其中:

1. AVFormatContext:就是对容器或者媒体文件层次的抽象。

2. AVStream:在文件中(容器里面)包含了多路流(音频流、视频流、字幕流),AVStream 就是对流的抽象。

3. AVCodecContext 与 AVCodec:在每一路流中都会描述这路流的编码格式,对编解码器格式以及编解码器的抽象就是AVCodecContext 与 AVCodec。

4. AVPacket 与 AVFrame:对于编码器或者解码器的输入输出部分,也就是压缩数据以及原始数据的抽象就是AVPacket与AVFrame。

5. AVFilter:除了编解码之外,对音视频的处理肯定是针对于原始数据的处理,也就是针对AVFrame的处理,使用的就是AVFilter。

 

FFmpeg视频解码过程

通常来说,FFmpeg的视频解码过程有以下几个步骤:

  1. 注册所支持的所有的文件(容器)格式及其对应的CODEC av_register_all()
  2. 打开文件 avformat_open_input()
  3. 从文件中提取流信息 avformat_find_stream_info()
  4. 在多个数据流中找到视频流 video stream(类型为MEDIA_TYPE_VIDEO
  5. 查找video stream 相对应的解码器 avcodec_find_decoder
  6. 打开解码器 avcodec_open2()
  7. 为解码帧分配内存 av_frame_alloc()
  8. 从流中读取读取数据到Packet中 av_read_frame()
  9. 对video 帧进行解码,调用 avcodec_decode_video2()

 

转载于:https://www.cnblogs.com/longyh/p/9410647.html

你可能感兴趣的文章
jQuery 遍历同胞(siblings)
查看>>
小萌库一周电影大合集
查看>>
Linux 之根目录介绍
查看>>
iOS学习之代码块(Block)
查看>>
十三种迹象表明百度取消新闻源势在必行的趋势
查看>>
vue初识(一)
查看>>
jQuery版本升级踩坑大全
查看>>
nginx+tomcat实现Windows系统下的负载均衡搭建的案例
查看>>
checkstyle.xml Code Style for Eclipse
查看>>
Docker2之Service
查看>>
总结技术人生的第一个“五年计划”
查看>>
linux (一)
查看>>
名不正,则言不顺
查看>>
实验报告四
查看>>
wp8公司帐号申请注意事项
查看>>
PowerDesigner 中将Comment(注释)及Name(名称)内容互相COPY的VBS代码
查看>>
.Net程序员学用Oracle系列(14):子查询、集合查询
查看>>
contest16 CF315 div2+div1F oooxox oooxox oooooo
查看>>
ubuntu下如何用命令行运行deb安装包
查看>>
luacom cygwin
查看>>