openvidu-server Docker images updated

pull/30/merge
pabloFuente 2018-03-14 11:49:40 +01:00
parent 4c11c08460
commit da493fd12b
6 changed files with 75 additions and 41 deletions

View File

@ -13,6 +13,9 @@ RUN add-apt-repository ppa:mc3man/xerus-media
RUN apt-get update RUN apt-get update
RUN apt-get install -y ffmpeg pulseaudio xvfb RUN apt-get install -y ffmpeg pulseaudio xvfb
# Install jq for managing JSON
RUN apt-get install -y jq
# Clean # Clean
RUN apt-get autoclean RUN apt-get autoclean

View File

@ -15,11 +15,16 @@ VIDEO_SIZE="$RESOLUTION"
ARRAY=(${VIDEO_SIZE//x/ }) ARRAY=(${VIDEO_SIZE//x/ })
VIDEO_NAME="${VIDEO_NAME:-video}" VIDEO_NAME="${VIDEO_NAME:-video}"
VIDEO_FORMAT="${VIDEO_FORMAT:-mkv}" 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 ### ### Get a free display identificator ###
@ -44,7 +49,6 @@ echo "First available display -> :$DISPLAY_NUM"
echo "----------------------------------------" echo "----------------------------------------"
### Start pulseaudio ### ### Start pulseaudio ###
if [[ $CURRENT_UID != $USER_ID ]]; then if [[ $CURRENT_UID != $USER_ID ]]; then
@ -54,51 +58,74 @@ else
fi fi
### Start Chrome in headless mode with xvfb, using the display num previously obtained ### ### Start Chrome in headless mode with xvfb, using the display num previously obtained ###
touch xvfb.log touch xvfb.log
chmod 777 xvfb.log chmod 777 xvfb.log
if [[ $CURRENT_UID != $USER_ID ]]; then 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 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 fi
touch stop touch stop
chmod 777 /recordings chmod 777 /recordings
sleep 3 sleep 2
#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}";
### Start recording with ffmpeg ### ### Start recording with ffmpeg ###
if [[ $CURRENT_UID != $USER_ID ]]; then 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 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 fi

View File

@ -14,12 +14,14 @@ COPY kms.sh /kms.sh
# Install Java # Install Java
RUN apt-get update && apt-get install -y openjdk-8-jdk && rm -rf /var/lib/apt/lists/* RUN apt-get update && apt-get install -y openjdk-8-jdk && rm -rf /var/lib/apt/lists/*
# Configure Supervisor # Install 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/* 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 COPY openvidu-server.jar openvidu-server.jar
EXPOSE 8888 EXPOSE 8888

View File

@ -9,5 +9,5 @@ command=/bin/bash /kms.sh
redirect_stderr=true redirect_stderr=true
[program:openvidu-server] [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 redirect_stderr=true

View File

@ -4,10 +4,12 @@ MAINTAINER openvidu@gmail.com
# Install Java # Install Java
RUN apt-get update && apt-get install -y openjdk-8-jdk && rm -rf /var/lib/apt/lists/* 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 RUN mkdir -p /var/log/supervisor
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf 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
COPY openvidu-server.jar / COPY openvidu-server.jar /

View File

@ -5,5 +5,5 @@ pidfile=/var/run/supervisord.pid;
loglevel=debug loglevel=debug
[program:openvidu-server] [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 redirect_stderr=true