Commit c54b3b64 authored by Boris Kocherov's avatar Boris Kocherov

erp5testnode: add x11_video_catcher.sh

parent 581cd767
......@@ -11,6 +11,7 @@ extends =
../../component/shellinabox/buildout.cfg
../../component/pwgen/buildout.cfg
../../component/apache/buildout.cfg
../../component/ffmpeg/buildout.cfg
../../stack/monitor/buildout.cfg
parts =
......@@ -20,6 +21,8 @@ parts =
eggs
zip
git
ffmpeg
x11_video_catcher.sh
apache
[eggs]
......@@ -60,6 +63,17 @@ url = ${:_profile_base_location_}/instance-default.cfg
output = ${buildout:directory}/template-default.cfg
mode = 0644
[copy-to-instance]
recipe = slapos.recipe.build:download
url = ${:_profile_base_location_}/${:_buildout_section_name_}
location = ${buildout:parts-directory}/${:_buildout_section_name_}
filename = ${:_buildout_section_name_}
[x11_video_catcher.sh]
<= copy-to-instance
md5sum = c6110c6dd08b6cc65c3ed969f2c80af0
mode = 0755
[versions]
erp5.util = 0.4.58
slapos.recipe.template = 4.3
......
#!/bin/sh
# scan running process and run ffmpeg
# for write video of xvfb session
ffmpeg_bin=$(find ~ -path */bin/ffmpeg -type f)
echo ${ffmpeg_bin}
while true; do
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