diff --git a/openvidu-server/docker/openvidu-recording/scripts/composed_quick_start.sh b/openvidu-server/docker/openvidu-recording/scripts/composed_quick_start.sh index 836e4682..91b5c65f 100644 --- a/openvidu-server/docker/openvidu-recording/scripts/composed_quick_start.sh +++ b/openvidu-server/docker/openvidu-recording/scripts/composed_quick_start.sh @@ -14,7 +14,8 @@ fi export COMPOSED_QUICK_START_ACTION=$1 if [[ -z "${COMPOSED_QUICK_START_ACTION}" ]]; then - { + { + ### Variables ### export RESOLUTION=${RESOLUTION:-1920x1080} export URL=${URL:-https://www.youtube.com/watch?v=JMuzlEQz3uo} @@ -33,7 +34,7 @@ if [[ -z "${COMPOSED_QUICK_START_ACTION}" ]]; then chmod 777 /recordings until pids=$(pidof Xvfb) - do + do sleep 0.1 done @@ -41,9 +42,9 @@ if [[ -z "${COMPOSED_QUICK_START_ACTION}" ]]; then XVFB_ARGS=$(ps -eo args | grep [X]vfb) DISPLAY_NUM=$(echo $XVFB_ARGS | sed 's/Xvfb :\([0-9]\+\).*/\1/') + x11vnc -noxrecord -noxfixes -noxdamage -forever -display :$DISPLAY_NUM & echo "Display in use -> :$DISPLAY_NUM" echo "----------------------------------------" - # Save Global Environment variables echo "export DISPLAY_NUM=$DISPLAY_NUM" > /tmp/display_num @@ -55,7 +56,7 @@ elif [[ "${COMPOSED_QUICK_START_ACTION}" == "--start-recording" ]]; then { export $(cat /tmp/display_num | xargs) rm -f /tmp/global_environment_vars - + # Remove possible stop file from previous recordings [ -e stop ] && rm stop # Create stop file @@ -71,20 +72,20 @@ elif [[ "${COMPOSED_QUICK_START_ACTION}" == "--start-recording" ]]; then export VIDEO_NAME=${VIDEO_NAME:-video} export VIDEO_FORMAT=${VIDEO_FORMAT:-mp4} export RECORDING_JSON="${RECORDING_JSON}" - + echo "==== Loaded Environment Variables - Start Recording =====" env echo "=========================================================" - + ### Store Recording json data ### mkdir /recordings/$VIDEO_ID echo $RECORDING_JSON > /recordings/$VIDEO_ID/.recording.$VIDEO_ID chmod 777 -R /recordings/$VIDEO_ID - + # Save Global Environment variables env > /tmp/global_environment_vars - + ### Start recording with ffmpeg ### if [[ "$ONLY_VIDEO" == true ]] @@ -95,7 +96,7 @@ elif [[ "${COMPOSED_QUICK_START_ACTION}" == "--start-recording" ]]; then # 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 - + } 2>&1 | tee -a /tmp/container-start-recording.log elif [[ "${COMPOSED_QUICK_START_ACTION}" == "--stop-recording" ]]; then @@ -103,23 +104,23 @@ elif [[ "${COMPOSED_QUICK_START_ACTION}" == "--stop-recording" ]]; then { # Load global variables saved before export $(cat /tmp/global_environment_vars | xargs) - + if [[ -f /recordings/$VIDEO_ID/$VIDEO_ID.jpg ]]; then echo "Video already recorded" exit 0 fi - + # Stop and wait ffmpeg process to be stopped FFMPEG_PID=$(pgrep ffmpeg) echo 'q' > stop && tail --pid=$FFMPEG_PID -f /dev/null - - + + ### 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 - + ffprobe -v quiet -print_format json -show_format -show_streams /recordings/$VIDEO_ID/$VIDEO_NAME.$VIDEO_FORMAT > /recordings/$VIDEO_ID/$VIDEO_ID.info + ### Change permissions to all generated files ### sudo chmod -R 777 /recordings/$VIDEO_ID - + ### Update Recording json data ### TMP=$(mktemp /recordings/$VIDEO_ID/.$VIDEO_ID.XXXXXXXXXXXXXXXXXXXXXXX.json) INFO=$(cat /recordings/$VIDEO_ID/$VIDEO_ID.info | jq '.') @@ -139,18 +140,18 @@ elif [[ "${COMPOSED_QUICK_START_ACTION}" == "--stop-recording" ]]; then 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 rm -f $TMP - + ### Change permissions to metadata file ### sudo chmod 777 /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 &> /tmp/ffmpeg-thumbnail.log - + echo "Recording finished /recordings/$VIDEO_ID/$VIDEO_NAME.$VIDEO_FORMAT" - + } 2>&1 | tee -a /tmp/container-stop-recording.log fi diff --git a/openvidu-server/docker/openvidu-recording/ubuntu-16-04.Dockerfile b/openvidu-server/docker/openvidu-recording/ubuntu-16-04.Dockerfile index bee21093..830766fc 100644 --- a/openvidu-server/docker/openvidu-recording/ubuntu-16-04.Dockerfile +++ b/openvidu-server/docker/openvidu-recording/ubuntu-16-04.Dockerfile @@ -19,6 +19,9 @@ RUN apt-get install -y ffmpeg pulseaudio xvfb # Install jq for managing JSON RUN apt-get install -y jq +RUN apt-get install x11vnc + + # Clean RUN apt-get autoclean