- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的问题解释起来非常快:我必须使用 FFmpeg(原始 PCM 到 G.711 mu-law)对音频样本进行编码。这是我的代码有罪的部分(我在这个例子中把原始参数显式):
AVFrame* frame = av_frame_alloc();
frame->nb_samples = 8000;
frame->format = AV_SAMPLE_FMT_S16;
frame->channels = 1;
frame->channel_layout = AV_CH_LAYOUT_MONO;
frame->sample_rate = 8000;
frame->quality = 1;
int res = avcodec_fill_audio_frame(frame, 1, AV_SAMPLE_FMT_S16, /*my samples data*/, 16000, 0);
// If res >= 0, continue with avcodec_encode_audio2
它有效:) ...好吧,我的意思是...
当我的输入是 8000 音频样本(S16 格式,所以 16000 字节)时,它可以工作。但是当我有 6000 音频样本(仍然是 S16 格式,所以 12000 字节)时,它会失败并显示 -22(无效参数)。有什么想法吗?
PRECISION:此样本计数不会动态变化。我的数据 session 总是由 8000 个样本组成(并且有效),而其他 session 的数据总是由 6000 个样本组成(并且失败)。样本数和数据大小是这些 session 之间唯一不同的参数。
编辑: 如果我在 AVCodecContext
中设置或不设置 frame_size
字段,它会在 avcodec_open2
之后返回到 0但是所选的 mu-law 编码器具有 AV_CODEC_CAP_VARIABLE_FRAME_SIZE
功能,因此听起来很正常。
最佳答案
每次调用 avcodec_encode_audio2()
的输入应该恰好是 N 个样本,其中 N 是 AVCodecContext::frame_size
.在某些情况下,这取决于编解码器(例如 mp3 帧大小是恒定的),但在其他情况下,它可以是可变的。对于大多数编码器来说,它在编码中应该仍然是常量。看起来你的值就是默认值,mulaw 没有内置常量,所以你可以在调用 avcodec_open2()
之前指定一个不同的 frame_size
值,然后你应该没问题。
如果您的样本数量动态变化,您需要一个环形缓冲区来确保 avcodec_encode_audio2()
的输入仍然具有恒定数量的样本。
关于c++ - 为什么只有样本计数不同时 avcodec_fill_audio_frame 返回 -22?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45241185/
作为编码解码音频包的一部分,我使用了 avcodec_fill_audio_frame()。我将分配的 AVFrame 指针与包含解码样本和其他参数 channel 数、样本格式、缓冲区大小的缓冲区一
我的问题解释起来非常快:我必须使用 FFmpeg(原始 PCM 到 G.711 mu-law)对音频样本进行编码。这是我的代码有罪的部分(我在这个例子中把原始参数显式): AVFrame* frame
早上好。所以我正在做一个项目,我需要使用 FFmpeg 的库通过 RTMP 连接在 C++ 中流式传输实时视频和音频。据我所知,视频和音频使用两种不同的流,所以我现在尝试创建一个纯音频流。 我的问题:
我是一名优秀的程序员,十分优秀!