gpt4 book ai didi

ffmpeg - 使用 FFmpeg 中的 libavcodec 解码作品

转载 作者:行者123 更新时间:2023-12-01 19:05:09 30 4
gpt4 key购买 nike

我正在尝试使用 libavcodec 解码作品。我可以单独使用 libopus 库来做到这一点。但我正在尝试使用 libavcodec 实现相同的目标。我试图弄清楚为什么它在我的情况下不起作用。我有一个 rtp 流并尝试对其进行解码。解码数据包的结果与输入相同。解码帧通常包含 pcm 值,而不是我实际发送的接收 opus 帧。请帮助我。

av_register_all();
avcodec_register_all();
AVCodec *codec;
AVCodecContext *c = NULL;
AVPacket avpkt;
AVFrame *decoded_frame = NULL;
av_init_packet(&avpkt);
codec = avcodec_find_decoder(AV_CODEC_ID_OPUS);
if (!codec) {
printf("Codec not found\n");
exit(1);
}
c = avcodec_alloc_context3(codec);
if (!c) {
printf("Could not allocate audio codec context\n");
exit(1);
}
/* put sample parameters */
c->sample_rate = 48000;
c->request_sample_fmt = AV_SAMPLE_FMT_FLT;
c->channels = 2;
/* open it */
if (avcodec_open2(c, codec, NULL) < 0) {
printf("Could not open codec\n");
exit(1);
}

AVPacket avpkt;
AVFrame *decoded_frame = NULL;
av_init_packet(&avpkt);
avpkt.data = Buffer; // Buffer is packet data here
avpkt.size = len; // length of the packet
int i, ch;

if (!decoded_frame) {
if (!(decoded_frame = av_frame_alloc())) {
RELAY_SERVER_PRINT("Could not allocate audio frame\n");
exit(1);
}
}
int ret;
int got_frame = 0;
ret = avcodec_decode_audio4(c, decoded_frame, &got_frame, &avpkt);
if (ret < 0) {
fprintf(stderr, "Error decoding audio frame (%s)\n", av_err2str(ret));
return ret;
}
printf("length %i\n", decoded_frame->pkt_size);

最佳答案

我也遇到了同样的问题。我的流使用 8kHz 进行编码,而 ffmpeg 始终使用 48kHz(硬编码)初始化 libopus。

查看 ffmpeg 代码片段:

static av_cold int libopus_decode_init(AVCodecContext *avc)
{
(...)
avc->sample_rate = 48000;
avc->sample_fmt = avc->request_sample_fmt == AV_SAMPLE_FMT_FLT ?
AV_SAMPLE_FMT_FLT : AV_SAMPLE_FMT_S16;
(...)
}

我已将其替换为:

if (avc->sample_rate == 0)
avc->sample_rate = 48000;

现在解码可以工作了。我想知道这个解码器是否支持动态比特率变化。

原始帧的长度必须通过以下方式计算:

int frame_size = decoded_frame->nb_samples * av_get_bytes_per_sample(decoded_frame->sample_fmt);

关于ffmpeg - 使用 FFmpeg 中的 libavcodec 解码作品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41589934/

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