首页 > 其他分享 >通过adb从设备持续导出数据流

通过adb从设备持续导出数据流

时间:2022-09-22 15:04:57浏览次数:89  
标签:6666 端口 绑定 导出 tcp forward adb 数据流

1. 背景

我需要分析设备的录音数据,但很可惜,设备存储空间比较小,录个几秒就爆了,远远达不到几分钟甚至几个小时的持续录音要求。本地存储放不下,又不支持拓展可移动存储,为什么不实时导出到PC呢?

刚好我的设备支持 adb,就不开发个新工具了,直接用 adb 的端口映射。

adb 使用说明:http://adbcommand.com/client/41
adb 使用说明(中文翻译):https://its401.com/article/qq_44704503/122761997
adb 官方说明:https://developer.android.com/studio/command-line/adb#forwardports

此方法其实不仅仅适用于录音,所有持续的流数据都可以通过这方法导出,例如日志。

2. 原理简介

此处需要用到 adb forward 命令,实现设备端口与本地端口的映射,例如在 PC 端执行以下命令,可以实现本地端口 11111 与设备的端口 22222 绑定。

adb forward tcp:11111 tcp:22222

除了端口绑定之外,adb forward 还支持特殊文件的绑定,例如:

adb forward tcp:11111 dev:/dev/block/by-name/xxxx

下图引用自 adb forward的细节(1):原理概述 ,清晰介绍了其原理。实际上 adb 的通信估计都是类似的操作,例如 adb push 有特定端口实现特定逻辑,而 adb forward 是提供给用户自定义端口绑定的方法。

我们可以用下面的命令列出通过 adb forward 绑定的接口:

$ adb forward --list
xxxxxxxxxxxxxxx tcp:11111 tcp:22222

3. 操作步骤

3.1 通过socket

比较有参考价值的博客文章:https://blog.csdn.net/omnispace/article/details/80018705

参考上面的博文,本来也是想通过 socket 直接转发的,但毕竟不熟悉网络,出错了不知道怎么解决,尴尬....

可能是我环境的原因,按理是行得通的,记录下来存档吧

3.1.1 步骤1:绑定端口

adb forward tcp:6666 tcp:6666

3.1.3 步骤2:PC端接受

nc localhost 6666 > record.wav

执行没反应,怀疑是步骤1的端口绑定还有问题...

3.1.2 步骤2:端上发送数据

arecord -D default -c 1 - | nc localhost 6666

执行报错:

nc: can't connect to remote host (127.0.0.1): Connection refused

从这里基本可以确定 3.1.1 的绑定端口还有问题,猜测是环境原因,毕竟我设备上的adb能力不是完整版本。

3.2 通过管道中转

上述 3.1 的方案在我的环境无效,联想到 adb 除了映射端口之外,还能映射文件,不如 创建个有名管道中转?

3.2.1 步骤1:创建有名管道

mkfifo /data/audio_pipe

3.2.2 步骤2:绑定端口

adb forward tcp:6666 dev:/data/audio_pipe

3.2.3 步骤3:PC端接收数据

nc localhost 6666 > record.wav

3.2.4 步骤4:设备端发送数据

arecord -D default -c 1 /dev/audio_pipe

标签:6666,端口,绑定,导出,tcp,forward,adb,数据流
From: https://www.cnblogs.com/gmpy/p/16719279.html

相关文章

  • EasyCVR导出设备文件提示报错“配置数据未找到”,该如何解决?
    EasyCVR视频融合平台可支持多协议、多设备接入,包括国标GB28181、RTMP、RTSP/Onvif、海康SDK、大华SDK、Ehome等协议,同时也能分发RTSP、RTMP、FLV、HLS、WebRTC等格式的视频......
  • cmd导入导出Oracle数据库命令
    导入与导出,如下:数据导出:exp用户名/密码@网络服务名file=xxx.dmptables=(表名);eg:expuser/[email protected]=d:\dbbackup\file1221_zwy.dmplog=d:\dbbac......
  • thinkphp6 phpspreadsheet导入+导出xls包含多图
    先在本项目里导入composerrequirephpoffice/phpspreadsheet点击查看代码公用类<?php#设置你对应的命名空间namespaceapp\common\service;usethink\App;usePH......
  • 使用easypoi导出word模板
    官方文档: http://easypoi.mydoc.io/pom.xml<dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-spring-boot-starter</artifactId><versio......
  • vue导出文件
    /**导出*/asynctoExcel(){//letresult=awaitthis.axios({//method:'get',//url:`issdc-manage/gameController/export.do`,......
  • Vue的导入(import)和导出(export、export default)
    https://blog.csdn.net/yiminghd2861/article/details/118856597https://blog.csdn.net/qq_28506819/article/details/75733601 一、importimport在引入文件路径时,引入......
  • javascript的导入和导出
    单个导出: 注意export的写法,不需要export.a才可以导出,只需要在声明之前加上export关键字即可多个导出:  导出默认:注意一个js文件中只能有一个导出默认   导入......
  • oracle导出csv文件后导入mysql
    场景:oracle数据库中有与mysql同名表,需要将oracle表数据导入mysql,需要手工操作工具:navicatpremium解决方案:1、使用plsql工具从oracle导出csv文件2、使用navicat工具......
  • 导入导出
    Common.jsSea.jsRequire.js模块化module一个js文件看做一个模块,模块中可以有任意变量、函数,通过js文件中的export导出接口,需要时,在需要的文件中通过import导入expo......
  • .net通过数据流的方式,HttpWebRequest请求小程序二维码
    #region///<summary>///获取小程序页面的小程序码不限制///</summary>///<paramname="accessTokenOrAppId">AccessToken或App......