Skip to content

Commit

Permalink
Also build the moq-pub image in this repo. (kixelated#116)
Browse files Browse the repository at this point in the history
  • Loading branch information
kixelated authored Nov 3, 2023
1 parent ddfe796 commit ea701bc
Show file tree
Hide file tree
Showing 9 changed files with 93 additions and 24 deletions.
1 change: 1 addition & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
target
dev
*.mp4
13 changes: 12 additions & 1 deletion .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@ on:

env:
REGISTRY: docker.io
IMAGE: ${{ github.repository }}
IMAGE: kixelated/moq-rs
IMAGE-PUB: kixelated/moq-pub
SERVICE: api # Restart the API service TODO and relays

jobs:
Expand Down Expand Up @@ -42,6 +43,16 @@ jobs:
tags: ${{env.REGISTRY}}/${{env.IMAGE}}
platforms: linux/amd64,linux/arm64

# Same, but include ffmpeg for publishing BBB
- uses: depot/build-push-action@v1
with:
project: r257ctfqm6
context: .
push: true
target: moq-pub # instead of the default target
tags: ${{env.REGISTRY}}/${{env.IMAGE-PUB}}
platforms: linux/amd64,linux/arm64

# Log in to GCP
- uses: google-github-actions/auth@v1
with:
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
.DS_Store
target/
logs/
*.mp4
20 changes: 17 additions & 3 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,28 @@ RUN --mount=type=cache,target=/usr/local/cargo/registry \
--mount=type=cache,target=/build/target \
cargo build --release && cp /build/target/release/moq-* /usr/local/cargo/bin

# Runtime image
FROM rust:latest
# Special image for moq-pub with ffmpeg and a publish script included.
FROM rust:latest as moq-pub

# Install required utilities and ffmpeg
RUN apt-get update && \
apt-get install -y ffmpeg wget

# Copy the publish script into the image
COPY deploy/publish.sh /usr/local/bin/publish

# Copy the compiled binary
COPY --from=builder /usr/local/cargo/bin/moq-pub /usr/local/cargo/bin/moq-pub
CMD [ "publish" ]

# moq-rs image with just the binaries
FROM rust:latest as moq-rs

LABEL org.opencontainers.image.source=https://github.com/kixelated/moq-rs
LABEL org.opencontainers.image.licenses="MIT OR Apache-2.0"

# Fly.io entrypoint
ADD fly-relay.sh .
ADD deploy/fly-relay.sh .

# Copy the compiled binaries
COPY --from=builder /usr/local/cargo/bin /usr/local/cargo/bin
File renamed without changes.
20 changes: 20 additions & 0 deletions deploy/fly.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
app = "englishm-moq-relay"
kill_signal = "SIGINT"
kill_timeout = 5

[env]
PORT = "4443"

[experimental]
cmd = "./fly-relay.sh"

[[services]]
internal_port = 4443
protocol = "udp"

[services.concurrency]
hard_limit = 25
soft_limit = 20

[[services.ports]]
port = "4443"
41 changes: 41 additions & 0 deletions deploy/publish.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
#!/bin/bash
set -euo pipefail

ADDR=${ADDR:-"https://relay.quic.video"}
NAME=${NAME:-"bbb"}
URL=${URL:-"http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4"}

# Download the funny bunny
wget -nv "${URL}" -O "${NAME}.mp4"

# ffmpeg
# -hide_banner: Hide the banner
# -v quiet: and any other output
# -stats: But we still want some stats on stderr
# -stream_loop -1: Loop the broadcast an infinite number of times
# -re: Output in real-time
# -i "${INPUT}": Read from a file on disk
# -vf "drawtext": Render the current time in the corner of the video
# -an: Disable audio for now
# -b:v 3M: Output video at 3Mbps
# -preset ultrafast: Don't use much CPU at the cost of quality
# -tune zerolatency: Optimize for latency at the cost of quality
# -f mp4: Output to mp4 format
# -movflags: Build a fMP4 file with a frame per fragment
# - | moq-pub: Output to stdout and moq-pub to publish

# Run ffmpeg
ffmpeg \
-stream_loop -1 \
-hide_banner \
-v quiet \
-re \
-i "${NAME}.mp4" \
-vf "drawtext=fontfile=/usr/share/fonts/truetype/dejavu/DejaVuSansMono.ttf:text='%{gmtime\: %H\\\\\:%M\\\\\:%S.%3N}':x=(W-tw)-24:y=24:fontsize=48:fontcolor=white:box=1:[email protected]" \
-an \
-b:v 3M \
-preset ultrafast \
-tune zerolatency \
-f mp4 \
-movflags empty_moov+frag_every_frame+separate_moof+omit_tfhd_offset \
- | moq-pub "${ADDR}/${NAME}"
19 changes: 0 additions & 19 deletions fly.toml

This file was deleted.

2 changes: 1 addition & 1 deletion moq-pub/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
[package]
name = "moq-pub"
description = "Media over QUIC"
authors = ["Mike English"]
authors = ["Mike English", "Luke Curley"]
repository = "https://github.com/kixelated/moq-rs"
license = "MIT OR Apache-2.0"

Expand Down

0 comments on commit ea701bc

Please sign in to comment.