android 4.4 下使用 DisplayManager.createVirtualDisplay 录屏
来源:互联网 发布:软件项目风险评估 编辑:程序博客网 时间:2024/06/06 03:50
本人最近做了一个关于android 4.4 下屏幕实时传输的项目。
主要使用 DisplayManager.createVirtualDisplay 录屏,并将数据使用mediacodec 编码,socket传输;然后再mediacode解码显示
废话不多说,上代码。
MediaFormat format = MediaFormat.createVideoFormat(MIMETYPE_VIDEO_AVC, width, height); format.setInteger(MediaFormat.KEY_COLOR_FORMAT, MediaCodecInfo.CodecCapabilities.COLOR_FormatSurface); format.setInteger(KEY_BIT_RATE, FRAME_BIT_RATE); format.setInteger(KEY_FRAME_RATE, FRAME_RATE); format.setInteger(KEY_I_FRAME_INTERVAL, FRAME_INTERVAL); MediaCodec vencoder = MediaCodec.createEncoderByType(MIMETYPE_VIDEO_AVC); vencoder.configure(format, null, null, CONFIGURE_FLAG_ENCODE); Surface surface = vencoder.createInputSurface(); mVirtualDisplay = mDisplayManager.createVirtualDisplay("-display", width, height, 1, surface, DisplayManager.VIRTUAL_DISPLAY_FLAG_PUBLIC);
上面主要初始化硬编码与开始录屏。
public void startVideoEncode() { if (vEncoder == null) { throw new RuntimeException("请初始化视频编码器"); } if (videoEncoderLoop) { throw new RuntimeException("必须先停止"); } videoEncoderThread = new Thread() { @Override public void run() {// presentationTimeUs = System.currentTimeMillis() * 1000; vEncoder.start(); while (videoEncoderLoop && !Thread.interrupted()) { try { ByteBuffer[] outputBuffers = vEncoder.getOutputBuffers(); int outputBufferId = vEncoder.dequeueOutputBuffer(vBufferInfo, 0); if (outputBufferId >= 0) { ByteBuffer bb = outputBuffers[outputBufferId]; onEncodedAvcFrame(bb, vBufferInfo); vEncoder.releaseOutputBuffer(outputBufferId, false); } } catch (Exception e) { e.printStackTrace(); break; } } } }; videoEncoderLoop = true; videoEncoderThread.start(); }
录屏编码后的数据在 onEncodedAvcFrame(bb, vBufferInfo); 的bb中,之后就是使用socket将数据传输到另一个Android设备。由于这部分资料太多,这里不再说。
另外需要注意的是使用DisplayManager.createVirtualDisplay 录屏需要以下权限:
<uses-permission android:name="android.permission.CAPTURE_SECURE_VIDEO_OUTPUT"/>
<uses-permission android:name="android.permission.CAPTURE_VIDEO_OUTPUT"/>
阅读全文
0 0
- android 4.4 下使用 DisplayManager.createVirtualDisplay 录屏
- android DisplayManager 服务解析
- DisplayManager
- displaymanager
- ANDROID DisplayManager 服务解析一
- ANDROID DisplayManager 服务解析一
- ANDROID DisplayManager 服务解析一
- ANDROID DisplayManager 服务解析一
- ANDROID DisplayManager 服务解析一
- Android下的录屏软件
- android 4.4 录屏方法
- android 4.4 录屏方法
- 第十七篇 --ANDROID DisplayManager 服务解析一
- Android N DisplayManager服务解析(二)
- Android录屏命令、Android录Gif、Android录视频
- Android录屏命令、Android录Gif、Android录视频
- android录屏软件
- Android 录屏\截图
- php数据导入到mysql /AjaxFileUplo…
- mysql存储过程
- php 结果输出到excel
- 详解PHP ob_start()函数的功能要点
- PCB叠层设计
- android 4.4 下使用 DisplayManager.createVirtualDisplay 录屏
- Memcached快速入门
- MYSQL REPLACE和WAIT FOR
- php post 数据 HttpClient
- 伊斯兰妇女
- 区分联通移动的一个php小方法
- oracle用户
- mysql 字符串追加
- subversion for windows 安装