赞
踩
import android.content.Context; import android.media.MediaCodec; import android.media.MediaFormat; import android.util.AttributeSet; import android.view.SurfaceView; import java.nio.ByteBuffer; public class RtspPlayer extends SurfaceView { MediaCodec mediaCodec; public RtspPlayer(Context context, AttributeSet attrs) { super(context, attrs); init(context, attrs); } private void init(Context context, AttributeSet attrs) { } public void configure(int width, int height) { try { mediaCodec = MediaCodec.createDecoderByType("video/avc"); MediaFormat mediaFormat = MediaFormat.createVideoFormat("video/avc", width, height); mediaCodec.configure(mediaFormat, getHolder().getSurface(), null, 0); mediaCodec.start(); } catch (Exception e) { e.printStackTrace(); } } public void onVideoFrame(byte[] frame) { ByteBuffer[] inputBuffers = mediaCodec.getInputBuffers(); int inputBufferIndex = mediaCodec.dequeueInputBuffer(-1); if (inputBufferIndex < 0) return; ByteBuffer inputBuffer = inputBuffers[inputBufferIndex]; inputBuffer.clear(); inputBuffer.put(frame, 0, frame.length); mediaCodec.queueInputBuffer(inputBufferIndex, 0, frame.length, 0, 0); MediaCodec.BufferInfo bufferInfo = new MediaCodec.BufferInfo(); int outputBufferIndex = mediaCodec.dequeueOutputBuffer(bufferInfo, 100); while (outputBufferIndex >= 0) { mediaCodec.releaseOutputBuffer(outputBufferIndex, true); outputBufferIndex = mediaCodec.dequeueOutputBuffer(bufferInfo, 0); } } }
configure方法设置视频大小,将MediaCodec与SurfaceView绑定
onVideoFrame方法将rtsp的流数据,通过MediaCodec转码显示在SurfaceView上
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。