我正在尝试使用 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将文件写入SD卡。
但是在写入之后,我既不能在 MxPlayer (Android) 中播放该文件,也不能在我的桌面上使用 VLC/Firefox 播放该文件。 Firefox 报告文件已损坏。
这是创建的文件:https://www.dropbox.com/s/dwk42m9qz2mlagv/derp.webm
如果有人能告诉我调试视频的方法就太好了。
最佳答案
您创建的“webm”文件不是 webm 文件 - 它是 ivf 文件(这是一种更简单的格式,主要用于包含用于测试的 VPx 编解码器数据),而 firefox 不支持该格式.不过 VLC 确实支持它。
但是对于视频本身——文件中每个视频数据包中的每个字节都是 0,所以你从代码中调用 IvfWriter 类的方式似乎出了问题——没有看到更多的代码,很难说出什么是错误的错误的。尽管数据包确实有不同的长度,所以只是个别数据包的内容出了问题。
要自己进行此类调试,您可以使用 avconv(或 ffmpeg)工具,例如像这样: avconv -loglevel debug -dump -hex -i derp.webm -f null -
这将向您显示每个数据包的元数据(大小、时间戳、标志),以及负载内容本身。
关于java - 在android中创建一个webm文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24801805/