1

我正在尝试添加功能以在 Android 上提取、解码、编辑、编码和混合视频。因此,我发现了一些非常有用的实现,它是 Android CTS ExtractDecodeEditEncodeMuxTest的一部分。不幸的是,代码只有在作为测试用例的一部分执行时才有效。我试图从正常活动中执行它并得到:

E/ExtractDecodeEditEncodeMuxTest (18781): java.lang.IllegalStateException: 无法停止复用器

W/System.err(18781):java.lang.RuntimeException:表面帧等待超时 W/System.err(18781):在 ...OutputSurface.awaitNewImage(OutputSurface.java:216)

任何想法,为什么输出表面不接收帧?

更新: 这里是工作测试用例和非工作实现的日志文件。两者的代码完全相同。唯一的区别是工作的一个是 AndroidTestCase,另一个是在 IntentService 内的应用程序中运行。

似乎整个事情在大约 6 帧后停止提取和解码。有任何想法吗?

工作测试用例日志输出

非工作日志输出

4

2 回答 2

1

感谢fadden,我能够解决这个问题。我现在正在使用一个意图服务并在那里启动一个没有looper的线程,它工作正常。

为了在 Android 服务中运行代码,这意味着包装线程必须从自定义线程启动。在线程中启动线程可能不是最好的解决方案,但它实际上解决了问题。

于 2014-07-15T05:07:19.840 回答
1

更有可能你需要在单独的线程中运行它

    public static void runTest(ExtractDecodeEditEncodeMuxTest test) throws Throwable {
        test.setOutputFile();
        TestWrapper wrapper = new TestWrapper(test);
        Thread th = new Thread(wrapper, "codec test");
        th.start();
        th.join();
        if (wrapper.mThrowable != null) {
            throw wrapper.mThrowable;
        }
    }
于 2014-07-14T10:07:59.403 回答