From da493fd12b78efcbe66a662e7ec8ab09858291a1 Mon Sep 17 00:00:00 2001 From: pabloFuente Date: Wed, 14 Mar 2018 11:49:40 +0100 Subject: [PATCH] openvidu-server Docker images updated --- .../docker/openvidu-recording/Dockerfile | 3 + .../docker/openvidu-recording/entrypoint.sh | 91 ++++++++++++------- .../docker/openvidu-server-kms/Dockerfile | 10 +- .../openvidu-server-kms/supervisord.conf | 4 +- .../docker/openvidu-server/Dockerfile | 6 +- .../docker/openvidu-server/supervisord.conf | 2 +- 6 files changed, 75 insertions(+), 41 deletions(-) diff --git a/openvidu-server/docker/openvidu-recording/Dockerfile b/openvidu-server/docker/openvidu-recording/Dockerfile index e82498d7..3977c5c0 100644 --- a/openvidu-server/docker/openvidu-recording/Dockerfile +++ b/openvidu-server/docker/openvidu-recording/Dockerfile @@ -13,6 +13,9 @@ RUN add-apt-repository ppa:mc3man/xerus-media 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 diff --git a/openvidu-server/docker/openvidu-recording/entrypoint.sh b/openvidu-server/docker/openvidu-recording/entrypoint.sh index cc50b432..4aeca430 100755 --- a/openvidu-server/docker/openvidu-recording/entrypoint.sh +++ b/openvidu-server/docker/openvidu-recording/entrypoint.sh @@ -15,11 +15,16 @@ VIDEO_SIZE="$RESOLUTION" ARRAY=(${VIDEO_SIZE//x/ }) VIDEO_NAME="${VIDEO_NAME:-video}" VIDEO_FORMAT="${VIDEO_FORMAT:-mkv}" +RECORDING_JSON="'${RECORDING_JSON}'" -echo "----------------------------------------" -echo "Recording URL -> $URL" -echo "----------------------------------------" +### Store Recording json data ### + +if [[ $CURRENT_UID != $USER_ID ]]; then + su myuser -c "echo ${RECORDING_JSON} > /recordings/.recording.${VIDEO_NAME}" +else + echo ${RECORDING_JSON} > /recordings/.recording.${VIDEO_NAME} +fi ### Get a free display identificator ### @@ -44,7 +49,6 @@ echo "First available display -> :$DISPLAY_NUM" echo "----------------------------------------" - ### Start pulseaudio ### if [[ $CURRENT_UID != $USER_ID ]]; then @@ -54,51 +58,74 @@ else fi - ### Start Chrome in headless mode with xvfb, using the display num previously obtained ### touch xvfb.log chmod 777 xvfb.log if [[ $CURRENT_UID != $USER_ID ]]; then - su myuser -c "xvfb-run --server-num=${DISPLAY_NUM} --server-args='-ac -screen 0 ${RESOLUTION}x24 -noreset' google-chrome -no-sandbox -disable-infobars -window-size=${ARRAY[0]},${ARRAY[1]} -no-first-run -ignore-certificate-errors --kiosk $URL &> xvfb.log &" + su myuser -c "xvfb-run --server-num=${DISPLAY_NUM} --server-args='-ac -screen 0 ${RESOLUTION}x24 -noreset' google-chrome -no-sandbox -test-type -disable-infobars -window-size=${ARRAY[0]},${ARRAY[1]} -no-first-run -ignore-certificate-errors --kiosk $URL &> xvfb.log &" else - xvfb-run --server-num=${DISPLAY_NUM} --server-args="-ac -screen 0 ${RESOLUTION}x24 -noreset" google-chrome -no-sandbox -disable-infobars -window-size=${ARRAY[0]},${ARRAY[1]} -no-first-run -ignore-certificate-errors --kiosk $URL &> xvfb.log & + xvfb-run --server-num=${DISPLAY_NUM} --server-args="-ac -screen 0 ${RESOLUTION}x24 -noreset" google-chrome -no-sandbox -test-type -disable-infobars -window-size=${ARRAY[0]},${ARRAY[1]} -no-first-run -ignore-certificate-errors --kiosk $URL &> xvfb.log & fi touch stop chmod 777 /recordings -sleep 3 - -#su myuser -c "<./stop ffmpeg -y -video_size $RESOLUTION -framerate $FRAMERATE -f x11grab -i :${DISPLAY_NUM} -f pulse -ac 2 -i default /recordings/${VIDEO_NAME}.${VIDEO_FORMAT}" -#su myuser -c "<./stop ffmpeg -f alsa -ac 2 -i pulse -async 1 -f x11grab -i :${DISPLAY_NUM} -framerate $FRAMERATE -s $RESOLUTION -acodec copy -vcodec libx264 -preset medium -y /recordings/${VIDEO_NAME}.mkv" - -#su myuser -c "<./stop ffmpeg -y -video_size $RESOLUTION -s $RESOLUTION -framerate $FRAMERATE -f x11grab -i :${DISPLAY_NUM} -f alsa -ac 2 -i pulse -async 1 -acodec copy -vcodec libx264 -preset medium -crf 0 -threads 0 -y /recordings/${VIDEO_NAME}.mkv" - -#su myuser -c "<./stop ffmpeg -y -f alsa -i pulse -video_size $RESOLUTION -f x11grab -i :${DISPLAY_NUM} -r 24 -c:a libmp3lame -b:a 32k -c:v libx264 -b:v 500k /recordings/${VIDEO_NAME}.mkv" - - - -### Avoiding file name collision (if 'video.mkv' exists, name the file 'video(1).mkv' and so on) ### - -VIDEO_NUMBER=0 -VIDEO_NUMBER_STR="" - -while [[ -e /recordings/${VIDEO_NAME}${VIDEO_NUMBER_STR}.mkv ]]; do - VIDEO_NUMBER=$((VIDEO_NUMBER+1)) - VIDEO_NUMBER_STR="(${VIDEO_NUMBER})"; -done - -VIDEO_NAME="${VIDEO_NAME}${VIDEO_NUMBER_STR}"; - +sleep 2 ### Start recording with ffmpeg ### if [[ $CURRENT_UID != $USER_ID ]]; then - su myuser -c "<./stop ffmpeg -y -f alsa -i pulse -f x11grab -framerate 25 -video_size $RESOLUTION -i :${DISPLAY_NUM} -c:a libfdk_aac -c:v libx264 -preset ultrafast -crf 28 -refs 4 -qmin 4 -pix_fmt yuv420p -filter:v fps=25 '/recordings/${VIDEO_NAME}.mkv'" + su myuser -c "<./stop ffmpeg -y -f alsa -i pulse -f x11grab -framerate 25 -video_size $RESOLUTION -i :${DISPLAY_NUM} -c:a libfdk_aac -c:v libx264 -preset ultrafast -crf 28 -refs 4 -qmin 4 -pix_fmt yuv420p -filter:v fps=25 '/recordings/${VIDEO_NAME}.${VIDEO_FORMAT}'" else - <./stop ffmpeg -y -f alsa -i pulse -f x11grab -framerate 25 -video_size $RESOLUTION -i :${DISPLAY_NUM} -c:a libfdk_aac -c:v libx264 -preset ultrafast -crf 28 -refs 4 -qmin 4 -pix_fmt yuv420p -filter:v fps=25 "/recordings/${VIDEO_NAME}.mkv" + <./stop ffmpeg -y -f alsa -i pulse -f x11grab -framerate 25 -video_size $RESOLUTION -i :${DISPLAY_NUM} -c:a libfdk_aac -c:v libx264 -preset ultrafast -crf 28 -refs 4 -qmin 4 -pix_fmt yuv420p -filter:v fps=25 "/recordings/${VIDEO_NAME}.${VIDEO_FORMAT}" +fi + + +### Generate video report file ### + +if [[ $CURRENT_UID != $USER_ID ]]; then + su myuser -c "ffprobe -v quiet -print_format json -show_format -show_streams /recordings/${VIDEO_NAME}.${VIDEO_FORMAT} > /recordings/${VIDEO_NAME}.info" +else + ffprobe -v quiet -print_format json -show_format -show_streams /recordings/${VIDEO_NAME}.${VIDEO_FORMAT} > /recordings/${VIDEO_NAME}.info +fi + + +### Update Recording json data ### + +if [[ $CURRENT_UID != $USER_ID ]]; then + + TMP=$(su myuser -c "mktemp /recordings/.${VIDEO_NAME}.XXXXXXXXXXXXXXXXXXXXXXX.if.json") + INFO=$(su myuser -c "cat /recordings/${VIDEO_NAME}.info | jq '.'") + HAS_AUDIO_AUX=$(su myuser -c "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=$(su myuser -c "echo '$INFO' | jq '.streams[] | select(.codec_type == \"video\")'") + if [ -z "$HAS_VIDEO_AUX" ]; then HAS_VIDEO=false; else HAS_VIDEO=true; fi + SIZE=$(su myuser -c "echo '$INFO' | jq '.format.size | tonumber'") + DURATION=$(su myuser -c "echo '$INFO' | jq '.format.duration | tonumber'") + STATUS="stopped" + + # su myuser -c "echo 'TMP=${TMP}, SIZE=${SIZE}, DURATION=${DURATION}, STATUS=${STATUS}, HAS_AUDIO=${HAS_AUDIO}, HAS_VIDEO=${HAS_VIDEO}' > /recordings/.${VIDEO_NAME}.if.vars" + + su myuser -c "jq -c -r \".hasAudio=${HAS_AUDIO} | .hasVideo=${HAS_VIDEO} | .duration=${DURATION} | .size=${SIZE} | .status=\\\"${STATUS}\\\"\" \"/recordings/.recording.${VIDEO_NAME}\" > ${TMP} && mv ${TMP} \"/recordings/.recording.${VIDEO_NAME}\"" + +else + + TMP=$(mktemp /recordings/.${VIDEO_NAME}.XXXXXXXXXXXXXXXXXXXXXXX.if.json) + INFO=$(cat /recordings/${VIDEO_NAME}.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') + STATUS="stopped" + + # echo "TMP=${TMP}, SIZE=${SIZE}, DURATION=${DURATION}, STATUS=${STATUS}, HAS_AUDIO=${HAS_AUDIO}, HAS_VIDEO=${HAS_VIDEO}" > /recordings/.${VIDEO_NAME}.if.vars + + jq -c -r ".hasAudio=${HAS_AUDIO} | .hasVideo=${HAS_VIDEO} | .duration=${DURATION} | .size=${SIZE} | .status=\"${STATUS}\"" "/recordings/.recording.${VIDEO_NAME}" > ${TMP} && mv ${TMP} "/recordings/.recording.${VIDEO_NAME}" + fi diff --git a/openvidu-server/docker/openvidu-server-kms/Dockerfile b/openvidu-server/docker/openvidu-server-kms/Dockerfile index 3a756bcb..a8bd4a07 100644 --- a/openvidu-server/docker/openvidu-server-kms/Dockerfile +++ b/openvidu-server/docker/openvidu-server-kms/Dockerfile @@ -14,12 +14,14 @@ COPY kms.sh /kms.sh # Install Java RUN apt-get update && apt-get install -y openjdk-8-jdk && rm -rf /var/lib/apt/lists/* -# Configure Supervisor -RUN mkdir -p /var/log/supervisor -COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf +# Install supervisor RUN apt-get update && apt-get install -y supervisor && rm -rf /var/lib/apt/lists/* -# Install OpenVidu Server +# Configure supervisor +RUN mkdir -p /var/log/supervisor +COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf + +# Copy OpenVidu Server COPY openvidu-server.jar openvidu-server.jar EXPOSE 8888 diff --git a/openvidu-server/docker/openvidu-server-kms/supervisord.conf b/openvidu-server/docker/openvidu-server-kms/supervisord.conf index 9e6e62b6..c36fc6db 100644 --- a/openvidu-server/docker/openvidu-server-kms/supervisord.conf +++ b/openvidu-server/docker/openvidu-server-kms/supervisord.conf @@ -9,5 +9,5 @@ command=/bin/bash /kms.sh redirect_stderr=true [program:openvidu-server] -command=/bin/bash -c "java -jar /openvidu-server.jar" -redirect_stderr=true \ No newline at end of file +command=/bin/bash -c "java -jar -Dopenvidu.publicurl=docker-local /openvidu-server.jar" +redirect_stderr=true diff --git a/openvidu-server/docker/openvidu-server/Dockerfile b/openvidu-server/docker/openvidu-server/Dockerfile index 1c07a8f8..64b8b59f 100644 --- a/openvidu-server/docker/openvidu-server/Dockerfile +++ b/openvidu-server/docker/openvidu-server/Dockerfile @@ -4,10 +4,12 @@ MAINTAINER openvidu@gmail.com # Install Java RUN apt-get update && apt-get install -y openjdk-8-jdk && rm -rf /var/lib/apt/lists/* -# Configure Supervisor +# Install supervisor +RUN apt-get update && apt-get install -y supervisor && rm -rf /var/lib/apt/lists/* + +# Configure supervisor RUN mkdir -p /var/log/supervisor COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf -RUN apt-get update && apt-get install -y supervisor && rm -rf /var/lib/apt/lists/* # Copy OpenVidu Server COPY openvidu-server.jar / diff --git a/openvidu-server/docker/openvidu-server/supervisord.conf b/openvidu-server/docker/openvidu-server/supervisord.conf index 37dbf9fe..2d8508b2 100644 --- a/openvidu-server/docker/openvidu-server/supervisord.conf +++ b/openvidu-server/docker/openvidu-server/supervisord.conf @@ -5,5 +5,5 @@ pidfile=/var/run/supervisord.pid; loglevel=debug [program:openvidu-server] -command=/bin/bash -c "java -jar /openvidu-server.jar" +command=/bin/bash -c "java -jar -Dopenvidu.publicurl=docker-local /openvidu-server.jar" redirect_stderr=true