调试视频帧差异

时间:2013-12-30 02:26:39

标签: javascript video encoding ffmpeg h.264

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

以下是我用于测试的过程:

  1. 使用h264编码单个图像(输出约62KB),使用Cisco的OpenH264,写入磁盘
  2. 在JS中读取文件为二进制文件(通过XHR加载)
  3. 使用百老汇在JS中解码
  4. 在画布中显示
  5. 我实际上有一个功能性的例子,但是在步骤1和步骤2之间有一个手动步骤 - 我必须调用FFMPEG来强制进行小翻译,我无法弄清楚原因。

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

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

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

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

1 个答案:

答案 0 :(得分:0)

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

根据我自己的测试,百老汇总是无法解码16像素行的非倍数行。列文件。此外,它支持非常有限的流格式,因此您可能需要" strip" -FFMPEG术语中的复制流 - 他们。

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