From b2e3c7ac2bef6607f1f5d749c1f7d3e382221dbe Mon Sep 17 00:00:00 2001 From: pabloFuente Date: Fri, 27 Sep 2019 10:31:31 +0200 Subject: [PATCH] openvidu-recording Firefox container --- .../openvidu-recording/firefox/Dockerfile | 34 ++++++ .../firefox/configuration/autoconfig.js | 2 + .../firefox/configuration/customconfig.cfg | 8 ++ .../configuration/forcefull@shdon.com.xpi | Bin 0 -> 11746 bytes ...{d320c473-63c2-47ab-87f8-693b1badb5e3}.xpi | Bin 0 -> 5987 bytes .../firefox/create_image.sh | 1 + .../openvidu-recording/firefox/entrypoint.sh | 109 ++++++++++++++++++ 7 files changed, 154 insertions(+) create mode 100644 openvidu-server/docker/openvidu-recording/firefox/Dockerfile create mode 100644 openvidu-server/docker/openvidu-recording/firefox/configuration/autoconfig.js create mode 100644 openvidu-server/docker/openvidu-recording/firefox/configuration/customconfig.cfg create mode 100644 openvidu-server/docker/openvidu-recording/firefox/configuration/forcefull@shdon.com.xpi create mode 100644 openvidu-server/docker/openvidu-recording/firefox/configuration/{d320c473-63c2-47ab-87f8-693b1badb5e3}.xpi create mode 100755 openvidu-server/docker/openvidu-recording/firefox/create_image.sh create mode 100755 openvidu-server/docker/openvidu-recording/firefox/entrypoint.sh diff --git a/openvidu-server/docker/openvidu-recording/firefox/Dockerfile b/openvidu-server/docker/openvidu-recording/firefox/Dockerfile new file mode 100644 index 00000000..d4ccaebe --- /dev/null +++ b/openvidu-server/docker/openvidu-recording/firefox/Dockerfile @@ -0,0 +1,34 @@ +FROM ubuntu:16.04 +MAINTAINER openvidu@gmail.com + +# Install Firefox +RUN apt-get update && apt-get -y upgrade && apt-get install -y wget sudo +RUN apt-get install -y firefox + +# Install media packages +RUN apt-get install -y software-properties-common +RUN add-apt-repository ppa:jonathonf/ffmpeg-4 +RUN apt-get update +RUN apt-get install -y ffmpeg pulseaudio xvfb + +# Install jq for managing JSON +RUN apt-get install -y jq + +# Clean +RUN apt-get autoclean + +COPY entrypoint.sh /entrypoint.sh +COPY configuration/autoconfig.js /usr/lib/firefox/defaults/pref/autoconfig.js +COPY configuration/customconfig.cfg /usr/lib/firefox/customconfig.cfg +COPY configuration/{d320c473-63c2-47ab-87f8-693b1badb5e3}.xpi /usr/lib/firefox-addons/extensions/{d320c473-63c2-47ab-87f8-693b1badb5e3}.xpi +COPY configuration/{d320c473-63c2-47ab-87f8-693b1badb5e3}.xpi /usr/lib/firefox-addons/distribution/extensions/{d320c473-63c2-47ab-87f8-693b1badb5e3}.xpi +COPY configuration/{d320c473-63c2-47ab-87f8-693b1badb5e3}.xpi /usr/share/mozilla/extensions/{d320c473-63c2-47ab-87f8-693b1badb5e3}.xpi +RUN ["chmod", "+x", "/entrypoint.sh"] +RUN ["chmod", "755", "/usr/lib/firefox-addons/extensions/{d320c473-63c2-47ab-87f8-693b1badb5e3}.xpi"] +RUN ["chmod", "755", "/usr/lib/firefox-addons/distribution/extensions/{d320c473-63c2-47ab-87f8-693b1badb5e3}.xpi"] +RUN ["chmod", "755", "/usr/share/mozilla/extensions/{d320c473-63c2-47ab-87f8-693b1badb5e3}.xpi"] + +RUN mkdir /recordings +RUN chmod 777 /recordings + +ENTRYPOINT /entrypoint.sh diff --git a/openvidu-server/docker/openvidu-recording/firefox/configuration/autoconfig.js b/openvidu-server/docker/openvidu-recording/firefox/configuration/autoconfig.js new file mode 100644 index 00000000..9cc1c9ea --- /dev/null +++ b/openvidu-server/docker/openvidu-recording/firefox/configuration/autoconfig.js @@ -0,0 +1,2 @@ +pref("general.config.filename", "customconfig.cfg"); +pref("general.config.obscure_value", 0); \ No newline at end of file diff --git a/openvidu-server/docker/openvidu-recording/firefox/configuration/customconfig.cfg b/openvidu-server/docker/openvidu-recording/firefox/configuration/customconfig.cfg new file mode 100644 index 00000000..3aac4941 --- /dev/null +++ b/openvidu-server/docker/openvidu-recording/firefox/configuration/customconfig.cfg @@ -0,0 +1,8 @@ +lockPref("browser.shell.checkDefaultBrowser", false); +lockPref("media.autoplay.default", 0); +lockPref("media.autoplay.enabled.user-gestures-needed", false); +lockPref("extensions.autoDisableScopes", 0); +lockPref("extensions.enabledScopes", 15); +lockPref("security.ssl.enable_ocsp_stapling", false); +lockPref("network.stricttransportsecurity.preloadlist", false); +lockPref("network.http.phishy-userpass-length", 300); \ No newline at end of file diff --git a/openvidu-server/docker/openvidu-recording/firefox/configuration/forcefull@shdon.com.xpi b/openvidu-server/docker/openvidu-recording/firefox/configuration/forcefull@shdon.com.xpi new file mode 100644 index 0000000000000000000000000000000000000000..23c901c1faf0254bcf7120c5eea8ed6ad71d6ccf GIT binary patch literal 11746 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ⓈVrzpm1 z>81_qG*nzWgXY>Pgx4$F$JX1&*Yi4Qpb3iL55h!I18e1=+1#ih7Gc8)#kOMF@_vD= zh$M|M5r_TOMqR2AZBU?fK>QNhXs$i5uo)EH705tma#!?VeFyW^v*aCx2t39q(ikz6PB#6Kt6r(B{<#K2qrB2AE#T@oG@QYUC8TS1cZLUlykZijYq;L2!Wog9>h zL`3`TeDN^WTtNE5`8O?y(iWA z>*6?3-oYK}SFdXqw!0M#_UHF552fE`i@Q;o^ysoP1=jYccTJYce= zvT9!XcE$S~BBLyfTH2abU(E)}#g|pp4`p&jQB8|~DL?jsI(}L2M<=bO=Zp$g%Y^d{ zu+Z<~UcCXKZf-(9ChSj0Z9FTmj&JWfrVlIPsMOowNSLF1G~}{zyRT_Na~9mnC_bf|k600$sl(mL z_aXagPF`lrP+)d1yvVPut_*$H$n}tUoZ6hDu1duVtZ+b{Y8!k4!Gt+1>82vbdr@bY z1Ph%mFf4##RIaf-?aU>W13c-U|AEm~$wY4{s4u;;>1$}G(B104WU8^PsU&O%P9EoB zw%Ke(UdSFACKI8}tf+JVP!sQ~D)XWCr(kP5EtJ>tzs8PmM`+&wVYo0LbmuJl18qftq;^}xVk@wcGYw%p;h+eI z_2m@_y+fRld@r|S-#Rd+*waGWQ63SyR^zJ1e0mjweGd>Uij)4Z+SU@W5|2#vz-p}7x=ygf>!`7}Rs()+vd)^8H{E5^5 zg@;@(Ro6`P|1tdU+WthnzqFZMci8_y+rNqUcWr;7#h==+0Fdh^nDiec`8)Jagz*c? ze?4ygH+}pL`%_8%1ydydy}*wq00aO literal 0 HcmV?d00001 diff --git a/openvidu-server/docker/openvidu-recording/firefox/create_image.sh b/openvidu-server/docker/openvidu-recording/firefox/create_image.sh new file mode 100755 index 00000000..beb53402 --- /dev/null +++ b/openvidu-server/docker/openvidu-recording/firefox/create_image.sh @@ -0,0 +1 @@ +docker build --rm -t openvidu/openvidu-recording:2.10.0-firefox . diff --git a/openvidu-server/docker/openvidu-recording/firefox/entrypoint.sh b/openvidu-server/docker/openvidu-recording/firefox/entrypoint.sh new file mode 100755 index 00000000..5732cfe7 --- /dev/null +++ b/openvidu-server/docker/openvidu-recording/firefox/entrypoint.sh @@ -0,0 +1,109 @@ +#!/bin/bash + +### Variables ### + +URL=${URL:-https://www.youtube.com/watch?v=JMuzlEQz3uo} +ONLY_VIDEO=${ONLY_VIDEO:-false} +RESOLUTION=${RESOLUTION:-1920x1080} +FRAMERATE=${FRAMERATE:-25} +WIDTH="$(cut -d'x' -f1 <<< $RESOLUTION)" +HEIGHT="$(cut -d'x' -f2 <<< $RESOLUTION)" +VIDEO_ID=${VIDEO_ID:-video} +VIDEO_NAME=${VIDEO_NAME:-video} +VIDEO_FORMAT=${VIDEO_FORMAT:-mp4} +RECORDING_JSON="${RECORDING_JSON}" + +export URL +export ONLY_VIDEO +export RESOLUTION +export FRAMERATE +export WIDTH +export HEIGHT +export VIDEO_ID +export VIDEO_NAME +export VIDEO_FORMAT +export RECORDING_JSON + +### Store Recording json data ### + +mkdir /recordings/$VIDEO_ID +chmod 777 /recordings/$VIDEO_ID +echo $RECORDING_JSON > /recordings/$VIDEO_ID/.recording.$VIDEO_ID + +### Get a free display identificator ### + +DISPLAY_NUM=99 +DONE="no" + +while [ "$DONE" == "no" ] +do + out=$(xdpyinfo -display :$DISPLAY_NUM 2>&1) + if [[ "$out" == name* ]] || [[ "$out" == Invalid* ]] + then + # Command succeeded; or failed with access error; display exists + (( DISPLAY_NUM+=1 )) + else + # Display doesn't exist + DONE="yes" + fi +done + +export DISPLAY_NUM + +echo "First available display -> :$DISPLAY_NUM" +echo "----------------------------------------" + +pulseaudio -D + +### Start Chrome in headless mode with xvfb, using the display num previously obtained ### + +touch xvfb.log +chmod 777 xvfb.log +xvfb-run --server-num=${DISPLAY_NUM} --server-args="-ac -screen 0 ${RESOLUTION}x24 -noreset" firefox --width $WIDTH --height $HEIGHT $URL &> xvfb.log & +touch stop +chmod 777 /recordings +sleep 5 + +### Start recording with ffmpeg ### + +if [[ "$ONLY_VIDEO" == true ]] + then + # Do not record audio + <./stop ffmpeg -y -f x11grab -draw_mouse 0 -framerate $FRAMERATE -video_size $RESOLUTION -i :$DISPLAY_NUM -c:v libx264 -preset ultrafast -crf 28 -refs 4 -qmin 4 -pix_fmt yuv420p -filter:v fps=$FRAMERATE "/recordings/$VIDEO_ID/$VIDEO_NAME.$VIDEO_FORMAT" + else + # Record audio ("-f alsa -i pulse [...] -c:a aac") + <./stop ffmpeg -y -f alsa -i pulse -f x11grab -draw_mouse 0 -framerate $FRAMERATE -video_size $RESOLUTION -i :$DISPLAY_NUM -c:a aac -c:v libx264 -preset ultrafast -crf 28 -refs 4 -qmin 4 -pix_fmt yuv420p -filter:v fps=$FRAMERATE "/recordings/$VIDEO_ID/$VIDEO_NAME.$VIDEO_FORMAT" +fi + +### Generate video report file ### +ffprobe -v quiet -print_format json -show_format -show_streams /recordings/$VIDEO_ID/$VIDEO_NAME.$VIDEO_FORMAT > /recordings/$VIDEO_ID/$VIDEO_ID.info + +### Update Recording json data ### + +TMP=$(mktemp /recordings/$VIDEO_ID/.$VIDEO_ID.XXXXXXXXXXXXXXXXXXXXXXX.json) +INFO=$(cat /recordings/$VIDEO_ID/$VIDEO_ID.info | jq '.') +HAS_AUDIO_AUX=$(echo $INFO | jq '.streams[] | select(.codec_type == "audio")') +if [ -z "$HAS_AUDIO_AUX" ]; then HAS_AUDIO=false; else HAS_AUDIO=true; fi +HAS_VIDEO_AUX=$(echo $INFO | jq '.streams[] | select(.codec_type == "video")') +if [ -z "$HAS_VIDEO_AUX" ]; then HAS_VIDEO=false; else HAS_VIDEO=true; fi +SIZE=$(echo $INFO | jq '.format.size | tonumber') +DURATION=$(echo $INFO | jq '.format.duration | tonumber') + +if [[ "$HAS_AUDIO" == false && "$HAS_VIDEO" == false ]] + then + STATUS="failed" + else + STATUS="stopped" +fi + +jq -c -r ".hasAudio=$HAS_AUDIO | .hasVideo=$HAS_VIDEO | .duration=$DURATION | .size=$SIZE | .status=\"$STATUS\"" "/recordings/$VIDEO_ID/.recording.$VIDEO_ID" > $TMP && mv $TMP /recordings/$VIDEO_ID/.recording.$VIDEO_ID + +### Generate video thumbnail ### + +MIDDLE_TIME=$(ffmpeg -i /recordings/$VIDEO_ID/$VIDEO_NAME.$VIDEO_FORMAT 2>&1 | grep Duration | awk '{print $2}' | tr -d , | awk -F ':' '{print ($3+$2*60+$1*3600)/2}') +THUMBNAIL_HEIGHT=$((480*$HEIGHT/$WIDTH)) +ffmpeg -ss $MIDDLE_TIME -i /recordings/$VIDEO_ID/$VIDEO_NAME.$VIDEO_FORMAT -vframes 1 -s 480x$THUMBNAIL_HEIGHT /recordings/$VIDEO_ID/$VIDEO_ID.jpg + +### Change permissions to all generated files ### + +sudo chmod -R 777 /recordings/$VIDEO_ID \ No newline at end of file