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,那么就可以过滤掉采集数据的本身。

posted @ 2017-09-15 22:16  刘轩舟  阅读(1291)  评论(1)    收藏  举报