远程安卓盒子N1安装IPTV APP-远程查看机顶盒屏幕画面等
实测远程协助安卓电视盒子,远程控制机顶盒(远程控制安卓电视),远程协助给家人的机顶盒安装APP(包括删除、管理APP等),远程操作N1电视盒子
有什么用
远程控制机顶盒,给老人的智能安卓机顶盒(或者安卓电视)安装IPTV类APP
远程给家人的机顶盒安装APP,远程操作N1电视盒子
充当遥控器,实现遥控器的绝大多数功能
远程协助操作安卓电视盒子
怎么用
步骤
(前提是你已经可以配置了路由器的远程,我已经用frps和frpc远程穿透连接起来,再使用了NPM反代出路由器的WEB控制页面,这样一顿操作,后续实现会丝滑许多)
激活N1安卓电视盒子,开机,或者按机顶盒的遥控器
- 在路由器中找到安卓盒子(或者安卓电视)的IP地址
- 检测是否激活设备的办法,ping 盒子的IP,如果已经ping通,请跳过这步
设置远程FRP服务器(服务端)
- 具体参见文章:Docker搭建FRP内网穿透服务,如果已有frps服务器可用,请跳过这步
设置受控端机顶盒所在的路由器上的frpc客户端
- 具体参见文章:Docker搭建FRP内网穿透服务>设置应用4
adb连接命令 adb connect 192.168.6.216:5555
- 检测是否connect就用: adb devices 看是否列出设备IP以及端口
[可选]adb安装命令 adb -s 192.168.6.216:5555 install ***.apk
实例安装perfect player(注意:如果apk文件和路径复杂的话用双引号包裹)
adb -s 192.168.6.216:5555 install “~/Downloads/com.niklabs.pp_1.6.0.1-60105_minAPI16(arm64-v8a)(nodpi)_apkmirror.com.apk”
远程查看屏幕并控制 scrcpy –tcpip=192.168.6.216:5555
- 具体参见文章:安卓手机投屏至电脑, 电脑显示和控制安卓手机, 手机电脑同屏软件Scrcpy
- 控制的目标是用鼠标和键盘操作机顶盒或电视,鼠标点击打开APP,点击设置,键盘输入IPTV直播源
- [可选]其他任何可以用遥控器在本地操作的动作
相关内容
实现方法
现实问题
- 要解决机顶盒连接二楼旁路由器,而远程协助的手机连接的是一楼的主路由
- 如何知道悟空遥控是开放了什么端口?
- 这样打开才能正常扫描到机顶盒的
这个问题无解了,思路要换掉(无法使用悟空遥控的思路)
远程控制手机的原理一样,但难度更大一点,太多安全设置成为远程协助的障碍,无法有效帮助到家里的老人。
步骤/方法/曲折过程
[可选步骤]使用QtScrcpy, 来激活设备的步骤
- 在QtScrcpy中设置,无线192.168.6.216,端口5555,点击“无线连接”
- 左侧的列表中出现,比如:Phone-192.168.6.216:5555; 应该是有adb run 一个命令;具体是什么?
- adb run AdbProcessImpl::out:connected to 192.168.6.216:5555
- 其实就是对应adb命令:adb connect 192.168.6.216:5555
- 点击:安装sndcpy
- 点击:启动服务
- 左侧的列表中出现,比如:Phone-192.168.6.216:5555; 应该是有adb run 一个命令;具体是什么?
- 在Terminal中输入scrcpy -e
- 之前的adb devices(显示列表是空的), 新增加的设备就是上一步连接好的设备(会显示IP:端口)
原来N1机顶盒(安卓)也可以使用scrcpy -e 来连接,从而进行远程控制;我说的是:从Mac电脑(其他的平台也一样)上远程控制机顶盒的页面,可以设置机顶盒的APP,这样避免老人需要使用遥控器来控制(进行复杂的操作,比如:配置DIYP的源地址,本身在遥控器上操控虚拟键盘按来按去就很费劲)
缺点/瑕疵
声音没有传输过来,不过没关系,又不是远程用来看电视的;话说回来,可以把这个N1做成服务,让用户可以远程连接来看IPTV和电影等等。
原来是因为盒子Adndroid的版本太旧问题
1
2
3
4[server] INFO: Device: [Phicomm] Phicomm p230 (Android 7.1.2)
[server] WARN: Audio disabled: it is not supported before Android 11
INFO: Renderer: metal
WARN: Demuxer 'audio': stream explicitly disabled by the device
无法使用盒子遥控器上面的菜单按键,只能是左键单击
- 不碍事,也够用了;只是不能远程设置某个APP开机自动启动罢了
下一步 frp映射/穿透
下一步就是前提设置中的:frp映射出5555来,配置frpc客户端;也成为穿透
面临在padavan中无法找到机顶盒的IP,不在WIFI里面里面(因为是使用网线连接的),如何找到N1盒子的IP?
通过padavan的UI查询:网络信息 > 流量监控https://k2pzl.carlzeng.com:4443/Main_BWMon.asp
1 | 找到了服务器上frps的192.168.6.116:6006, frpc映射至192.168.123.189:5555 |
到路由器上DHCP把机顶盒的IP绑定MAC,这样以后盒子的IP不会变frpc运行在路由器上面总能找到正确的盒子IP(定位准确)。
1 | 这样scrcpy -e |
下一步 scrcpy的远程控制
如何通过scrcpy的远程控制,给N1安卓电视盒子安装APP
理论上adb命令,可以轻松执行这个安装APP的目标(好像我之前写过方法:苹果电脑M1上唯一可用的安卓模拟器-CarlZeng)
- 把要安装的APP,放在电脑本地的一个目录(假设~/Downloads)
- 用命令adb install /*.apk
- 具体过程:
1 | - adb devices |
这样就可以安装好安卓N1盒子上面的APP了
打开前面一步的scrcpy –tcpip=192.168.6.116:6006进行远程控制画面,进去设置一下DIYP的源(老人控制遥控很有难度的)
以后需要安装APP更新,换源等等,远程就能做到了,老人再也不用担心无法看电视。
祝你好运
[按需]删除盒子上APP
有两种方法:
- 可视的方案是打开scrcpy,设置里面,有应用的选项,点击进去,在点卸载即可。
- 命令的方式
- adb -s 192.168.6.216:5555 shell pm list packages
- 根据上一步的package名称使用 adb -s 192.168.6.216:5555 uninstall com.github.tvbox.osc.tk
- adb -s 192.168.6.216:5555 uninstall com.fongmi.android.tv
故障与解决
frp映射穿透过来的ssh服务,无法连接上去
1 | ssh admin@192.168.6.116 -p 6008 |
修改了 ~/.ssh/config后
1 | KexAlgorithms +diffie-hellman-group1-sha1 |
修改之后错误变成:
1 | Unable to negotiate with 192.168.6.116 port 6008: no matching host key type found. Their offer: ssh-rsa,ssh-dss |
最后使用了解决办法:
1 | ssh -o HostKeyAlgorithms=+ssh-rsa -o PubkeyAcceptedAlgorithms=+ssh-rsa root@192.168.6.116 -p 6008 |
这个SSH错误的灵感来源:I get the error “no matching host key type found. Their offer: ssh-rsa” when trying to connect with SSH
K2P使用的SSH密码是默认的admin(和WEB页面登录的密码不一样),好危险的后门行为(建议默认关闭K2P设备的SSH服务)
adb shell 关机
adb -s 192.168.6.216:5555 shell
进入shell以后
关机:reboot -p
关机以后无法使用网络唤醒了,小伙伴有没有办法?
重启:reboot
K2P原版与刷机Note
K2P原版,用来做WIFI中继,是最稳的。在K2P系统里面的功能名称是:无线拓展。换句话说:想要用K2P实现无线中继,就刷回原版:
我用这个原版,死活无法顺畅抓包IPTV数据包,最后盯上了tcpdump命令 tcpdump -i any -w /tmp/iptv.cap。 也下载好了Wireshark,可是没法把/tmp下面的iptv.cap下载下来,找到办法(把文件挪到或mount到web的静态目录):mv /tmp/iptv.cap /www/luci-static/fonts/iptv.cap 可是mv: write error: No space left on device
mount –bind /tmp/iptv.cap /www/web-static/fonts/iptv.cap 同样也会因为空间大小的缘故报错。
想要特定的追求特定的功能模块,那就刷Padavan
感想来自于不同版本的padavan,想要找一个自己满意的各个功能集成在一起的固件,不容易,愿意之一还在于这个款路由器的ROM大小有限,性能/容量有限。
想要找最原生的Openwrt功能就刷LEDE,或者OpenWrt K2P的版本
总结来说:主要是从功能角度出发的,想要多个功能应用合并,才是难点,往往是注重于把最大的需求满足了;其他的,建议别集成/折腾在这个主功能内的K2P中(可以把次要的功能/应用放到其他的机器设备中),除非你会自己编译/剪裁一个适合的固件版本(量体裁衣)
现在我要找的是抓包
灵感来源
安卓手机投屏至电脑, 电脑显示和控制安卓手机, 手机电脑同屏软件Scrcpy-CarlZeng
如何修改LEDE和X86_64位OpenWrt的默认80管理端口-CarlZeng
延伸阅读和应用
刚才思路了一下共享机顶盒,然后想到scrcpy需要一个shell,有点像vnc需要一个客户端一样(条件太高),何不web化?然后搜索一下脑洞大开了:
- 原来手机也可以docker化,在网页里面虚拟出一台手机来;但是这样做有哪些应用呢?(有什么卵用?)
- 原来ws-scrcpy有这样的scrcpy web prototype, Web client for Genymobile/scrcpy and more.
- 有这个东西,理论上很轻松就可以把盒子的画面实时同步到Web端(看电视电影那只是初级应用)
- 更多的东西,安卓系统的设备,可以被远程实时观看+控制(比如:安卓手机,安卓电视,安卓盒子…)
Web client prototype for scrcpy
用docker运行Android web版远程桌面,浏览器访问
使用Docker运行ws-scrcpy:实现Android web远程桌面
使用Docker运行ws-scrcpy:实现Android web远程桌面
Android TV App Launcher Builder
Android TV / Fire OS App Launcher Builder
This tool creates banners for sideloaded apps that don’t show up on the home screen.
在盒子中,根据安卓的APK包名称,生成一个桌面上的快捷方式,方便用遥控器启动某个APK
本章节思路来源:安卓电视,盒子,MiBoxS 原生翻墙 + APP上桌面墙简单高效方法
如何让N1,远程协助/远程桌面,有声音+图像传输
安卓的rdp ;安卓版rdp client 软件
armbian版的vnc
docker一个vnc client出来
noVNC: HTML VNC Client Library and Application
这只是一个vnc的客户端,没有在安卓的N1中跑出vnc server来,单独的client没有意义。
原版C语言:
oNaiPs/droidVncServer
VNC server for Android devices.
- 安装N1上面的服务端:
adb -s 192.168.6.216 install /Users/carlzeng/Downloads/net.christianbeier.droidvnc_ng_28.apk - 成功安装上droidVNC-NG,体验:
- 效果差,延迟高,画面卡卡的,滤镜一样
- 画面分辨率高,但是没有卵用
VNC没有传输声音啊?
是的, VNC server在安卓上,就是无法传输声音的,很遗憾
vnc没有声音传输是功能/设计缺陷, vnc的设计定位在远程控制之类的,没有声音需求。
说明文档:https://blog.rom1v.com/2023/03/scrcpy-2-0-with-audio/
scrcpy 也因安卓版本原因没有声音
[server] WARN: Audio disabled: it is not supported before Android 11
如果不行,就obs把N1内容(画面+语音)直播出来;
控制的话,还是用scrcpy或者vnc(延迟严重)
NetrisTV/ws-scrcpy
Web client prototype for scrcpy. 也就是说部署一个web端,可以原来控制安卓设备。
scavin/ws-scrcpy-docker
用来在浏览器中控制 Android 设备。
sndcpy, using to get sound!, url: https://github.com/rom1v/sndcpy.git
或者使用:
teamviewer, toDesk,RustDesk,向日葵远程控制(远控移动设备)之流?
等待确定最终方案中….
本章节思路:
从Android机顶盒取出已安装apk文件
电脑(我的例子是MAC,已安装adb等工具)
adb devices
执行 adb shell pm list packages指令查看该手机所有安装包的包名,找到你要获取的apk的包名(可以根据英文意理解, 或者使用下面的命令查询当前正在运行的app包名称)
- 命令查询当前正在运行的app包名称: adb shell dumpsys activity
- 我就是这么查询到的, adb shell pm list packages 看不出来, 非要运行起程序, 然后运行这个命令来找找
执行adb shell pm path+ 包名,例如:adb shell pm path com.player.quanguo,获取该安装apk的路径
执行adb pull+安装包路径 输出路径,将该apk文件保存输出到当前目录
- 例如:adb pull /data/app/com.player.quanguo-1/base.apk .
安装到另外一台机顶盒去:
- adb install ./base.apk
通过上面的步骤成功提取出机顶盒中的某个app, 然后安装到另一个机顶盒中去.
android adb 查询当前正在运行
adb shell dumpsys activity
adb shell dumpsys activity | grep -i running
终于找到这个很可能是我想要的apk的包名
1 | adb shell pm path com.player.quanguo |