再次是关于Android MediaCodec类的问题。我已经成功地解码了原始的h264内容,并在两个TextureViews中显示了结果。h264流来自运行openGL场景的服务器。该场景具有摄像头,因此可响应用户输入。为了进一步减少服务器上的输入和智能手机上的实际结果之间的延迟,我正在考虑使用MediaCodecs异步模式。这是我设置同步和异步两个变量的方式:
异步:
//decoderCodec is "video/avc"
MediaFormat fmt = MediaFormat.createVideoFormat(decoderCodec, 1280,720);
codec.setCallback(new MediaCodec.Callback() {
@Override
public void onInputBufferAvailable(MediaCodec codec, int index) {
byte[] frameData;
try {
frameData = frameQueue.take(); //this call is blocking
} catch (InterruptedException e) {
return;
}
ByteBuffer inputData = codec.getInputBuffer(index);
inputData.clear();
inputData.put(frameData);
codec.queueInputBuffer(index, 0, frameData.length, 0, 0);
}
@Override
public void onOutputBufferAvailable(MediaCodec codec, int index, MediaCodec.BufferInfo info) {
codec.releaseOutputBuffer(index, true);
}
//The two other methods are left blank at the moment.
});
codec.configure(fmt, surface, null, 0); …Run Code Online (Sandbox Code Playgroud)