Tag: mediaextractor

SurfaceTexture的onFrameAvailable()方法总是调用得太晚

我试图让下面的MediaExtractor例子工作: http://bigflake.com/mediacodec/ – ExtractMpegFramesTest.java(需要4.1,API 16) 我有的问题是outputSurface.awaitNewImage(); 似乎总是抛出RuntimeException(“帧等待超时”),这是每当mFrameSyncObject.wait(TIMEOUT_MS)调用超时引发的。 无论我设置了TIMEOUT_MS , onFrameAvailable()总是在超时发生后立即被调用。 我尝试了50ms和30000ms,这是一样的。 在线程忙的时候, onFrameAvailable()调用看起来不可能完成,一旦超时发生,线程代码执行结束,它可以parsingonFrameAvailable()调用。 有没有人设法让这个例子工作,或知道如何MediaExtractor应该与GL纹理工作? 编辑:在API 4.4和4.1.1的设备上尝试过,两者都发生同样的情况。 编辑2: 得到它的工作4.4感谢fadden。 问题是th.join();方法调用th.join(); 它阻塞了主线程并阻止了onFrameAvailable()调用的处理。 一旦我评论th.join(); 它适用于4.4。 我想也许ExtractMpegFramesWrapper.runTest()本身应该在另一个线程上运行,所以主线程不会被阻止。 在调用codec.configure()时4.1.2上也有一个小问题,它给出了错误: A/ACodec(2566): frameworks/av/media/libstagefright/ACodec.cpp:1041 CHECK(def.nBufferSize >= size) failed. A/libc(2566): Fatal signal 11 (SIGSEGV) at 0xdeadbaad (code=1), thread 2625 (CodecLooper) 我在通话前join以下内容解决了这个问题: format.setInteger(MediaFormat.KEY_MAX_INPUT_SIZE, 0); 然而,我现在在4.1.1(Galaxy S2 GT-I9100)和4.1.2(三星Galaxy Tab GT-P3110)上的问题是,它们都将info.size设置为0。 这里是日志输出: loop input buffer not available […]