import subprocess
import socket
import time
import numpy as np
adb_path = "D:\\scrcpy-win64-v1.24\\adb" //自己adb的位置
port=15555 //端口号
device_uuid=" xxx" //自己设备
scrcpy_server_path = "scrcpy-server"
p = subprocess.Popen(f"{adb_path} -s {device_uuid} push {scrcpy_server_path} /data/local/tmp", shell=True)
p.communicate()
p = subprocess.Popen(f"{adb_path} -s {device_uuid} forward tcp:{port} localabstract:scrcpy", shell=True)
p.communicate()
p = subprocess.Popen(f"{adb_path} -s {device_uuid} shell CLASSPATH=/data/local/tmp/scrcpy-server app_process / com.genymobile.scrcpy.Server 1.24 max_size=1000 log_level=info bit_rate=8000000 tunnel_forward=true", shell=True)
time.sleep(1)
s1 = socket.socket()
s1.connect(("127.0.0.1", port))
temp = s1.recv(1024)
while temp != b'\x00':
temp = s1.recv(1024)
print("connected: " + str(temp))
s2 = socket.socket()
s2.connect(("127.0.0.1", port))
info_raw = s1.recv(64)
info = info_raw.decode(encoding="utf-8")
width_raw = s1.recv(2)
height_raw = s1.recv(2)
print(info)
width = int.from_bytes(width_raw, byteorder='big')
height = int.from_bytes(height_raw, byteorder='big')
print(width)
print(height)
while True:
data = s1.recv(1024)
print(f"每一帧数据为{data}")
自己想了可以尝试做下去的方向:
1、考虑一下使用ffmpeg程序抓取h.264视频流保存为图片,正尝试。
参考文档:https://blog.csdn.net/mynameisdqy/article/details/119348734?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~aggregatepage~first_rank_ecpm_v1~rank_v31_ecpm-4-119348734-null-null.pc_agg_new_rank&utm_term=h264%E6%B5%81%20python%20%E8%A7%A3%E6%9E%90rtp&spm=1000.2123.3001.4430
关于H.264编码,比较简单的实现方法是收集全部待传输序列,并通过OpenCV的VideoWriter进行编码、写入文件,后对视频文件进行一次性传输或流式,但不具有实时性。
demo的例子跑完应该是不符合当前情况,但是对于输入流的处理还在看,想法是使用ffmpeg的基础命令去处理。
几天的查询均没有直接使用ffmpeg处理h246的方式,只有通过c语言处理,在考虑是否将获取到的h246视频流传入c语言中处理。
2、考虑使用将视频流发送到浏览器上解析
3、考虑一下Python自带的av.open方法,未成功。
如图,最好可以直接获取到桌面情况
可以直接用系统的screen_cap指令截图,然后保存成图片流不就行了,何必从视频里搞图片呢
scrcpy 客户端代码走读 H264 裸流解码过程详解,其实我觉得我们就是要做这个事情。https://blog.csdn.net/weixin_38387929/article/details/121534830?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1-121534830-blog-117197832.pc_relevant_multi_platform_whitelistv2&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1-121534830-blog-117197832.pc_relevant_multi_platform_whitelistv2&utm_relevant_index=1 。但是不知道怎么在Python项目中应用。
你已经取到帧数据,直接加上头文件不就是图片了
你这里固定接收1024字节的流是不是有问题?
1.H264的流分I帧和P帧,这里的大小是动态的,你用固定buffer接收的话,应该还要做一个拼包拆包的动作
2.视频帧的开头应该是0x00,0x00,0x00,0x00,0x**这样的,只有完整的一帧数据,才能转为图片