请选择 进入手机版 | 继续访问电脑版

扫一扫,访问微社区

查看: 147|回复: 0

Android PC投屏简单尝试

[复制链接]

36

主题

36

帖子

1028

积分

超级版主

Rank: 8Rank: 8

积分
1028
发表于 2018-5-8 10:22:20 | 显示全部楼层 |阅读模式



项目使用说明1.运行Node的Socket服务端
    node ./sockt/io-server.js


2.运行Node的网页
        node ./sockt/index.js

打开 localhost:3000.就可以看到网页了。

    运行App。进入 在MainActivity,点击Start按钮,就可以开始了 进入Activity时,已经回去连接socket
注意:


  • 需要在局域网内运行。App内需要配置好Socket链接的ip. 在SocketIoManager内具体的内容,还是请看一下代码。

###效果预览

###简单说明:


  • 使用Android MediaProjection Api来完成视频的截图通过WebSocket进行链接。将图片传递给网页
想法来源
看到vysor,觉得特别好玩,于是就想着自己能不能试着做一个类似的功能出来。搜索了相关实现。发现网上已经有网友针对vysor做了分析。于是就照着思路,按图索骥,当作对MediaProjection Api的练习,来完成这个小项目

主要思路
####1. 获取屏幕的截屏


  • 创建VirtualDisplay Android在Api 21以上为我们已经提供了系统的Api可以进行操作。 主要是这几个类的相互配合MediaProjection和VirtualSurface,还有截图的话,使用ImageReader,三个类配合使用。

  • public RxScreenShot createImageReader() {
  •         //注意这里使用RGB565报错提示,只能使用RGBA_8888
  •         mImageReader = ImageReader.newInstance(width, height, PixelFormat.RGBA_8888, 1000);
  •         mSurfaceFactory = new ImageReaderSurface(mImageReader);
  •         createProject();
  •         return this;
  •     }

  •     private void createProject() {
  •         mediaProjection.registerCallback(mMediaCallBack, mCallBackHandler);
  •         //通过这种方式来创建这个VirtualDisplay,并将数据传递给ImageReader提供surface
  •         mediaProjection.createVirtualDisplay(TAG + "-display", width, height, dpi, DisplayManager.VIRTUAL_DISPLAY_FLAG_PUBLIC,
  •                 mSurfaceFactory.getInputSurface(), null, null);    }

    获取屏幕截图 可以通过ImageReader类。配套Image来获奖获得的数据转成Bitmap
<ol>/*
封装成了Observable对象。
*/
public class ImageReaderAvailableObservable extends Observable {

    public static ImageReaderAvailableObservable of(ImageReader imageReader) {
        return new ImageReaderAvailableObservable(imageReader, null);

    }

    public static ImageReaderAvailableObservable of(ImageReader imageReader,Handler handler) {
        return new ImageReaderAvailableObservable(imageReader, handler);
    }

    private final ImageReader imageReader;
    private final Handler handler;

    private ImageReaderAvailableObservable(ImageReader imageReader, Handler handler) {
        this.imageReader = imageReader;
        this.handler = handler;
    }

    @Override
    protected void subscribeActual(Observer

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x




上一篇:pm命令介绍与包名信息查询
下一篇:教你Linux下的tar压缩解压缩命令
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表