Android MediaCodec 使用例子
时间: 2023-10-12 19:04:57 浏览: 274
以下是一个简单的 Android MediaCodec 使用例子,用于解码 H.264 视频:
```java
private MediaCodec decoder;
private Surface surface;
// 初始化解码器
private void initDecoder() throws IOException {
MediaFormat format = MediaFormat.createVideoFormat("video/avc", 1920, 1080);
decoder = MediaCodec.createDecoderByType("video/avc");
decoder.configure(format, surface, null, 0);
decoder.start();
}
// 解码数据
private void decodeData(byte[] data) {
ByteBuffer[] inputBuffers = decoder.getInputBuffers();
int inputBufferIndex = decoder.dequeueInputBuffer(10000);
if (inputBufferIndex >= 0) {
ByteBuffer inputBuffer = inputBuffers[inputBufferIndex];
inputBuffer.clear();
inputBuffer.put(data);
decoder.queueInputBuffer(inputBufferIndex, 0, data.length, 0, 0);
}
MediaCodec.BufferInfo bufferInfo = new MediaCodec.BufferInfo();
int outputBufferIndex = decoder.dequeueOutputBuffer(bufferInfo, 10000);
while (outputBufferIndex >= 0) {
decoder.releaseOutputBuffer(outputBufferIndex, true);
outputBufferIndex = decoder.dequeueOutputBuffer(bufferInfo, 0);
}
}
```
在此例子中,我们首先通过 `MediaCodec.createDecoderByType()` 方法创建了一个视频解码器。然后,我们使用 `MediaCodec.configure()` 方法配置了解码器。我们还需要传入一个 `Surface` 对象,用于将解码的视频渲染到屏幕上。
在解码过程中,我们需要将待解码的数据放入解码器的输入缓冲区中,然后通过 `MediaCodec.queueInputBuffer()` 方法将其提交给解码器。解码器会自动从输入缓冲区中获取数据进行解码。
解码器会将解码后的数据放入输出缓冲区中,我们可以通过 `MediaCodec.dequeueOutputBuffer()` 方法获取解码器输出的数据。在获取到输出数据后,我们可以将其渲染到屏幕上。注意,我们需要调用 `MediaCodec.releaseOutputBuffer()` 方法通知解码器已经处理完输出缓冲区中的数据,以便解码器可以继续处理后续的数据。
需要注意的是,这只是一个简单的例子,实际上,使用 MediaCodec 进行视频编码和解码需要处理很多细节。
阅读全文