【问题标题】:Debugging Video Frame Differences调试视频帧差异
【发布时间】:2013-12-30 02:26:39
【问题描述】:

我正在尝试使用功能相当有限的解码器 (Broadway JS) 解码 h264 编码的视频帧。

这是我用于测试的过程:

  1. 使用来自 Cisco 的 OpenH264 使用 h264 编码单个图像(输出约为 62KB),写入磁盘
  2. 在 JS 中以二进制形式读取文件(通过 XHR 加载)
  3. 使用 Broadway 在 JS 中解码
  4. 在画布中显示

我实际上有一个功能示例,但目前在步骤 1 和步骤 2 之间有一个手动步骤 - 我必须调用 FFMPEG 来强制进行小翻译,但我不知道为什么。

我已经成功地将 Cisco 的 Openh264 库集成到我的项目中,并且可以将图像编码为 h264 并将其写入磁盘。我已经确认编码本身是有效的,方法是使用 FFMPEG 将帧提取为 JPEG(看起来很完美)。

但是,为了在 JS 中正确解码帧,我必须使用 FFMPEG 进行转换。它做了一些神奇的事情,文件大小下降到 ~ 58KB,瞧,一切都开始工作了。

Openh264 库仅适用于基线配置,所以我假设我有一些其他随机参数设置不正确。问题是,如果我使用 ffprobe 比较帧 - 设置是相同的!但是文件大小不同,所以显然 something 是不同的。

所以现在是最后一个问题 - 我可以使用什么工具来真正了解 FFMPEG 在幕后所做的工作,以使我的“手动”编码帧正常工作?有没有工具可以让我比较所有两个h264帧的细节?

【问题讨论】:

    标签: javascript video encoding ffmpeg h.264


    【解决方案1】:

    Broadway 基于 Android 的 Stagefright 解码器。您应该从那里提取它,并通过这个基于 C 的解码器运行您的文件。调试起来会容易得多。

    根据我自己的测试,Broadway 总是无法解码非 16 像素行列文件的倍数。此外,它支持的流格式非常有限,因此您可能需要“剥离”-用 FFMPEG 术语复制流-它们。

    通常情况下,我遇到了一个问题,即用百老汇正确解码长 SPS 和 PPS NAL,生成假 SPS/PPS 有效。一些编码器为他们的序列参数集启用了所有的功能,而他们只使用基本的。所以不做广告不使用的功能实际上是一种获得更多兼容性的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-01
      • 1970-01-01
      相关资源
      最近更新 更多