Sign inSign up

rubenc2/gateway

By rubenc2

•Updated 3 days ago

Gateway 1.1.1: File/HLS/bars to multicast, ST2022-7 or SRT; CBR and operator monitoring.

Image
Networking
1

10K+

rubenc2/gateway repository overview

⁠Gateway

Gateway 1.1.1 is a containerized File/HLS/test-signal media gateway with multicast, ST 2022-7, and SRT output. It includes an HTTPS operator UI, CBR normalization, CPU/input/output status, bitrate and connection charts, live logs, and recovery supervision. Application page names use Gateway; InterTech logos and scrolling test-pattern artwork are retained.

⁠Release

  • Image: rubenc2/gateway:1.1.1.
  • Platforms: linux/amd64 and linux/arm64.
  • Input-save feedback patch, published and verified for both architectures.
  • Pull 1.1.1 explicitly; latest remains pinned to 1.1.0.
  • Confirmed input changes show a nonblocking success notice; the dropdown only previews options until Set File/HLS as Input is selected.
  • All four original bundled HLS URLs are retained.
  • Fresh defaults: Service Type Digital_TV; Service Name 5G-Broadcast.
  • On-Air: red blinking LED. Idle: steady green. CPU/SRT indicators retain their independent healthy/warning/error colors.

⁠Supported Inputs and Outputs

Inputs:

  • MPEG-TS files
  • HLS URLs, with playlist and sample-media reachability checks
  • Built-in SMPTE HD bars with scrolling InterTech text and generated stereo audio

Outputs:

  • Single-stream multicast
  • ST 2022-7 redundant multicast
  • SRT output through srt-live-transmit, Caller or Listener, without encryption

SRT is an output, not an input, in 1.1.1. GPU encoding, SRT input, RIST, and RTMP are not included. GPAC/ATSC 3.0 development is maintained separately in the ROUTEWAY repository.

⁠Muxrate, CBR, and CBR-Lock

Muxrate sets the target bitrate of the final MPEG transport stream. It includes video, audio, transport overhead, and stuffing/null packets. It applies in all three modes below. Network headers add overhead beyond this TS bitrate; ST 2022-7 also sends a copy on each output path.

ModeWhat Gateway doesWhen to use it
FollowPreserves encoded media through stream copy/remux where supported, with a source-bitrate check at StartThe input already fits the configured muxrate
CBRRe-encodes video with libx264 and audio with AAC at a controlled output bitrateYou need to reduce or normalize the input bitrate
CBR-lockAdds highest-playable-HLS-rendition selection and fixed output dimensions to CBRDownstream equipment needs stable output resolution

In CBR modes, the target video bitrate is muxrate minus 1.3 Mb/s, with AAC audio at 192 kb/s. The remaining budget accommodates audio and transport overhead. At a muxrate of 6 Mb/s, the video target is 4.7 Mb/s. CBR may transcode a higher-bitrate source into a smaller output; the operator controls the quality tradeoff through muxrate. Media bitrate can still fluctuate over short measurement intervals even when the final TS muxrate is constant.

CBR-lock is available for HLS. Gateway selects the highest playable rendition with muxed audio and fixes the output dimensions to that rendition. If the selected source later changes dimensions, scaling/padding preserves the output geometry. This does not guarantee automatic switching among HLS renditions. The option is hidden for File and built-in bars.

⁠Run With Docker Compose

For multicast deployments, run on Linux with host networking. The existing local Compose file with port mapping can be used for UI checks on Docker Desktop; physical multicast/interface behavior has not been validated on macOS.

