【问题标题】:FFmpeg 1.0 < causing audio playback issuesFFmpeg 1.0 < 导致音频播放问题
【发布时间】:2013-05-04 23:38:04
【问题描述】:

我有一个基于 ffplay 的音频流媒体。使用 ffmpeg 0.11 效果很好,但是当我使用 ffmpeg 1.0 或最新的 1.2 版本时,音频似乎被解码或播放奇怪。

从本质上讲,这听起来像是带有 mp3 流和 aac 流的花栗鼠,我听到大量的静电,几乎听不到实际的流,而实际的流听起来很慢。

对于 ffmpeg 中可能导致此类问题的可能变化有什么想法吗?

here 发布了类似的问题,但没有关于正在发生的事情的实际答案。据说this code 重现了同样的问题。

更新 1:
我已经从ffplay一步一步地复制了,但仍然没有运气! :/ 通道和采样率看起来是正确的,所以内部一定有什么东西返回了奇怪的解码格式?

【问题讨论】:

  • 可能是一些 api 更改,不是吗?我猜你使用了这些库。 0.11 和 1.0 或 1.2 不保证 api 相互兼容,而且很可能它们不是。或许您应该再次查看 ffplay 源代码,了解您使用的内部函数的使用详情。
  • 是的,我看了一下ffplay,没看到太多变化。我做了 0.11 和 1.0 版本的 ffplay 之间的差异。那里有一些变化,但我没有发现打开和使用解码器有任何区别。我得再看一看……

标签: c++ c android-ndk ffmpeg


【解决方案1】:

pCodecCtx->request_sample_fmt = AV_SAMPLE_FMT_S16 不会改变行为!我没有找到比使用 swr_convert 将音频样本从 AV_SAMPLE_FMT_FLT 转换为 AV_SAMPLE_FMT_S16 更好的解决方案。

【讨论】:

  • 我给你答案,因为这正是我最终做的。一开始我很幸运我的答案有效,但后来我意识到其他格式的问题仍然存在。答案是将解码器返回的 PCM 数据转换为 Android PCM 播放器接受的数据。
【解决方案2】:

找到了解决办法...所以最初听起来好像有些东西与解码的原始 PCM 数据和我的 PCM 播放器不匹配。我深入研究了解码器返回的内容以及任何潜在的差异。结果默认解码格式已从 AV_SAMPLE_FMT_S16 更改为 AV_SAMPLE_FMT_S16P。解决方法是在打开解码器之前简单地指定pCodecCtx-&gt;request_sample_fmt = AV_SAMPLE_FMT_S16;

如果这是一个坏主意,有什么反馈吗?我担心其他格式是否存在问题和潜在的性能问题...

【讨论】:

    猜你喜欢
    • 2018-06-03
    • 2011-06-27
    • 1970-01-01
    • 2020-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-13
    • 2022-08-20
    相关资源
    最近更新 更多