gpt4 book ai didi

android - FFmpeg - 我如何获得打开 ALAC 编解码器所需的额外数据?

转载 作者:行者123 更新时间:2023-11-28 02:12:36 25 4
gpt4 key购买 nike

我想知道如何使用 FFmpeg 库从 ALAC 媒体文件中获取额外数据而无需手动解析文件?

我最初设置:

avformat_open_input(&formatContext, pszFileName, 0, 0);
avformat_find_stream_info(formatContext, NULL);
av_find_best_stream(formatContext, AVMEDIA_TYPE_AUDIO, -1, -1, &codec, 0);
codecContext = avcodec_alloc_context3(codec);

目前我能够检测并找到 ALAC 编解码器,但它无法打开返回 AVERROR_INVALIDDATA 的编解码器,它来自未设置的 extradataextradata_size

avcodec_open2(codecContext, codec, NULL);

FFmpeg 文档指出,某些编解码器需要将 extradataextradata_size 设置为编解码器的规范。但是这个数据不应该由 avformat_find_stream_info 设置吗?

最佳答案

是的,extradataavformat_open_input()avformat_find_stream_info() 期间被填充。但是,它会将其填充到您未使用的字段中。您需要以下代码:

avformat_open_input(&formatContext, pszFileName, 0, 0);
avformat_find_stream_info(formatContext, NULL);
int audioStreamIndex = av_find_best_stream(formatContext, AVMEDIA_TYPE_AUDIO, -1, -1, &codec, 0);
codecContext = avcodec_alloc_context3(codec);
avcodec_copy_context(codecContext, formatContext->streams[audioStreamIndex]->codec);
avcodec_open2(codecContext, codec, NULL);

相关的额外行是 avcodec_copy_context(),它从 libavformat 解复用器(在 formatContext->streams[] 中)复制数据到该上下文 (codecContext) 的拷贝,您将使用 libavcodec 中的解码器进行解码。

关于android - FFmpeg - 我如何获得打开 ALAC 编解码器所需的额外数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35144059/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com