【问题标题】:ffmpeg - Fill audio frame with audio sampleffmpeg - 用音频样本填充音频帧
【发布时间】:2016-02-26 03:50:25
【问题描述】:

我正在尝试将音频流编码为文件。我正在接收音频缓冲区并使用avcodec_fill_audio_frame 创建一个AVFrame 并将其发送到avcodec_encode_audio2(中间还有一些其他的东西——我以ffmpeg muxing.c 为例)

问题是:我得到的音频缓冲区包含 480 个样本,我使用的编解码器的 frame_size 为 1152 (MP2)。结果是输出音频文件有点“切碎”。听起来每个音频帧最后都有一些静音样本。

我该如何解决这个问题? 谢谢!!

【问题讨论】:

    标签: c++ audio ffmpeg encoder


    【解决方案1】:

    在将帧传递给avcodec_encode_audio2 之前,您必须使用最多frame_size(在您的情况下为1152)样本填充AVFrame。

    听起来你的框架太小了。你是怎么设置的?你能显示一些代码吗?

    【讨论】:

    • 我从 javascript WebRTC 接收它并使用 Google 的 Native Client 对其进行编码。在 C++ 端,我使用 pp::MediaStreamAudioTrack (link) 来处理流。然后我可以获取缓冲区并对其进行配置。这些是我可以配置的字段:PP_MEDIASTREAMAUDIOTRACK_ATTRIB_BUFFERS、PP_MEDIASTREAMAUDIOTRACK_ATTRIB_SAMPLE_RATE、PP_MEDIASTREAMAUDIOTRACK_ATTRIB_SAMPLE_SIZE、PP_MEDIASTREAMAUDIOTRACK_ATTRIB_CHANNELS、PP_MEDIASTREAMAUDIOTRACK_ATTRIB_DURATION。您需要更多信息吗?
    • 我是否应该创建一个中间缓冲区来填充它,直到它达到 1152,然后才将其发送到编码器?如果是这样,我如何创建和填充这个中间缓冲区?谢谢:)
    猜你喜欢
    • 2016-01-10
    • 1970-01-01
    • 2018-03-16
    • 1970-01-01
    • 2017-02-28
    • 1970-01-01
    • 2016-05-15
    • 2021-10-26
    相关资源
    最近更新 更多