FFmpeg音视频解码流程

本文介绍了FFmpeg音视频解码的详细流程,包括打开文件获取句柄、获取解码器、申请解码上下文、解码过程以及清理句柄等步骤。在解码过程中,使用解码器对码流进行解码,读取解码后的音频数据,如采样数据、声道信息等。
摘要由CSDN通过智能技术生成

涉及到的几个头文件和链接库

头文件

  • <libavformat/avformat.h>
  • <libavcodec/avcodec.h>
  • <libavdevice/avdevice.h>

链接库

  • -lavformat
  • -lavcodec
  • -lavdevice

解码流程

1. 使用avformat_open_input打开一个音频文件, 并获得一个 format句柄

 int main(int argc, char **argv)
 {
   
    AVFormatContext *format = nullptr;
    const char *url = "/Users/oyoung/Desktop/only-my-railgun.mp3";
    if (avformat_open_input(&format, url, nullptr, nullptr) < 0) {
   
        std::cerr << "open input failed" << std::endl;
        return -1;
    }
    
    std::cout << "open input success: " << url << std::endl;
	// ...
	return 0;
 }

2. 打开成功的话,可以从format句柄中获取相关信息

  • 获取输入格式: format->iformat
  • 获取流的数量以及相关数据流: format->nb_streamsformat->streams
  • 每条流中包含了解码器相关参数format->streams[i]->codepar,可以用来获取对应的内置解码器
  • 获取到的解码器参数codecpar->codec_type可以知道当前的流是视频流还是音频流
  • 使用 avcodecer_find_decoder来根据 codecpar->codec_id查找解码器
 int main(int argc, char **argv)
 {
   
 	// ... 
    if (auto input_format = format->iformat) {
   
        std::cout << input_format
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值