java - 在android中创建一个webm文件

标签 java android 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将文件写入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/

相关文章:

android - MediaCodec 编码忽略了我的 BUFFER_FLAG_SYNC_FRAME 标志

java - 如果存在负权重循环,贝尔曼-福特算法到底会发生什么?

Java 任务进度属性错误?

java - 安卓.content.res.Resources$NotFoundException : Resource ID #0x0 java exception

Java 类的序列化扩展

Android MediaCodec 向后查找

java - 如何使用 Java 反射调用父类(super class)方法

java - Java小程序的保存状态

java - 缺少后退按钮 Material 主题

android - MediaCodec 是否截断传入数据包以进行解码?