【问题标题】:MediaCodec signalEndOfInputStream() errorMediaCodec signalEndOfInputStream() 错误
【发布时间】:2014-03-06 10:44:13
【问题描述】:

我正在尝试使用来自示例代码 Grafika 的实时摄像机录制(使用 Opengl)。在我的 Moto G 上一切正常,但我在我的其他设备(带有 Cyanogendmod 11 的 Galaxy Tab 2)上尝试,似乎方法:signalEndofInputStream() 不起作用,编码器永远不会停止。 有没有办法以其他方式将信号发送到 MediaCodec?

抱歉英语不好。

【问题讨论】:

  • 你是怎么理解它不会停止的?
  • 当我评论 mediacodec.signalEndofInputStream(); 所在的行时被称为我在我的 moto G 上遇到了完全相同的问题。但是这条线未注释该应用程序在 Moto G 上完美运行

标签: android android-mediacodec mediamuxer


【解决方案1】:

你可以解决它。

如果您查看DecodeEditEncodeTest,您会看到一个名为WORK_AROUND_BUGS 的神秘布尔值。它是这样使用的:

if (WORK_AROUND_BUGS) {
    // Might drop a frame, but at least we won't crash mediaserver.
    try { Thread.sleep(500); } catch (InterruptedException ie) {}
    outputDone = true;
} else {
    encoder.signalEndOfInputStream();
}

这在 CTS 测试的开发过程中被使用,当时特定于供应商的代码还不能很好地与流结束信号一起工作。添加它是为了让我们可以在供应商处理补丁时使用其他功能。该标志在 4.3 中发布的测试之前被禁用。您可能在 Cyanogen 上遇到了未修补的编解码器。

解决方法是永远不发送流结束信号。相反,您只需停止编解码器。飞行中的缓冲区可能会丢失并且您会丢帧,但对于实时录制而言,这可能无关紧要。 (这对于视频编辑来说更是一个问题。)

【讨论】:

    猜你喜欢
    • 2017-02-08
    • 2015-11-01
    • 2021-07-28
    • 2016-05-17
    • 2023-03-11
    • 2019-02-17
    • 2013-11-23
    • 2013-07-24
    • 1970-01-01
    相关资源
    最近更新 更多