java.lang.IllegelStateException,而大部分视频都是黑色的

时间:2016-02-14 12:42:53

标签: java android eclipse

我使用此示例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 );

有人知道它造成的原因吗?

1 个答案:

答案 0 :(得分:0)

好的,我找到了这个问题的答案!

正如我所知,问题在于视频到达流式传输的结尾太快了。

此问题的原因是黑框。 当有很多黑色帧时,速率会增加并更快地到达文件末尾。

这方面的一个解决方案是录制更长的视频。

如果是这样的另一个问题,是否还有另一种方法可以知道什么是帧率,如果它太快就停止提取?