涉及到的几个头文件和链接库
头文件
<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_streams
、format->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