Commit c05343bb authored by Boris Kocherov's avatar Boris Kocherov Committed by Rafael Monnerat

erp5testnode: add x11_video_catcher.sh

parent f0ab14c5
......@@ -9,6 +9,7 @@
extends =
../../component/xorg/buildout.cfg
../../component/firefox/buildout.cfg
../../component/ffmpeg/buildout.cfg
../../component/coreutils/buildout.cfg
../../stack/slapos.cfg
./buildout.hash.cfg
......@@ -17,6 +18,7 @@ parts =
slapos-cookbook
template
xserver
ffmpeg
firefox-wrapper
geckodriver
......
#!/bin/sh
# scan running process and run ffmpeg
# for write video of xvfb session
while true; do
while ! [ -f "${ffmpeg_bin}" ] ; do
ffmpeg_bin=$(find ~ -path */bin/ffmpeg -type f)
echo ${ffmpeg_bin}
[ -f "${ffmpeg_bin}" ] && break
sleep 10
done
ps -u $(id -u) -o pid= | \
while read pid; do
display=""
resolution=""
test -d /proc/$pid || continue
cat /proc/$pid/cmdline | tr '\0' '\n' | head -n1 | grep /bin/Xvfb\$ > /dev/null 2> /dev/null || continue
for line in $(cat /proc/$pid/cmdline | tr '\0' '\n' 2> /dev/null); do
if echo ${line} | grep -o ':[0-9]*' > /dev/null ; then
display="${line}"
fi
if echo ${line} | grep -o '[0-9]*x[0-9]*x[0-9]*' > /dev/null ; then
resolution="${line%x*}"
fi
done
if [ -n "${display}" ] && [ -n "${resolution}" ]; then
firefox_pid=""
for f_pid in $(ps -u $(id -u) -o pid=); do
test -d /proc/${f_pid} || continue
cat /proc/${f_pid}/cmdline | tr '\0' '\n' | head -n1 | grep ./firefox\$ > /dev/null 2> /dev/null || continue
cat /proc/${f_pid}/environ | tr '\0' '\n' | grep ^DISPLAY=${display}\$ > /dev/null 2> /dev/null || continue
firefox_pid="$f_pid"
break;
done
if [ -z "${firefox_pid}" ]; then
continue
fi
filename="output${firefox_pid}.webm"
test -f ${filename} && continue
echo "xvfb ${pid} ${display} ${resolution}"
echo "firefox ${firefox_pid}"
export DISPLAY=${display}
"${ffmpeg_bin}" -loglevel error -r 30 -s ${resolution} -f x11grab -i ${display}.0 \
-vf unpremultiply=inplace=1 \
-c:v libvpx-vp9 -lossless 1 \
-f webm ${filename} &
ffmpeg_pid=$!
sleep 5
if ! test -f ${filename} ;then
kill ${ffmpeg_pid}
continue
fi
echo run ffmpeg ${ffmpeg_pid}
while true; do
if ! [ -d "/proc/${firefox_pid}" ]; then
echo "kill ffmpeg $ffmpeg_pid"
kill ${ffmpeg_pid}
exit
fi
sleep 0.2
done &
fi
done
sleep 1
done
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment