【问题标题】:Creating a webm file in android在android中创建一个webm文件
【发布时间】:2014-07-17 11:02:47
【问题描述】:

我正在尝试使用 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

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

【问题讨论】:

    标签: java android android-mediacodec webm vp8


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      在 Android 4.3 上有一个known issue 带有 Surface 输入到 VP8:

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

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

      【讨论】:

      • 嗨,我正在 Nexus 5 上运行的 Android 4.4.4 上测试我的应用程序。还有其他可能出错的地方吗?
      猜你喜欢
      • 2017-03-26
      • 2020-12-26
      • 1970-01-01
      • 1970-01-01
      • 2011-10-20
      • 1970-01-01
      • 2015-10-23
      • 2021-06-12
      • 1970-01-01
      相关资源
      最近更新 更多