FFmpeg入门 - 视频播放

本文是FFmpeg入门教程,重点介绍如何使用FFmpeg播放视频。通过理解音视频编解码基础,学习ffmpeg的关键步骤,包括解析文件流、创建解码器、解码视频流。文章提供了简化版的播放器实现,强调了解码速度控制、内存管理以及PTS同步等问题,并提供了完整的Demo代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

音视频最好从能够直接看到东西,也更加贴近用户的播放开始学起.

音视频编解码基础

我们可以通过http、rtmp或者本地的视频文件去播放视频。这里的"视频"实际上指的是mp4、avi这种既有音频也有视频的文件格式。

这样的视频文件可能会有多条轨道例如视频轨道、音频轨道、字幕轨道等. 有些格式限制比较多,例如AVI视频轨道只能有一条,音频轨道也只能有一条. 而有些格式则比较灵活,例如OGG视频的视频、音频轨道都能有多条.

像音频、视频这种数据量很大的轨道,上面的数据实际上都是通过压缩的。 视频轨道上可能是H264、H256这样压缩过的图像数据,通过解码可以还原成YUV、RGB等格式的图像数据。 音频轨道上可能是MP3、AAC这样压缩过的的音频数据,通过解码可以还原成PCM的音频裸流。

截屏2022-09-04 下午1.47.57.png

实际上使用ffmpeg去播放视频也就是根据文件的格式一步步还原出图像数据交给显示设备显示、还原出音频数据交给音频设备播放:

截屏2022-09-04 下午1.48.08.png

文末名片免费领取音视频开发学习资料,内容包括(C/C++,Linux 服务器开发,FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,srs)以及音视频学习路线图等等。

ffmpeg简单入门

了解了视频的播放流程之后我们来做一个简单的播放器实际入门一下ffmpeg。由于这篇博客是入门教程,这个播放器功能会进行简化:

  1. 使用ffmpeg 4.4.2版本 - 4.x的版本被使用的比较广泛,而且最新的5.x版本资料比较少

  2. 只解码一个视频轨道的画面进行播放 - 不需要考虑音视频同步的问题

  3. 使用SDL2在主线程解码 - 不需要考虑多线程同步问题

  4. 使用源码+Makefile构建 - 在MAC和Ubuntu上验证过,Windows的同学需要自己创建下vs的工程了

使用ffmpeg去解码大概有下面的几个步骤和关键函数,大家可以和上面的流程图对应一下:

解析文件流(解协议和解封装)

  1. avformat_open_input : 可以打开File、RTMP等协议的数据流,并且读取文件头解析出视频信息,如解析出各个轨道和时长等

  2. avformat_find_stream_info : 对于没有文件头的格式如MPEG或者H264裸流等,可以通过这个函数解析前几帧得到视频的信息

创建各个轨道的解码器(分流)

  1. avcodec_find_deco

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值