diff --git a/openvidu-server/docker/openvidu-recording/Dockerfile b/openvidu-server/docker/openvidu-recording/Dockerfile index ef433bc3..e469c8b6 100644 --- a/openvidu-server/docker/openvidu-recording/Dockerfile +++ b/openvidu-server/docker/openvidu-recording/Dockerfile @@ -23,5 +23,6 @@ COPY entrypoint.sh /entrypoint.sh RUN ["chmod", "+x", "/entrypoint.sh"] RUN mkdir /recordings +RUN chmod 777 /recordings ENTRYPOINT /entrypoint.sh diff --git a/openvidu-server/docker/openvidu-recording/entrypoint.sh b/openvidu-server/docker/openvidu-recording/entrypoint.sh index 2aefdb3c..b6010102 100755 --- a/openvidu-server/docker/openvidu-recording/entrypoint.sh +++ b/openvidu-server/docker/openvidu-recording/entrypoint.sh @@ -10,7 +10,7 @@ fi URL=${URL:-https://www.youtube.com/watch?v=JMuzlEQz3uo} RESOLUTION=${RESOLUTION:-1920x1080} -FRAMERATE=${FRAMERATE:-24} +FRAMERATE=${FRAMERATE:-25} WIDTH="$(cut -d'x' -f1 <<< $RESOLUTION)" HEIGHT="$(cut -d'x' -f2 <<< $RESOLUTION)" VIDEO_ID=${VIDEO_ID:-video} @@ -31,7 +31,9 @@ export RECORDING_JSON ### Store Recording json data ### function1() { - echo $RECORDING_JSON > /recordings/.recording.$VIDEO_ID + mkdir /recordings/$VIDEO_ID + chmod 777 /recordings/$VIDEO_ID + echo $RECORDING_JSON > /recordings/$VIDEO_ID/.recording.$VIDEO_ID } export -f function1 if [[ $CURRENT_UID != $USER_ID ]]; then @@ -83,7 +85,7 @@ touch xvfb.log chmod 777 xvfb.log function3() { - xvfb-run --server-num=${DISPLAY_NUM} --server-args="-screen 0 ${RESOLUTION}x24 -ac" google-chrome -start-maximized -no-sandbox -test-type -disable-infobars -window-size=$WIDTH,$HEIGHT --window-position=0,0 -no-first-run -ignore-certificate-errors --autoplay-policy=no-user-gesture-required --kiosk $URL &> xvfb.log & + xvfb-run --server-num=${DISPLAY_NUM} --server-args="-ac -screen 0 ${RESOLUTION}x24 -noreset" google-chrome --start-maximized --no-sandbox --test-type --disable-infobars --window-size=$WIDTH,$HEIGHT --window-position=0,0 --no-first-run --ignore-certificate-errors --autoplay-policy=no-user-gesture-required --kiosk $URL &> xvfb.log & } export -f function3 if [[ $CURRENT_UID != $USER_ID ]]; then @@ -101,7 +103,7 @@ sleep 2 ### Start recording with ffmpeg ### function4() { - <./stop ffmpeg -y -f alsa -i pulse -f x11grab -draw_mouse 0 -framerate 25 -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=25 "/recordings/$VIDEO_NAME.$VIDEO_FORMAT" + <./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" } export -f function4 if [[ $CURRENT_UID != $USER_ID ]]; then @@ -114,7 +116,7 @@ fi ### Generate video report file ### function5() { - ffprobe -v quiet -print_format json -show_format -show_streams /recordings/$VIDEO_NAME.$VIDEO_FORMAT > /recordings/$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 } export -f function5 if [[ $CURRENT_UID != $USER_ID ]]; then @@ -127,8 +129,8 @@ fi ### Update Recording json data ### function6() { - TMP=$(mktemp /recordings/.$VIDEO_ID.XXXXXXXXXXXXXXXXXXXXXXX.json) - INFO=$(cat /recordings/$VIDEO_ID.info | jq '.') + 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")') @@ -136,7 +138,7 @@ function6() { SIZE=$(echo $INFO | jq '.format.size | tonumber') DURATION=$(echo $INFO | jq '.format.duration | tonumber') STATUS="stopped" - jq -c -r ".hasAudio=$HAS_AUDIO | .hasVideo=$HAS_VIDEO | .duration=$DURATION | .size=$SIZE | .status=\"$STATUS\"" "/recordings/.recording.$VIDEO_ID" > $TMP && mv $TMP /recordings/.recording.$VIDEO_ID + 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 } export -f function6 if [[ $CURRENT_UID != $USER_ID ]]; then @@ -149,9 +151,9 @@ fi ### Generate video thumbnail ### function7() { - MIDDLE_TIME=$(ffmpeg -i /recordings/$VIDEO_NAME.$VIDEO_FORMAT 2>&1 | grep Duration | awk '{print $2}' | tr -d , | awk -F ':' '{print ($3+$2*60+$1*3600)/2}') + 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_NAME.$VIDEO_FORMAT -vframes 1 -s 480x$THUMBNAIL_HEIGHT /recordings/$VIDEO_ID.jpg + ffmpeg -ss $MIDDLE_TIME -i /recordings/$VIDEO_ID/$VIDEO_NAME.$VIDEO_FORMAT -vframes 1 -s 480x$THUMBNAIL_HEIGHT /recordings/$VIDEO_ID/$VIDEO_ID.jpg } export -f function7 if [[ $CURRENT_UID != $USER_ID ]]; then diff --git a/openvidu-server/src/main/resources/application.properties b/openvidu-server/src/main/resources/application.properties index 84168b38..b176befe 100644 --- a/openvidu-server/src/main/resources/application.properties +++ b/openvidu-server/src/main/resources/application.properties @@ -1,6 +1,6 @@ server.address: 0.0.0.0 server.ssl.enabled: true -openvidu.recording.version: 2.7.0 +openvidu.recording.version: 2.8.0