gpt4 book ai didi

c++ - avformat_open_input 无法打开带有原始作品音频数据的文件

转载 作者:行者123 更新时间:2023-12-04 23:01:52 41 4
gpt4 key购买 nike

尝试打开包含 的二进制文件时遇到问题原始音频数据 opus格式。当我尝试打开此文件时,库返回错误:未知输入格式:opus .
我怎样才能打开这个文件?
我需要打开它并将所有原始音频数据写入音频容器。我了解 opus格式仅适用于 encoding .我使用命令实现了这一点:

$ ffmpeg -formats | grep Opus

ffmpeg version 3.4.4 Copyright (c) 2000-2018 the FFmpeg developers
E opus Ogg Opus # For only encoding
那我应该用什么格式打开这个文件呢?与 ogg ?我试过了,但是打开传出文件也有问题。我提供的代码仅显示打开文件的必要部分:
int main(int argc, char *argv[])
{
// ...

av_register_all();

AVFormatContext *iFrmCtx = nullptr;
AVFormatContext *oFrmCtx = nullptr;
AVPacket packet;

const char *iFilename = "opus.bin"; // Raw audio data with `opus` format
const char *oFilename = "opus.mka"; // Audio file with `opus` audio format

AVDictionary* frmOpts = nullptr;
const qint32 smpRateErrorCode = av_dict_set_int(&frmOpts, "sample_rate", 8000, 0);
const qint32 bitRateErrorCode = av_dict_set_int(&frmOpts, "bit_rate", 64000, 0);
const qint32 channelErrorCode = av_dict_set_int(&frmOpts, "channels", 2, 0);
if (smpRateErrorCode < 0 ||
bitRateErrorCode < 0 ||
channelErrorCode < 0) {
return EXIT_FAILURE;
}

AVInputFormat *iFrm = av_find_input_format("opus"); // Error: Unknown input format
if (iFrm == nullptr) {
av_dict_free(&frmOpts);
return EXIT_FAILURE;
}

qint32 ret = 0;
if ((ret = avformat_open_input(&iFrmCtx, iFilename, iFrm, &frmOpts)) < 0) {
av_dict_free(&frmOpts);
return EXIT_FAILURE;
}

// We're doing something...
}

最佳答案

如前所述,Opus 不是自定界的,它需要一个容器。并且由于您从 rtp 有效负载获取原始数据,并且 opus 编解码器是动态编解码器(具有动态有效负载大小),因此您不能使用 ffmpeg AVFormatContext 从文件中读取原始数据。
但是您可以解决这个问题,而不是使用 (av_read_frame) 填充 AVPacket 来解码它们,您可以手动填充 AVPacket 数据和大小,然后将其推送到解码器。
请注意,您还应该更新每个 AVPacket 的 pts 和 dts 。

关于c++ - avformat_open_input 无法打开带有原始作品音频数据的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64226986/

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