出售本站【域名】【外链】

首页 AI人工智能软件 qqAI人工智能 微信AI人工智能 抖音AI人工智能 快手AI人工智能 云控系统 手机AI人工智能

Android屏幕投影及反向控制原理

2023-07-29

那一周过的是够有意思的,先停两天电,而后伤风了,而后名目出Bug了,而后发烧了,呵呵哒,赶忙只能过来写点东西压压惊。鉴于最近正幸亏钻研Android投屏及反像控制和Android双开的技术本理,原周就先写写Android投影以及反向控制的本理了。

1 目的 Android投影屏幕到电脑 电脑端反向控制Android手机(如QQ,微信,淘宝...) 2 布景

最近正在名目小组中逢到一件事,小组有时候须要演示demo供各人参考,当演示Android手机投屏时,就须要借助第三方软件停行投屏,比如说360手机管家的演示罪能另有一个神器Vysor(通过Google阅读器投屏并控制手机),但是随之也会带来问题,通过反编译Vysor的Apk可以看到它是运用adb号令截屏而后通过Async网络库传输屏幕投影给靠山,既然有网络收配,假如是公司比较重要的东西,万一第三方正在背面偷偷糊口生涯了演示录屏(我相信那些使用应当都不会,有职业操守),而后可能就会有原人去作投屏的需求。

3 预览图

原日写的本理都是颠终自己真现过的,目前PC端曾经一般工做,并且可以投屏多台Android。Web端通过node.js websocket webrtc HTML真现的目前还正在开发中,鉴于之前没怎样用过前端,所以写的比较慢。

目前测试真时投影正在真正在机上还可以。 PC实个动态截图如下。

光阳.gif p2 舆图.gif 4 本理图 本理.png 5 投屏

投影屏幕,可以去传输图像也可以去传输视频,详细运用哪一种就去看你的需求。而投影图像又分为通过ADB号令去截与图像以及通过Android的ImageReader获与图像而后通过网络传输两种方式,所以投屏的真现是有不少种的,你想运用哪一种都是可以的。

图像流

如今的产品看到他们都是借助手机连线到电脑实个,通过adb间接去截与图片,那样的话就会很快,假如你只是正在公司内部用,运用公司的局域网停行通信我感觉也曾经够用了,果此也可以真现通过网络Socket间接去传输图像的字节码。但是如今手机甄别率可高了,果此假如你分比方错误图像停行办理间接通过Socket传输的话这么会让PC端投屏变得很卡,果此AndroidClient可以先对图像停行压缩裁剪之后再去传输。

Android端那块我是开启了一个Service,而后通过ImageReader获与屏幕的图像,之后对图片停行裁剪压缩之后再操做Socket传输图像数据信息。此中的根柢代码流程如下:

virtualDisplay = mediaProjection.createVirtualDisplay("MainScreen",width,height,dpi ,DisplayManager.VIRTUAL_DISPLAY_FLAG_PUBLIC,imageReader.getSurface() ,null,screenHandler); imageReader.setOnImageAvailableListener(new ImageReader.OnImageAvailableListener() { @Override public void onImageAvailable(ImageReader imageReader) { Log.i(TAG, "call onImageAvailable"); try { //假如有图片这么就获与 img = imageReader.acquireLatestImage(); if (img != null) { //图像办理 //send 数据 } } } 视频流

起初我给取的便是图片传输,厥后想想其真还是有其余方案的,其真可以通过获与Android手机的屏幕视频流通过H264停行编码停行传输给靠山Server,那样可以让画面显示的愈加流畅。Android Client里面有一个MediaCodec的类以及VirtualDisplay类可以去读与Android的屏幕流,而后转化为H264视频流。

Android端仍然是开启一个Service去获与屏幕流,但是编码H264时会有一个坑,便是须要你去手动参预SPS和PPS,之后才是视频帧。此处的办理代码如下

//1,get SPS and PPS MediaFormat outputFormat = codec.getOutputFormat(); ByteBuffer sps = outputFormat.getByteBuffer("csd-0"); // SPS ByteBuffer pps outputFormat.getByteBuffer("csd-1"); // PPS //2, change ByteBuffer to byte[] ... //3, send byte[] to server by socket ... 6 反向控制

PC端去控制手机有如下两大块技术:

Android通过USB数据线大概Wifi连贯打开ADB,通过原地执止ADB command Android手机root掉,通过Android客户端执止ADB command

Adb连贯方式有如下两种:

Usb数据线 Wifi: adb tcpip 5555, adb connect android_ip_address

PC使用步调: Server实个代码主题逻辑不复纯:通过Socket接管Android 客户端传过来的图像数据信息解压缩显示到Ui上面,当用户点击UI时获与鼠标点击的坐标,通过比例换算转化成真际Android实机的坐标,之后通过ADB执止对应的Command号令,而后Android图像的厘革再通过Socket真时传输给Server端记与坐标系厘革不要忘记了,一初步我忘记了转化坐标结因显示就分比方错误。

虽然PC端也可以读与Android Client实个H264编码视频流,而后PC端运用FFMPEG那个库去解码,对于FFMPEG库的相关运用,我引荐各人去看看雷霄骅的技术博客,此人正在音视频方面给以各人很大的协助。

Web使用步调: 首先通过正在node.js上通过socket获与Android Client实个H264视频流,而后通过WebSocket真时将字节数组传输给WebRtc,通过WebRtc的video标签去显示,题外话:WebRtc也是个好东西,你可以基于它去作不少有意思的东西比如网络视屏以及如今挺热的Android曲播,步调员去多合腾合腾还是很有意思的。之后通过js获与鼠标点击的坐标变乱,之后的收配和PC很相似了,都是获得号令而后执止,而后AndroidClient再投屏图像,如此循环。

那粗略便是屏幕投影的本理了。其真不复纯。要害你要有一颗合腾的心。最近筹备把Web实个那块真现完了就来写一篇双开的本理真现。接待其余步调员一起入坑一起交流,不论你是进修Android的还是后实个还是前端开发的,都接待各人一起交流本理思想,一起进修,一起提高。 另有自己写博客其真不暂不多,所以语法表述之类的还尚待进步,而且原日写的时候烧还没退头接续很懵,还请见本,接待各人提出其余的真现想法以及定见。 也喜爱你可以参预QQ群各人一起交流交流:94839608

那是我一初步写的最根柢的Android屏幕投影以及反向控制代码,里面不少代码都是硬编码进去的,可能须要你们手动改一些IP大概通过Socket去传输屏幕宽高之类的,究竟只是根柢测试运用的。那是链接 最近换了工做标的目的,我还是很喜爱Android的,不过不是我最喜爱的,不过我还是有空会去钻研钻研Android的。

热门文章

随机推荐

推荐文章

友情链接: 永康物流网 本站外链出售 义乌物流网 本网站域名出售 手机靓号-号码网