Android 5.1 录屏方案
Android录屏编码配置:
MediaFormat format = MediaFormat.createVideoFormat(MIME_TYPE, mWidth, mHeight); // 封装描述媒体数据格式的信息,可以是音频或视频。 format.setInteger(MediaFormat.KEY_COLOR_FORMAT, MediaCodecInfo.CodecCapabilities.COLOR_FormatSurface); format.setInteger(MediaFormat.KEY_BIT_RATE, mBITRATE); format.setInteger(MediaFormat.KEY_FRAME_RATE, mFRAME_RATE); format.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, minterval);// 关键帧间隔时间 mEncoder = MediaCodec.createEncoderByType(MIME_TYPE);// 实例化一个编码器支持的MIME类型的数据输出。 mEncoder.configure(format, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE); mSurface = mEncoder.createInputSurface(); mEncoder.start();
Android录屏VirtualDisplay配置
mVirtualDisplay = mMediaProjection.createVirtualDisplay(TAG + "-display", mWidth, mHeight, mDpi, DisplayManager.VIRTUAL_DISPLAY_FLAG_PUBLIC, mSurface, null, null);
配置完VirtualDisplay后,Android屏幕内容将输出到mSurface中,此时我们可以考虑另外一个开源解决方案对接:
libstreaming 这是一个输出H.264编码的RTP实时传输流的解决方案,其中摄像头所用到的input surface,正好可以用virtualDisplay输出的 inputSurface替代,当然,我们由于编码不是在mEncoder中直接处理,而是通过libstreaming进行处理,所以我们的Surface就可以使用普通的创建方式了,但是参考Android 4.4源码中的screenrecord中,为了将本地的Surface不予录制,可以将secure设置为false,那么就可以过滤掉采集数据的本身。

浙公网安备 33010602011771号