implement the Dockerized deployment bundle
This commit is contained in:
17
dockerized/docker/mediamtx/Dockerfile
Normal file
17
dockerized/docker/mediamtx/Dockerfile
Normal file
@@ -0,0 +1,17 @@
|
||||
FROM bluenviron/mediamtx:latest-ffmpeg
|
||||
|
||||
USER root
|
||||
|
||||
RUN (apk add --no-cache curl gettext >/dev/null 2>&1) \
|
||||
|| (apt-get update \
|
||||
&& apt-get install -y --no-install-recommends ca-certificates curl gettext-base \
|
||||
&& rm -rf /var/lib/apt/lists/*)
|
||||
|
||||
COPY docker/mediamtx/entrypoint.sh /usr/local/bin/nyone-mediamtx-entrypoint
|
||||
COPY docker/mediamtx/mediamtx.yml.template /etc/mediamtx/mediamtx.yml.template
|
||||
|
||||
RUN chmod +x /usr/local/bin/nyone-mediamtx-entrypoint \
|
||||
&& mkdir -p /config /var/www/html/storage/app/private/recordings
|
||||
|
||||
ENTRYPOINT ["nyone-mediamtx-entrypoint"]
|
||||
|
||||
35
dockerized/docker/mediamtx/entrypoint.sh
Normal file
35
dockerized/docker/mediamtx/entrypoint.sh
Normal file
@@ -0,0 +1,35 @@
|
||||
#!/usr/bin/env sh
|
||||
set -eu
|
||||
|
||||
fail() {
|
||||
echo "nyone-mediamtx-entrypoint: $*" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
if [ -z "${MEDIAMTX_SHARED_SECRET:-}" ] || [ "${MEDIAMTX_SHARED_SECRET#change-me}" != "$MEDIAMTX_SHARED_SECRET" ]; then
|
||||
fail "MEDIAMTX_SHARED_SECRET is required. Run dockerized/scripts/deploy.sh or set it in dockerized/.env."
|
||||
fi
|
||||
|
||||
: "${APP_URL:?APP_URL is required.}"
|
||||
: "${HLS_PUBLIC_URL:?HLS_PUBLIC_URL is required.}"
|
||||
: "${RTMP_INTERNAL_PORT:=19935}"
|
||||
: "${HLS_INTERNAL_PORT:=19988}"
|
||||
|
||||
mkdir -p /config /var/www/html/storage/app/private/recordings
|
||||
|
||||
export APP_URL HLS_PUBLIC_URL MEDIAMTX_SHARED_SECRET RTMP_INTERNAL_PORT HLS_INTERNAL_PORT
|
||||
|
||||
envsubst '${APP_URL} ${HLS_PUBLIC_URL} ${MEDIAMTX_SHARED_SECRET} ${RTMP_INTERNAL_PORT} ${HLS_INTERNAL_PORT}' \
|
||||
< /etc/mediamtx/mediamtx.yml.template \
|
||||
> /config/mediamtx.yml
|
||||
|
||||
if command -v mediamtx >/dev/null 2>&1; then
|
||||
exec mediamtx /config/mediamtx.yml
|
||||
fi
|
||||
|
||||
if [ -x /mediamtx ]; then
|
||||
exec /mediamtx /config/mediamtx.yml
|
||||
fi
|
||||
|
||||
fail "MediaMTX binary was not found in the base image."
|
||||
|
||||
35
dockerized/docker/mediamtx/mediamtx.yml.template
Normal file
35
dockerized/docker/mediamtx/mediamtx.yml.template
Normal file
@@ -0,0 +1,35 @@
|
||||
authMethod: http
|
||||
authHTTPAddress: http://app/internal/mediamtx/auth?secret=${MEDIAMTX_SHARED_SECRET}
|
||||
authHTTPExclude:
|
||||
- action: read
|
||||
- action: playback
|
||||
- action: api
|
||||
- action: metrics
|
||||
- action: pprof
|
||||
|
||||
api: yes
|
||||
apiAddress: :9997
|
||||
|
||||
rtmp: yes
|
||||
rtmpAddress: :${RTMP_INTERNAL_PORT}
|
||||
|
||||
hls: yes
|
||||
hlsAddress: :${HLS_INTERNAL_PORT}
|
||||
hlsVariant: mpegts
|
||||
hlsAllowOrigins:
|
||||
- ${APP_URL}
|
||||
- ${HLS_PUBLIC_URL}
|
||||
|
||||
pathDefaults:
|
||||
record: yes
|
||||
recordPath: /var/www/html/storage/app/private/recordings/%path/%Y-%m-%d_%H-%M-%S-%f
|
||||
|
||||
runOnReady: curl -fsS -X POST "http://app/internal/mediamtx/ready?secret=${MEDIAMTX_SHARED_SECRET}" --data-urlencode "path=$MTX_PATH" --data-urlencode "source_type=$MTX_SOURCE_TYPE" --data-urlencode "source_id=$MTX_SOURCE_ID"
|
||||
runOnReadyRestart: no
|
||||
runOnNotReady: curl -fsS -X POST "http://app/internal/mediamtx/not-ready?secret=${MEDIAMTX_SHARED_SECRET}" --data-urlencode "path=$MTX_PATH" --data-urlencode "source_type=$MTX_SOURCE_TYPE" --data-urlencode "source_id=$MTX_SOURCE_ID"
|
||||
runOnRecordSegmentComplete: curl -fsS -X POST "http://app/internal/mediamtx/recording-complete?secret=${MEDIAMTX_SHARED_SECRET}" --data-urlencode "path=$MTX_PATH" --data-urlencode "segment_path=$MTX_SEGMENT_PATH" --data-urlencode "duration=$MTX_SEGMENT_DURATION"
|
||||
|
||||
paths:
|
||||
all_others:
|
||||
source: publisher
|
||||
|
||||
Reference in New Issue
Block a user