From ec39e680770f76da76d41c5ff814dd98ee76526b Mon Sep 17 00:00:00 2001 From: Leandro Moreira Date: Sun, 28 Jan 2024 21:02:26 -0300 Subject: [PATCH] uses srt live transmit --- Dockerfile-srt-live | 19 +++++++++++++++++++ docker-compose.yaml | 27 ++++++++++++++++++++++----- scripts/ffmpeg_mpegts_udp.sh | 6 ++++++ scripts/ffmpeg_srt_live_listener.sh | 7 ------- scripts/srt.sh | 4 ++++ 5 files changed, 51 insertions(+), 12 deletions(-) create mode 100644 Dockerfile-srt-live create mode 100755 scripts/ffmpeg_mpegts_udp.sh delete mode 100755 scripts/ffmpeg_srt_live_listener.sh create mode 100755 scripts/srt.sh diff --git a/Dockerfile-srt-live b/Dockerfile-srt-live new file mode 100644 index 0000000..0682e06 --- /dev/null +++ b/Dockerfile-srt-live @@ -0,0 +1,19 @@ +FROM ubuntu:20.04 AS builder + +ENV SRT_VERSION="v1.5.3" +ENV SRC_FOLDER="/opt/srt_lib" + +RUN apt-get clean && apt-get update && \ + DEBIAN_FRONTEND=noninteractive apt-get install -y \ + tclsh pkg-config cmake libssl-dev build-essential git \ + && apt-get clean + +RUN \ + mkdir -p "${SRC_FOLDER}" && \ + git clone --depth 1 --branch "${SRT_VERSION}" https://github.com/Haivision/srt && \ + cd srt && \ + ./configure --prefix=. $(configure) && \ + make && \ + make install +ENV PATH="${PATH}:/srt" +WORKDIR ${WD} \ No newline at end of file diff --git a/docker-compose.yaml b/docker-compose.yaml index 0d56f69..cd19edd 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -12,16 +12,18 @@ services: - "8081:8081" - "8081:8081/udp" - origin: # simulating an srt origin live transmission - image: jrottenberg/ffmpeg:4.4-alpine + srt: + build: + context: . + dockerfile: Dockerfile-srt-live entrypoint: sh - command: "/scripts/ffmpeg_srt_live_listener.sh" + command: "./scripts/srt.sh" volumes: - "./scripts:/scripts" environment: - SRT_LISTENING_PORT=40052 - - SRT_LISTENING_HOST=0.0.0.0 - - SRT_LISTENING_LATENCY_US=400000 + - SRT_UDP_TS_INPUT_HOST=0.0.0.0 + - SRT_UDP_TS_INPUT_PORT=1234 ports: - "40052:40052/udp" depends_on: @@ -29,3 +31,18 @@ services: links: - app + origin: # simulating an mpeg-ts upd origin live transmission + image: jrottenberg/ffmpeg:4.4-alpine + entrypoint: sh + command: "/scripts/ffmpeg_mpegts_udp.sh" + volumes: + - "./scripts:/scripts" + environment: + - SRT_INPUT_HOST=srt + - SRT_INPUT_PORT=1234 + - PKT_SIZE=1316 + depends_on: + - srt + links: + - srt + diff --git a/scripts/ffmpeg_mpegts_udp.sh b/scripts/ffmpeg_mpegts_udp.sh new file mode 100755 index 0000000..a601c4c --- /dev/null +++ b/scripts/ffmpeg_mpegts_udp.sh @@ -0,0 +1,6 @@ +ffmpeg -hide_banner -loglevel verbose \ + -re -f lavfi -i testsrc2=size=1280x720:rate=30,format=yuv420p \ + -f lavfi -i sine=frequency=1000:sample_rate=44100 \ + -c:v libx264 -preset veryfast -tune zerolatency -profile:v baseline \ + -b:v 1000k -bufsize 2000k -x264opts keyint=30:min-keyint=30:scenecut=-1 \ + -f mpegts "udp://${SRT_INPUT_HOST}:${SRT_INPUT_PORT}?pkt_size=${PKT_SIZE}" \ No newline at end of file diff --git a/scripts/ffmpeg_srt_live_listener.sh b/scripts/ffmpeg_srt_live_listener.sh deleted file mode 100755 index 8c7235c..0000000 --- a/scripts/ffmpeg_srt_live_listener.sh +++ /dev/null @@ -1,7 +0,0 @@ -ffmpeg -hide_banner -loglevel verbose \ - -re -f lavfi -i "testsrc2=size=1280x720:rate=30,format=yuv420p" \ - -f lavfi -i "sine=frequency=1000:sample_rate=44100" \ - -c:v libx264 -preset veryfast -tune zerolatency -profile:v baseline \ - -b:v 1000k -bufsize 2000k -x264opts keyint=30:min-keyint=30:scenecut=-1 \ - -f mpegts "srt://${SRT_LISTENING_HOST}:${SRT_LISTENING_PORT}?mode=listener&latency=${SRT_LISTENING_LATENCY_US}&smoother=live&transtype=live" - diff --git a/scripts/srt.sh b/scripts/srt.sh new file mode 100755 index 0000000..ec15130 --- /dev/null +++ b/scripts/srt.sh @@ -0,0 +1,4 @@ +# ref https://github.com/Haivision/srt/blob/master/docs/apps/srt-live-transmit.md +srt-live-transmit \ + udp://${SRT_UDP_TS_INPUT_HOST}:${SRT_UDP_TS_INPUT_PORT} \ + srt://:${SRT_LISTENING_PORT}?congestion=live -v \ No newline at end of file