一段时间忙于梳理架构,做验证和搞文档, 忽然有一天, 有同事拿来一个转接线, 让我眼前一亮这是手机的 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/
           

更多相关文章

  1. Android(安卓)arm64(aarch64)中的so注入(inject) - 兼容x86 and
  2. 为什么 Android(安卓)手机总是越用越慢
  3. Gphone Android和手机联盟
  4. Android8.0以上监听开关机,息亮屏,解锁等系统广播轻松实现
  5. Android重力感应 .
  6. 诺基亚跟微软合作----出乎意料但在情理中
  7. flutter +Android(安卓)studio+Xcode 调试iphone手机App程序(Mac
  8. web test LoadRunner Android(安卓)/ APK / android sdk / IOS /
  9. android 怎么判断手机号是移动还是联通

随机推荐

  1. android利用WebView与JavaScript交互的方
  2. 程序包android.support.annotation不存在
  3. Android(安卓)8.0整体编译成功后使用mmm
  4. 通过Html网页调用本地安卓(android)app
  5. Android监控程序本身被卸载方法汇总
  6. Android(安卓)6.0 RxJava2 + RxPermissio
  7. Android扫码 有仿微信版
  8. android Gallery 实现短距离滚动 取消惯
  9. 安装Android
  10. Android:android.git.kernel.org 无法访问