搜索
热搜: 活动 交友 discuz
查看: 62325|回复: 0

[默认设置] Android PC投屏简单尝试

  [复制链接]

43

主题

44

帖子

1160

积分

超级版主

Rank: 8Rank: 8

积分
1160
发表于 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




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

使用道具 举报

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

本版积分规则

抖音账号
关注抖音
加入粉丝群,抽取论坛金币


Archiver|手机版|小黑屋|IT趣-GEEK社区

GMT+8, 2024-4-26 20:55 , Processed in 0.058998 second(s), 23 queries .

Powered by Discuz! X3.4. 技术支持 by 巅峰设计

© 2001-2013 Comsenz Inc.

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