我使用此示例ExtractMpegFramesTest.java来逐帧提取视频。
首先,我从设备相机录制视频,然后在每个帧上进行图像处理。
代码适用于大多数视频,但在示例中,如果我放置表格的设备然后录制它(这意味着视频看起来是黑色和灰色)应用程序崩溃了是我在日志文件中得到的
java.lang.IllegelStateException
调试代码后,我发现应用程序在此" Switch"
中进入默认情况int outIndex = decoder.dequeueOutputBuffer( info, 10000 );
Log.v("My Error", "outIndex = " + outIndex);
switch ( outIndex ) {
case MediaCodec.INFO_OUTPUT_BUFFERS_CHANGED:
Log.d( TAG, "INFO_OUTPUT_BUFFERS_CHANGED" );
outputBuffers = decoder.getOutputBuffers();
break;
case MediaCodec.INFO_OUTPUT_FORMAT_CHANGED:
Log.d( TAG, "New format " + decoder.getOutputFormat() );
break;
case MediaCodec.INFO_TRY_AGAIN_LATER:
Log.d( TAG, "dequeueOutputBuffer timed out!" );
break;
default:
ByteBuffer buffer = outputBuffers[outIndex];
Log.v( TAG, "We can't use this buffer but render it due to the API limit, " + buffer );
有人知道它造成的原因吗?
答案 0 :(得分:0)
好的,我找到了这个问题的答案!
正如我所知,问题在于视频到达流式传输的结尾太快了。
此问题的原因是黑框。 当有很多黑色帧时,速率会增加并更快地到达文件末尾。
这方面的一个解决方案是录制更长的视频。
如果是这样的另一个问题,是否还有另一种方法可以知道什么是帧率,如果它太快就停止提取?