Chinaunix首页 | 论坛 | 博客
  • 博客访问: 104103
  • 博文数量: 80
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 600
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-14 09:52
文章分类

全部博文(80)

文章存档

2026年(37)

2025年(6)

2022年(2)

2017年(14)

2016年(16)

我的朋友

分类: LINUX

2026-04-13 17:13:35

FFMPEG解码流程:
  1. 注册所有容器格式和CODEC: av_register_all()
  2. 打开文件: av_open_input_file()
  3. 从文件中提取流信息: av_find_stream_info()
  4. 穷举所有的流,查找其中种类为CODEC_TYPE_VIDEO
  5. 查找对应的解码器: avcodec_find_decoder()
  6. 打开编解码器: avcodec_open()
  7. 为解码帧分配内存: avcodec_alloc_frame()
  8. 不停地从码流中提取出帧数据: av_read_frame()
  9. 判断帧的类型,对于视频帧调用: avcodec_decode_video()
  10. 解码完后,释放解码器: avcodec_close()
  11. 关闭输入文件: avformat_close_input_file()
主要数据结构:

基本概念:
   编解码器、数据帧、媒体流和容器是数字媒体处理系统的四个基本概念。
首先需要统一术语:
    容器/文件(Conainer/File):即特定格式的多媒体文件。
    媒体流(Stream):指时间轴上的一段连续数据,如一段声音数据,一段视频数据或一段字幕数据,可以是压缩的,也可以是非压缩的,压缩的数据需要关联特定的编解码器。
    数据帧/数据包(Frame/Packet):通常,一个媒体流由大量的数据帧组成,对于压缩数据,帧对应着编解码器的{BANNED}最佳小处理单元。通常,分属于不同媒体流的数据帧交错复用于容器之中,参见交错。
    编解码器:编解码器以帧为单位实现压缩数据和原始数据之间的相互转换。
在FFMPEG中,使用AVFormatContext、AVStream、AVCodecContext、AVCodec及AVPacket等结构来抽象这些基本要素,它们的关系如上图所示: 
阅读(14) | 评论(0) | 转发(0) |
0

上一篇:libdvbpsi源码分析

下一篇:ffmpeg编译流程

给主人留下些什么吧!~~