scrcpy多个安卓设备投屏

前置条件

  1. 打开手机的开发者模式,具体方法百度一下
  2. 使用usb链接电脑和设备
  3. 把下面压缩文件(放在这里了)进行提取,把目录加到环境变量中,
    1. 校验adb是否添加成功可以使用adb devices命令
    2. 校验scrcpy可以直接输入scrcpy,没报错就可以了

脚本说明

除了支持单设备同时投屏,也支持多个设备同时投屏

源码

'''scrcpy快捷投屏脚本

脚本说明

除了支持单设备同时投屏,也支持多个设备同时投屏

关于运行失

优先在cmd中输入adb devices检查设备是否有正常连接

'''

import subprocess

import threading

def start_scrcpy(device_id):

    try:

        # 直接在Python脚本中启动scrcpy进程

        process = subprocess.Popen(['scrcpy', '-s', device_id], stdout=subprocess.PIPE, stderr=subprocess.PIPE)

        # 这里可以添加代码来监控进程的状态或者输出

    except Exception as e:

        print(f"Failed to start scrcpy for device {device_id}: {e}")

def get_device_ids():

    result = subprocess.run(['adb', 'devices'], stdout=subprocess.PIPE, text=True)

    device_ids = []

    for line in result.stdout.splitlines():

        if '\tdevice' in line:

            device_id = line.split('\t')[0].strip()

            if device_id:

                device_ids.append(device_id)

    return device_ids

def main():

    device_ids = get_device_ids()

    if len(device_ids) == 0:

        print("No devices connected.")

    else:

        # 为每个设备启动一个线程来运行scrcpy

        threads = []

        for device_id in device_ids:

            thread = threading.Thread(target=start_scrcpy, args=(device_id,))

            thread.start()

            threads.append(thread)

        # 可选:等待所有线程完成(在这个场景中可能不需要,因为scrcpy进程是长期的)

        # for thread in threads:

        #     thread.join()

main()

# if __name__ == "__main__":

#     main()

### scrcpy支持多台设备连接与控制 对于希望利用`scrcpy`实现多台Android设备的同时射和控制,可以采用Python脚本来批量处理多个设备连接请求。由于每台设备都需要独立实例化一个`scrcpy`会话来确保各自的操作互不干扰[^2]。 当通过命令行工具操作时,在启动参数中指定不同的监听端口是必要的,这可以通过设置环境变量或直接在命令行追加相应选项完成。例如: ```bash adb -s <device_serial_1> forward tcp:<port_for_device_1> localabstract:scrcpy adb -s <device_serial_2> forward tcp:<port_for_device_2> localabstract:scrcpy ``` 为了简化这一过程并提高效率,编写一段简单的Python程序能够帮助自动执行上述指令序列,并针对每一部手机开启单独窗口显示其画面。下面是一个基本框架示例: ```python import subprocess from threading import Thread def start_scrcpy(serial, port): command = f'adb -s {serial} forward tcp:{port} localabstract:scrcpy && scrcpy -s {serial}' process = subprocess.Popen(command, shell=True) process.wait() devices = [ {"serial": "emulator-5554", "port": 27183}, {"serial": "0123456789ABCDEF", "port": 27184} ] threads = [] for device in devices: thread = Thread(target=start_scrcpy, args=(device["serial"], device["port"])) threads.append(thread) thread.start() for t in threads: t.join() ``` 这段代码创建了一个线程列表用于并发运行不同设备上的`scrcpy`客户端;每个线程负责启动特定于某一台物理/虚拟机上安装的应用实例,并指定了转发规则以便区分各个数据流路径。 值得注意的是,虽然Qt确实被提及作为构建图形界面的一种方式之一,但在实际应用中并不一定需要依赖它来进行多设备管理——除非有特别定制UI的需求。通常情况下,默认提供的CLI版本就已经足够满足大多数场景下的需求了[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值