Android PC投屏功能实现的示例代码

本文介绍了Android PC投屏功能实现的示例代码,分享给大家,具体如下:

代码地址 :https://github.com/deepsadness/MediaProjectionDemo

效果预览

投屏效果预览

简单说明:

  1. 使用Android MediaProjection Api来完成视频的截图
  2. 通过WebSocket进行链接。将图片传递给网页

想法来源

看到vysor,觉得特别好玩,于是就想着自己能不能试着做一个类似的功能出来。搜索了相关实现。发现网上已经有网友针对vysor做了分析。于是就照着思路,按图索骥,当作对MediaProjection Api的练习,来完成这个小项目

主要思路

1. 获取屏幕的截屏

Android在Api 21以上为我们已经提供了系统的Api可以进行操作。

主要是这几个类的相互配合

MediaProjection和VirtualSurface,还有截图的话,使用ImageReader,三个类配合使用。

配套使用示意图.png

这里需要注意的是,需要通过这个回调,每当屏幕发生变化,就会回调这个接口,可以得到最新的截图。

ImageReader::setOnImageAvailableListener

2. 搭建Socket连接,将图片的数据进行传递

node 部分的代码在 https://github.com/deepsadness/MediaProjectionDemo/tree/master/sockt

因为我们的目标是在网页内打开,所以需要和网页进行通信。可以简单的使用WebSocket进行双方通向

简单示意图Again.png

通过Socket.iosocket.io/ 就可以简单的实现

3. 如何将图片显示出来

html中的src就可以直接对传递byte[]的进行解析。

 socket.on('image', function (msg) {
   var arrayBufferView = new Uint8Array(msg);
   var blob = new Blob([arrayBufferView], { type: "image/jpeg" });
   var urlCreator = window.URL || window.webkitURL;
   var imageUrl = urlCreator.createObjectURL(blob);
   var img = document.getElementById("screen");
   // var img = document.querySelector("#photo");
   img.src = imageUrl;

4. 下一步

下一步,就是使用 录制的Api,来做录屏直播了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android PC投屏功能实现的示例代码

    本文介绍了Android PC投屏功能实现的示例代码,分享给大家,具体如下: 代码地址 :https://github.com/deepsadness/MediaProjectionDemo 效果预览 投屏效果预览 简单说明: 使用Android MediaProjection Api来完成视频的截图 通过WebSocket进行链接.将图片传递给网页 想法来源 看到vysor,觉得特别好玩,于是就想着自己能不能试着做一个类似的功能出来.搜索了相关实现.发现网上已经有网友针对vysor做了分析.于

  • android禁止锁屏保持常亮(示例代码)

    在播放video的时候在mediaplayer mMediaPlayer.setScreenOnWhilePlaying(true); 已经设置了,在原生的android没有问题和在defy上也没有问题,一到三星的galaxy上就有问题,不知道三星他们改了哪些地方.一般的话设置了播放视频屏幕没有自动.但是在三星上就出了问题. 只好再找找.一般的话设置有两种方法. 如下: 复制代码 代码如下: 1. getWindow().addFlags(WindowManager.LayoutParams.F

  • Android左滑返回功能的实现示例代码

    前几天用了个app发现左滑可以返回首页,发现这个功能很炫酷,就想着自己能不能做出来,于是研究了一下 原理 将activity的背景设置为透明同时设置切换动画 手指滑动的时候,根View跟着滑动,滑倒一定的距离就finish掉. 原理很简单,但实现起来可能有些坑.这里记录一下.源码参考 处理onInterceptTouchEvent 事件拦截要处理一件事情:确定这次触摸事件是不是应该交给SlideFinishLayout的onTouchEvent处理. override fun onInterce

  • Android 实现截屏功能的实例

    Android 实现截屏功能的实例 实现代码: public class ScreenShot { // 获取指定Activity的截屏,保存到png文件 private static Bitmap takeScreenShot(Activity activity) { // View是你需要截图的View View view = activity.getWindow().getDecorView(); view.setDrawingCacheEnabled(true); view.buildD

  • android实现录屏功能

    本文实例为大家分享了android实现录屏功能的具体代码,供大家参考,具体内容如下 1.mian.activity package com.fpt.screenvideo; import android.content.Context; import android.content.Intent; import android.graphics.Color; import android.media.projection.MediaProjectionManager; import androi

  • Android串口通信封装之OkUSB的示例代码

    本文介绍了Android串口通信封装之OkUSB的示例代码,分享给大家.具体如下: Github传送门:OkUSB OkUSB 一个简洁的Android串口通信框架. 功能简介 支持设置波特率 支持设置数据位 支持设置停止位 支持设置校验位 支持DTS和RTS 支持串口连接状态监听 用法简介 Gradle allprojects { repositories { ... maven { url 'https://jitpack.io' } } } dependencies { compile '

  • Android ItemDecoration 实现分组索引列表的示例代码

    本文介绍了Android ItemDecoration 实现分组索引列表的示例代码,分享给大家.具体如下: 先来看看效果: 我们要实现的效果主要涉及三个部分: 分组 GroupHeader 分割线 SideBar 前两个部分涉及到一个ItemDecoration类,也是我们接下来的重点,该类是RecyclerView的一个抽象静态内部类,主要作用就是给RecyclerView的ItemView绘制额外的装饰效果,例如给RecyclerView添加分割线. 使用ItemDecoration时需要继

  • Android 快速实现状态栏透明样式的示例代码

    在手机 app 开发过程中,经常会遇到一种需求,需要将 内容区域 顶到 状态栏 中去.这个时候,下面一段代码,就能很轻松解决问题了. 上代码之前先上效果图: 下面上一段代码: getWindow().requestFeature(Window.FEATURE_NO_TITLE); if(VERSION.SDK_INT >= VERSION_CODES.LOLLIPOP) { Window window = getWindow(); window.clearFlags(WindowManager.

  • Android 实现无网络传输文件的示例代码

    最近的项目需要实现一个 Android 手机之间无网络传输文件的功能,就发现了 Wifi P2P(Wifi点对点)这么一个功能,最后也实现了通过 Wifi 隔空传输文件 的功能,这里我也来整理下代码,分享给大家. Wifi P2P 是在 Android 4.0 以及更高版本系统中加入的功能,通过 Wifi P2P 可以在不连接网络的情况下,直接与配对的设备进行数据交换.相对于蓝牙,Wifi P2P 的搜索速度和传输速度更快,传输距离更远 实现的效果如下所示: 客户端.png 服务器端.png 一

  • Android Studio实现简单音乐播放功能的示例代码

    项目要求 基于Broadcast,BroadcastReceiver等与广播相关的知识实现简单的音乐播放功能,包括音乐的播放.暂停.切换.进度选择.音量调整. 设计效果 (进度条时间刷新功能还没有实现) 实现思路 音乐服务端负责播放音乐和收发广播的功能.当音乐服务端作为接收器时,只能接收到主页面广播的控制消息:作为发送器时,向主页面发送歌曲信息更新的消息 主页面负责进度条以及音量按钮的监听,同时也有收发广播的功能.当主页面作为接收器时,只能接收到音乐服务端广播的歌曲信息更新的消息:作为发送器时,

随机推荐