请参阅this链接,我只在输出缓冲区可用时添加一个简单的延迟: ByteBuffer buffer = outputBuffers [outIndex]; Log.v(“DecodeActivity”,“我们不能使用此缓冲区,但由于API限制而渲染它,”+缓冲区);
// We use a very simple clock to keep the video FPS, or the video
// playback will be too fast
while (info.presentationTimeUs / 1000 > System.currentTimeMillis() - startMs) {
try {
sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
break;
}
}
decoder.releaseOutputBuffer(outIndex, true);
但是当我只提供25fps视频帧时,解码后的视频看起来只有10fps(许多帧看起来像丢弃了)。
但是如果我添加一个frameconut来检查fps,它实际上是25fps,如果添加MediaMuxer来复用输入缓冲区中的帧,它会播放得很好,这意味着帧实际上没有丢弃。
所以它为什么会在屏幕上显示但没有在屏幕上显示,但如果我删除了延迟,播放将非常快(几乎50fps)。
答案 0 :(得分:0)
刚刚发现由TextureView引起的问题,将TextureView更改为SurfaceView后,它现在工作正常。
但仍然不清楚为什么TextureView性能如此糟糕。