services:
  gateway:
    image: rubenc2/gateway:1.1.1
    container_name: gateway
    network_mode: host
    restart: unless-stopped
    environment:
      IPADDRESS: "<host-ip>"
      SERVERNAME: ""
      APP_USERNAME: "admin"
      APP_PASSWORD: "<change-me>"
      CPU_STATUS_GREEN_MAX: "65.0"
      CPU_STATUS_ORANGE_MAX: "85.0"
      CPU_STATUS_EMA_ALPHA: "0.35"
      GATEWAY_LOG_LEVEL: "INFO"
      GATEWAY_THUMBNAIL_FPS: "1.0"
      SENTINEL_INTERVAL_RUNNING: "5"
      SENTINEL_INTERVAL_IDLE: "10"
      SENTINEL_STATUS_LOG_INTERVAL: "60"
    volumes:
      - gateway_uploads:/var/www/html/uploads
      - gateway_hls:/var/www/html/hls
      - gateway_output:/var/www/html/output
      - gateway_state:/var/www/html/state
      - gateway_logs:/home/appuser/logs

volumes:
  gateway_uploads:
  gateway_hls:
  gateway_output:
  gateway_state:
  gateway_logs:

Set your host address and credentials, then run:

docker compose pull
docker compose up -d

Open https://<host-ip>. The container generates a self-signed certificate and redirects HTTP to HTTPS. If SERVERNAME is empty, it uses IPADDRESS.

The volumes above preserve uploads, generated HLS/output files, input state, and logs. The current settings.txt file and HLS URL catalog are not covered by these named volumes; retain copies before recreating an existing container. No new configuration migration or persistence behavior was introduced in this release.

⁠Worked Examples

Follow: an already encoded input that fits a 6 Mb/s mux can remain stream-copy. At Start, Gateway checks that it fits with headroom; it does not silently clip it.

CBR: with a 6 Mb/s mux, the video target is 4.7 Mb/s and audio is AAC at 192 kb/s. Higher-rate input can be transcoded down. A fixed final TS rate does not mean every short-window media-rate sample is identical.

SRT Listener output: set Listener, port 9000, latency 200 ms, an active local interface, and leave bandwidth blank initially. A remote SRT receiver connects as Caller to the Gateway host. Listener is still sending media, not ingesting it.

SRT Caller output: set Caller, the receiver host and port, latency, and local interface. The receiver listens. Negotiated latency can exceed the configured value if the peer requests more. Memory buffers for high rates are separate.

Monitoring: a card reading 3 loss reports and a current chart rate of 0 packets/s is valid: three occurred earlier and none in the latest interval. Hover shows Run totals. Recovery attempts are sender retransmissions, not a receiver-confirmed recovered count. Stop clears the Run; reconnect preserves it.

⁠Compatibility And Operations

The UI is available at https://<host-ip>. Override bundled development credentials on shared/production systems. The certificate is self-signed; no SSH service is exposed inside the container. Host networking on Linux is the intended media environment. macOS/Docker Desktop mapped-port UI checks do not establish physical multicast/interface behavior.

API paths, configuration keys, volume names, service IDs, directories, and legacy color-bar aliases are preserved. The visible built-in input is now Gateway Color Bars; its scrolling InterTech branding and encoding are unchanged. New defaults do not overwrite explicit values in a retained settings file.

File looping prepares a disposable indexed copy without re-encoding. Allow free space for approximately the source size plus the larger of 64 MiB or 10%; Stop cleans the copy. Preparation is limited to 90 seconds. Preview-only AAC conversion never changes transmitted AC-3 audio; the compact notice explains its scope.

See the illustrated operator guide⁠ for full SRT examples, CBR math, diagnostic interpretation, and settings/catalog backup and restore commands. Avoid recreating an existing container without preserving its settings.txt and HLS.txt; those files are outside the default named volumes.

⁠Documentation

See the README for the project's existing license declaration.

This patch leaves the 1.1.0 media pipeline unchanged. Executed checks and publication receipts are recorded in the 1.1.1 review and validation receipt⁠.

Tag summary

Content type

Image

Digest

sha256:2a576a2a5…

Size

422.7 MB

Last updated

6 days ago

docker pull rubenc2/gateway