当前位置: 首页 > 知识库问答 >
问题:

输入为表面的媒体编解码器API不适用于H264编码器(bigflake示例代码)

笪俊迈
2023-03-14

我正在尝试在4.3上运行带有H264编码器的媒体编解码器API的示例代码,在下面的bigflake链接中进行了解释

http://bigflake.com/mediacodec/CameraToMpegTest.java.txt

我面临以下问题-

那么为什么这个值会被更改,不知道...之后,我们总是看到编码器将queueOutputBuffer的状态设置为INFO_TRY_AGAIN_LATER。所以它创建了文件,但它不编码任何内容,它停止为

I/MPEG4Writer(3421):接收的总长度为/0(0/0)的缓冲区和编码的0帧。-视频

D/MPEG4Writer(3421):停止视频曲目

D/MPEG4Writer(3421):停止视频轨道源

D/MPEG4Writer(3421):视频曲目已停止

D/MPEG4Writer(3421):停止写入线程

D/MPEG4Writer(3421):最后一批写入0块

D/MPEG4Writer(3421):写入线程已停止

所以在我的理解,它应该工作,但看起来仍然编码器没有得到正确配置......

请指导这个...谢谢

内哈尔

共有3个答案

卜昂熙
2023-03-14

作为代码片段,您应该删除th。join()

    /** Entry point. */
    public static void runTest(CameraToMpegTest obj) throws Throwable {
        CameraToMpegWrapper wrapper = new CameraToMpegWrapper(obj);
        Thread th = new Thread(wrapper, "codec test");
        th.start();
    //    th.join();
        if (wrapper.mThrowable != null) {
            throw wrapper.mThrowable;
        }
    }

它对我很有效。

夏侯华彩
2023-03-14

我尝试过在Android 4.3模拟器上运行camaToMpegTest示例。正如您现在已经意识到的那样,它无法正常工作,需要进行一些修复。

>

  • 在SoftAVCEncoder中正确实现getparameter(如果是MIME类型——“视频/avc”),以获得宽度、高度、颜色格式等参数。否则,您的MediaFormat配置不正确,createInputSurface将失败。(我不确定为什么在使用Mediarecorder运行H.264编码时,这不会导致任何问题)

    修复EGL属性

    最重要的是,如果试图在活动上下文中执行此代码,请确保不要阻止onFrameAvailable回调(final void join()会阻止当前线程(Thread.currentThread()),直到接收方完成执行并死亡。)

  • 郎弘业
    2023-03-14

    “编码器输出格式已更改”消息在Android 4.3中是正常的。这就是编码器为您提供带有csd-0/csd-1键的MediaFormat的方式,MediaMuxer#addTrack()需要。

    Bug 58834用于VP8软件编码器;硬件AVC编解码器不需要这些补丁。

    INFO_TRY_AGAIN_LATER最常见的原因是缺少输入。编码器可能会在产生任何输出之前排队等待公平的进审量帧,因此您不能只提交一帧然后等待输出出现。打开VERBOSE标志并确保正在提交帧。

     类似资料:
    • 我正在尝试显示从一个android设备到另一个android设备的实时预览。这是我所做的, 发送器 ;:1.摄像机帧(YUV)->2.MediaCodec(编码h264字节[])->3.MediaMuxer->4.MP4

    • 大小范围在2.5MB-20MB之间。这个问题在较长的剪辑上变得更糟,例如7分钟的范围是9MB-120MB。 正常吗? 我试图捕捉同样的场景,但还是得到了不同的结果。

    • 问题内容: 有谁知道如何使用Base64在Base64中解码和编码字符串。我正在使用以下代码,但无法正常工作。 问题答案: 第一: 选择一种编码。通常,UTF-8是一个不错的选择。坚持绝对对双方都有效的编码。除了UTF-8或UTF-16之外,很少使用其他东西。 传输端: 将字符串编码为字节(例如) 使用该类将字节编码为base64 传输 接收端: 接收 使用该类将解码为字节 将字节解码为字符串(例

    • 我们已经在前两节中表征并变换了不定长的输入序列。但在自然语言处理的很多应用中,输入和输出都可以是不定长序列。以机器翻译为例,输入可以是一段不定长的英语文本序列,输出可以是一段不定长的法语文本序列,例如 英语输入:“They”、“are”、“watching”、“.” 法语输出:“Ils”、“regardent”、“.” 当输入和输出都是不定长序列时,我们可以使用编码器—解码器(encoder-de

    • 这是本问题的后续问题。 这是我的代码: 我的问题-我的实现对于呈现由解码的H264流是否可以?或者我需要做EGL设置或其他什么? 提前道谢!

    • 问题内容: Android中是否存在用于String的base-64解码器和编码器? 问题答案: 看到 似乎这是在API版本8或android 2.2中添加的,因此在较旧的平台上将不可用。 但是它的来源是这样,如果需要的话,可以将其原样复制为旧版本。