1

我正在尝试使用 Android 的 MediaCodec API 在 android 中创建一个 webm 文件。MediaCodec.createEncoderByType("video/x-vnd.on2.vp8")我使用如下 CTS 测试所示创建了一个 VP8 编码器: https ://android.googlesource.com/platform/cts/+/jb-mr2-release/tests/tests/media/src/android/media/cts/ Vp8EncoderTest.java

我将输入从Surface.

我正在使用这个类 IvfWriter :https://android.googlesource.com/platform/cts/+/jb-mr2-release/tests/tests/media/src/android/media/cts/IvfWriter.java来编写文件到 SD 卡。

但是在写完之后,我既不能在 MxPlayer (Android) 中也不能在我的桌面上使用 VLC/Firefox 播放该文件。Firefox 报告该文件已损坏。

这是创建的文件:https ://www.dropbox.com/s/dwk42m9qz2mlagv/derp.webm

如果有人能告诉我一种调试视频的方法,那就太好了。

4

2 回答 2

3

您创建的“webm”文件不是 webm 文件 - 它是 ivf 文件(这是一种更简单的格式,主要用于包含用于测试的 VPx 编解码器数据),而 firefox 不支持该格式。VLC 确实支持它。

但是对于视频本身 - 文件中每个视频数据包中的每个字节都是 0,因此从代码中调用 IvfWriter 类的方式似乎出了点问题 - 如果不查看更多代码,就很难判断出了什么问题。数据包确实有不同的长度,所以只有个别数据包的内容出错了。

要自己进行此类调试,您可以使用 avconv(或 ffmpeg)工具,例如:avconv -loglevel debug -dump -hex -i derp.webm -f null -这将向您显示每个数据包的元数据(大小、时间戳、标志)以及有效负载内容本身。

于 2014-08-13T08:17:58.443 回答
1

在 Android 4.3 上 Surface 输入到 VP8存在一个已知问题:

我们在 4.3 上提供了 VP8 编码器的早期预览版,该版本存在一些缺陷,例如缺乏 Surface 输入支持和传达的格式不正确。

根据该错误,这些问题已在 Android 4.4 中得到纠正。

于 2014-07-17T14:51:23.273 回答