blob: 914a6ad1caa54132ef5128faed1308fc0a5c52ed (
plain)
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
|
#!/bin/sh
# capture card sysfs device path
SYSFS_PATH="/devices/pci0000:00/0000:00:14.0/usb1/1-12"
# script args
WIDTH="$1"
HEIGHT="$2"
FRAMERATE="$3"
# find audio device (pulseaudio)
PULSE_DEVICE="$(pactl -f json list sources | jq \
--arg sysfs_path "$SYSFS_PATH" --raw-output \
'.[] | select(.properties["sysfs.path"] | . != null and startswith($sysfs_path)) | .name')"
AUDIO_URL="av://pulse:$PULSE_DEVICE"
# find video device (video4linux)
V4L_PATH="$(find "/sys$SYSFS_PATH" -name 'video4linux' | head -n1)"
V4L_PATH="$(find "$V4L_PATH" -name 'index' | xargs grep -l '^0$')"
V4L_PATH="$(echo "$V4L_PATH" | sed 's#/index$#/uevent#')"
VIDEO_DEVICE="$(. "$V4L_PATH" ; echo "/dev/$DEVNAME")"
VIDEO_DEVICE="$(readlink -f "$VIDEO_DEVICE")"
VIDEO_URL="av://v4l2:$VIDEO_DEVICE"
RESOLUTION="${WIDTH}x${HEIGHT}"
fork() {
JOBS="$JOBS $(
"$@" > /dev/null 2> /dev/null &
echo $!
)"
}
# set capture card v4l parameters
v4l2-ctl --silent --device "$VIDEO_DEVICE" \
--set-parm "$FRAMERATE" \
--set-fmt-video "width=$WIDTH,height=$HEIGHT,pixelformat=MJPG" \
--set-ctrl "brightness=0,contrast=128,saturation=128,hue=0"
_mpv() {
fork mpv \
--quiet --msg-level=input=no \
--no-config --input-conf=/dev/null \
--no-osc --no-border \
--no-input-default-bindings --pause=no --force-seekable=no \
--cache=no \
"$@"
}
# audio preview
_mpv \
--no-demuxer-thread \
--audio-buffer=0 \
--cache-pause=no \
--interpolation=no \
--stream-buffer-size=4k \
--profile=low-latency \
"$AUDIO_URL"
# video preview
_mpv \
--untimed --no-correct-pts --no-demuxer-thread \
--profile=low-latency \
--demuxer-lavf-o-add=input_format=mjpeg \
--demuxer-lavf-o-add=framerate="$FRAMERATE" \
--demuxer-lavf-o-add=resolution="$RESOLUTION" \
--demuxer-lavf-o-add=rw_timeout=30000000 \
"$VIDEO_URL"
sleep infinity
kill -9 -- $JOBS
|