怎样以少于1000行代码写一个视频播放器-将电影文件中的视频帧存储为BMP图片

怎样以少于1000行代码写一个视频播放器-将电影文件中的视频帧存储为BMP图片

源代码:tutorial01.cpp

编译好的libav库:libav.zip

1      概述

电影文件都包含一些基本组件。首先,电影文件本身称之为一个容器(container),容器的类型决定了文件中信息的组织方式。例如:AVI和Quicktime就是容器类型。其次,电影文件由一个流(streams)集合组成,例如:电影文件通常都包含一个音频流和一个视频流(流是指一个数据元素序列,其数据元素随着时间推移而变得可用。)。流中的数据元素称之为帧(frames)。每个流都被一个不同种类的编解码器(codec)所编码。编解码器(codec)定义了实际的数据是如何被编码(COded)和解码(DECoded)的,因此得名为CODEC。例如DivX和MP3就是编解码器(codecs)。从流中读取得到包(packets)。包由数据片段组成,我们可以将之解码成应用程序可以直接操作的原始帧。出于教学的目的,本教程中的采用的电影文件,其视频流中的每个包都包含一个完整的帧(译者注:H264中的每个包就不包含一个完整的帧),音频流中的每个包则可包含多个帧。

从基本层面上来讲,处理视频流和音频流的步骤非常简单:

1          从video.avi中打开视频流(video_stream)

2          从视频流中将包(packet)读取到帧(frame)中

3          如果帧不完整,则转到第二步

4          对帧进行处理

5          转到第二步

尽管有一些应用程序会对帧进行复杂的处理,但是使用libav处理多媒体就如上面的流程那么简单。因此在本教程中,我们首先打开一个电影文件,然后从中读取视频流,最后再将每一帧输出成一个BMP文件。

2      打开电影文件

首先,让我们先看看如何打开一个电影文件。使用libav,你首先需要初始化libav库。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值