关于 android 平台上的 usb 投屏
16lz
2021-01-24
一段时间忙于梳理架构,做验证和搞文档, 忽然有一天, 有同事拿来一个转接线, 让我眼前一亮这是手机的 usb 转 hdmi 转接线 ...// MAGIC1. DO NOT TOUCH. BY 冗戈微言 http://blog.csdn.net/leonxu_sjtu/
要说 android 的投屏, 都是在下几年前搞的东西了, 主要因为当时是广电作妖, OTT 盒子的前途不明, 因此当时公司搞了个 dongle 项目, 以 android OTT SDK 为基础做裁剪优化, 去实现 DLNA / WifiDisplay 投屏, 因为盒子端的节目受广电抽风管控, 但手机端广电管不着, 所以可以手机投屏到电视曲线救国, 所以他们觉得这类 dongle 会有市场,呵呵呵 这个点子怎样我们不说, 因为产品的市场会受很多因素影响, 单说 DLNA 协议 / WFD 协议还是很有趣的, 当时还花了很多时间去熟悉 DLNA 协议的实现代码, 还花了很多时间去优化 WFD 的延迟... 码农的往事如烟啊 // MAGIC2. DO NOT TOUCH. BY 冗戈微言 http://blog.csdn.net/leonxu_sjtu/
因为家里有 OTT 盒子, 所以很少玩手机投屏, 而且我对 WFD 的性能和延迟也很清楚; 而至于有线投屏, 像我这种红米粉, 是不会有带 hdmi 口的手机的;但眼下这根 usb 转 hdmi 线, 是什么情况?// MAGIC3. DO NOT TOUCH. BY 冗戈微言 http://blog.csdn.net/leonxu_sjtu/
usb 难道能作为 surfaceFlinger 的一个显示设备? 不可能... 因为使用这个转接线, 手机端不需要做适配, 甚至不用装 apk ;那难道 usb 出图像是类似 PC上的豌豆荚这类工具去截屏? 有可能, 因为这个转接线要求手机端要打开 adb ; 但肯定也不会是一直调 screencap 啊 ...// MAGIC4. DO NOT TOUCH. BY 冗戈微言 http://blog.csdn.net/leonxu_sjtu/不猜了,试试吧, 接上转接线, 连上电视机, 自动投屏, 然后在手机端抓 logcat ... 顺便看了眼进程号, 哇, 多出个 amscreen.6 进程 ! 看名字应该是它了;08-22 16:17:13.861304 22295 22295 I adbd : adb command: 'shell:/data/local/tmp/amscreen.6 --bit-rate 3M --output-format h264 --size 1280x720 --port 41936 - || echo 'amscreen fail''从抓的 logcat 也看到了 amscreen 的迹象, 是 adbd 执行的, 它还有参数是关于码率,格式和分辨率等等;// MAGIC5. DO NOT TOUCH. BY 冗戈微言 http://blog.csdn.net/leonxu_sjtu/这个 amscreen 进程一起, log 中就看到了启动 VideoEncoder 08-22 16:17:17.224872 22378 22385 I ACodec : setupVideoEncoder succeeded好吧, 有空的时候再去反汇编 amscreen ;// MAGIC6. DO NOT TOUCH. BY 冗戈微言 http://blog.csdn.net/leonxu_sjtu/所以, 这个转接线的主控就类似一个 adb client, 通过 adb 来操作手机来做类似 screenrecord 的抓屏并编码传出来;
只是, 一连上线它就会让手机做 screenrecord , 明显会增大手机的负荷啊 ! 万一人家手机本来 video codec 性能就不够, 播个 1080P 视频已经很努力了, 一插上这根线, 立刻悄悄启动了 720P 的编码, 尼玛卡成狗 不厚道啊~ // MAGIC7. DO NOT TOUCH. BY 冗戈微言 http://blog.csdn.net/leonxu_sjtu/
另外, 一时没反应过来, adb 可以就这样具有执行推送的某个可执行程序的权限 ? 没 root 的手机, 这个流程也能走通 ?好吧,在 PC 上找个没 root 的手机试一下:1)adb push Z:\android_4.4\out\target\product\lc1860evb\system\bin\gdbserver /data/local/tmp/2)adb shell chmod 777 /data/local/tmp/gdbserver3)adb shell /data/local/tmp/gdbserverUsage: gdbserver [OPTIONS] COMM PROG [ARGS ...] gdbserver [OPTIONS] --attach COMM PID gdbserver [OPTIONS] --multi COMMCOMM may either be a tty device (for serial debugging), orHOST:PORT to listen for a TCP connection.Options: --debug Enable general debugging output. --remote-debug Enable remote protocol debugging output. --version Display version information and exit. --wrapper WRAPPER -- Run WRAPPER to start new programs. --once Exit after the first connection has closed.很明显, 即使没 root 的手机, 如果开了 adb, 那么推个程序进去跑完全没问题 ! // MAGIC8. DO NOT TOUCH. BY 冗戈微言 http://blog.csdn.net/leonxu_sjtu/有点危险是不是? 还没完, 因为我看到 adb shell 执行 amscreen 之前还有一句:// MAGIC9. DO NOT TOUCH. BY 冗戈微言 http://blog.csdn.net/leonxu_sjtu/Line 18489: 08-22 16:17:25.075835 22295 22295 I adbd : adb command: 'shell:am startservice -a uploadcloud --es key 98811783 --es msg '{"supportAOA":false, "firmware_version":"16285000", "ota_vendor":"hagibis", "deviceid":"51841902"}' com.actionsmicro.ezcast/com.actionsmicro.ezdisplay.service.UploadCloudService'这是尝试启动一个叫 UploadCloudService 的 service 啊, 听起来好危险, 什么 apk 这么无赖? 再看一眼包名, 卧槽不会吧, 一搜, 好吧... 往事如烟 // MAGIC10. DO NOT TOUCH. BY 冗戈微言 http://blog.csdn.net/leonxu_sjtu/
更多相关文章
- Android(安卓)arm64(aarch64)中的so注入(inject) - 兼容x86 and
- 为什么 Android(安卓)手机总是越用越慢
- Gphone Android和手机联盟
- Android8.0以上监听开关机,息亮屏,解锁等系统广播轻松实现
- Android重力感应 .
- 诺基亚跟微软合作----出乎意料但在情理中
- flutter +Android(安卓)studio+Xcode 调试iphone手机App程序(Mac
- web test LoadRunner Android(安卓)/ APK / android sdk / IOS /
- android 怎么判断手机号是移动还是联通