在android中创建webm文件

时间:2014-07-17 11:02:47

标签: java android mediacodec webm vp8

我正在尝试使用Android的MediaCodec API在Android中创建一个webm文件。 我使用MediaCodec.createEncoderByType("video/x-vnd.on2.vp8")创建了一个VP8编码器,如本CTS测试所示: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将文件写入sdcard。

但写完之后,我无法在MxPlayer(Android)和使用VLC / Firefox的桌面上播放该文件。 Firefox报告该文件已损坏。

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

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

2 个答案:

答案 0 :(得分:2)

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

但是对于视频本身 - 文件中每个视频数据包中的每个字节都是0,所以你从代码中调用IvfWriter类的方式似乎出了问题 - 没有看到更多的代码就很难分辨出什么是错误。但是数据包确实有不同的长度,所以它只是出错的各个数据包的内容。

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

答案 1 :(得分:0)

在Android 4.3上有一个known issue表面输入到VP8:

  

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

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