项目使用说明1.运行Node的Socket服务端
node ./sockt/io-server.js
2.运行Node的网页
打开 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 |