-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathphone-webcam
More file actions
executable file
·95 lines (71 loc) · 1.98 KB
/
phone-webcam
File metadata and controls
executable file
·95 lines (71 loc) · 1.98 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#!/usr/bin/env bash
set -euo pipefail
if [ -n "${DEBUG:-}" ]; then
set -x
fi
scrcpy_pid=""
function echo-billboard {
local text="$1"
local text_length="${#text}"
# add extra 4 characters because of text additions
text_length="$((text_length + 4))"
local line="$(printf "%${text_length}s" "" | tr " " "=")"
echo
echo "$line"
echo "= $text ="
echo "$line"
echo
}
function cleanup {
echo-billboard "Phone webcam shutting down"
if [ -n "$scrcpy_pid" ]; then
echo "Stopping scrpy..."
kill "$scrcpy_pid"
wait -f "$scrcpy_pid" >/dev/null 2>&1 || true
scrcpy_pid=""
echo "scrpy stopped"
fi
echo "Removing v4l2loopback module..."
doas modprobe --verbose --remove --wait 6000 v4l2loopback
echo "v4l2loopback module removed"
exit 0
}
# call cleanup when script exits or on SIGINT/SIGTERM/SIGHUP
trap cleanup EXIT
function main {
# Wait for ADB device (phone) to connect
adb wait-for-device
# Unload current v4l2loopback module
doas modprobe --verbose --remove --wait=2000 v4l2loopback
# Insert v4l2loopback module with correct options
doas modprobe --verbose v4l2loopback exclusive_caps=1 card_label="Phone Webcam"
# doas modprobe --verbose v4l2loopback card_label="Phone Webcam"
sleep 0.5
# Get the first v4l2 device
v4l2_device="$(v4l2-ctl --list-devices | grep /dev/video | awk '{print $1}' | head -n1)"
if [ -z "$v4l2_device" ]; then
echo "No v4l2 devices found!"
exit 1
fi
echo "Using v4l2 device: $v4l2_device"
# List available camera resolutions and fps:
# scrcpy --list-camera-sizes
# Stream phone camera to v4l2 device via scrcpy
scrcpy \
--video-source=camera \
--camera-facing=back \
--camera-ar=sensor \
--max-size=1440 \
--video-bit-rate=8M \
--capture-orientation=@flip0 \
--orientation=flip0 \
--no-playback \
--no-audio \
--no-window \
--v4l2-sink="$v4l2_device" \
&
scrcpy_pid="$!"
echo-billboard "Phone webcam ready"
wait "$scrcpy_pid"
}
main "$@"