我正在尝试使用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
如果有人能告诉我一种调试视频的方法,那就太棒了。
答案 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中得到纠正。