Skip to content

Commit 769b8e6

Browse files
Merge branch 'master' into av/add-byoc-streaming
2 parents 33fda51 + cb1fe6a commit 769b8e6

19 files changed

+380
-59
lines changed

CHANGELOG.md

Lines changed: 75 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,79 @@
11
# Changelog
22

3-
## v0.8.5
3+
## v0.8.7
4+
5+
### Breaking Changes 🚨🚨
6+
7+
### Features ⚒
8+
9+
#### General
10+
11+
- [#3532](https://github.com/livepeer/go-livepeer/pull/3532) Payment "per time" instead of "pay per pixel" (@leszko)
12+
- [#3686](https://github.com/livepeer/go-livepeer/pull/3686) Add `comfyui` / `streamdiffusion` pipeline to current-live pipeline (@leszko)
13+
- [#3705](https://github.com/livepeer/go-livepeer/pull/3705) AI/Live: segmented MediaWriter / MediaReader (@j0sh)
14+
- [#3641](https://github.com/livepeer/go-livepeer/pull/3641) BYOC: switch billing model to 1 ticket per second of compute (@ad-astra-video)
15+
- [#3680](https://github.com/livepeer/go-livepeer/pull/3680) AI: allow local Kafka with no auth for local deployment (@ad-astra-video)
16+
- [#3623](https://github.com/livepeer/go-livepeer/pull/3623) Stop stream if there are no payments from Gateway (@leszko)
17+
18+
#### Broadcaster
19+
20+
- [#3714](https://github.com/livepeer/go-livepeer/pull/3714) Make debug segment count configurable (@mjh1)
21+
- [#3721](https://github.com/livepeer/go-livepeer/pull/3721) Stream heartbeats (@mjh1)
22+
- [#3657](https://github.com/livepeer/go-livepeer/pull/3657) Re-encode audio to AAC for non-local (@j0sh)
23+
- [#3676](https://github.com/livepeer/go-livepeer/pull/3676) Pass full URLs to app for WHEP, status and update (@mjh1)
24+
- [#3733](https://github.com/livepeer/go-livepeer/pull/3733) Send authorization header to support new API (@mjh1)
25+
- [#3671](https://github.com/livepeer/go-livepeer/pull/3671) Send trickle errors down to `processStream` (@j0sh)
26+
- [#3677](https://github.com/livepeer/go-livepeer/pull/3677) Enable Video-to-Video suspension mechanism (penalty = 5) (@leszko)
27+
- [#3678](https://github.com/livepeer/go-livepeer/pull/3678) Add `LiveSelectionAlgorithm` (@leszko)
28+
- [#3694](https://github.com/livepeer/go-livepeer/pull/3694) Fix zeroing `ai_container_idle` metric for non-existing Os (@leszko)
29+
- [#3695](https://github.com/livepeer/go-livepeer/pull/3695) Remove session from pool if selection failed (@leszko)
30+
- [#3709](https://github.com/livepeer/go-livepeer/pull/3709) Send Kafka event when no orchestrators are available (@mjh1)
31+
- [#3722](https://github.com/livepeer/go-livepeer/pull/3722) Send Kafka event on orchestrator swaps (@j0sh)
32+
- [#3634](https://github.com/livepeer/go-livepeer/pull/3634) BYOC: Allow clients to include or exclude specific Orchestrators by serviceAddr in requests (@ad-astra-video)
33+
- [#3682](https://github.com/livepeer/go-livepeer/pull/3682) AI/Live: store & forward parameter updates (@j0sh)
34+
- [#3688](https://github.com/livepeer/go-livepeer/pull/3688) AI: options for `/live/video-to-video` update & status routes to support local browser tests (@ad-astra-video)
35+
36+
#### Orchestrator
37+
38+
- [#3665](https://github.com/livepeer/go-livepeer/pull/3665) Box: give GPUs to orchestrator if running GPU pipeline (@victorges)
39+
- [#3674](https://github.com/livepeer/go-livepeer/pull/3674) AI: fix startup to allow 0 price on AI models (@ad-astra-video)
40+
41+
#### Transcoder
42+
43+
- [#3734](https://github.com/livepeer/go-livepeer/pull/3734) Update LPMS to `a53e20a` (@j0sh)
44+
45+
#### CLI
46+
47+
- [#3700](https://github.com/livepeer/go-livepeer/pull/3700) cmd: move a few things to starter for easy embedding (@iameli)
48+
49+
### Bug Fixes 🐞
50+
51+
#### General
52+
53+
- [#3711](https://github.com/livepeer/go-livepeer/pull/3711) AI/Live: watchdog for output segments (@j0sh)
54+
- [#3670](https://github.com/livepeer/go-livepeer/pull/3670) Set trickle idle timeout (@j0sh)
55+
- [#3594](https://github.com/livepeer/go-livepeer/pull/3594) Fix multiple issues in trickle, improving reliability and stability (@j0sh)
56+
- [#3650](https://github.com/livepeer/go-livepeer/pull/3650) BYOC: fix payment ticket count calculation (@ad-astra-video)
57+
- [#3651](https://github.com/livepeer/go-livepeer/pull/3651) BYOC: fix request timeout when removing capability (@ad-astra-video)
58+
59+
#### Broadcaster
60+
61+
- [#3673](https://github.com/livepeer/go-livepeer/pull/3673) AI/Live: WHIP endpoint updates for stream creation (@ad-astra-video)
62+
- [#3713](https://github.com/livepeer/go-livepeer/pull/3713) Send param updates to Kafka from control handler (@j0sh)
63+
- [#3699](https://github.com/livepeer/go-livepeer/pull/3699) Metrics: set correct `pipeline` and `model_name` labels (@pwilczynskiclearcode)
64+
- [#3702](https://github.com/livepeer/go-livepeer/pull/3702) Metrics: `GetCapacity` supports pipeline/modelID filtering (@pwilczynskiclearcode)
65+
66+
#### Orchestrator
67+
68+
- [#3640](https://github.com/livepeer/go-livepeer/pull/3640) Add lock while removing session during O suspension (@leszko)
69+
- [#3667](https://github.com/livepeer/go-livepeer/pull/3667) Don't delete stream state if `requestID` doesn't match (@mjh1)
70+
- [#3708](https://github.com/livepeer/go-livepeer/pull/3708) Retry ffmpeg more often in AI/Live to improve stream resilience (@j0sh)
71+
72+
#### Transcoder
73+
74+
- [#3734](https://github.com/livepeer/go-livepeer/pull/3734) Update LPMS to `a53e20a` (@j0sh)
75+
76+
## v0.8.6
477

578
### Features ⚒
679

@@ -1167,4 +1240,4 @@ Thanks everyone that submitted bug reports and assisted in testing!
11671240
- [#1775](https://github.com/livepeer/go-livepeer/pull/1775) Fix transcoder load balancer race condition around session cleanup (@jailuthra)
11681241
- [#1784](https://github.com/livepeer/go-livepeer/pull/1784) Use auth token sessionID to index into sessions map in transcoder load balancer (@jailuthra)
11691242

1170-
[Full list of changes](https://github.com/livepeer/go-livepeer/compare/v0.5.14...v0.5.15)
1243+
[Full list of changes](https://github.com/livepeer/go-livepeer/compare/v0.5.14...v0.5.15)

CHANGELOG_PENDING.md

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,3 @@
1717
### Bug Fixes 🐞
1818

1919
#### CLI
20-
21-
- [#3700](https://github.com/livepeer/go-livepeer/pull/3700) cmd: move a few things to starter for easy embedding (@iameli)
22-
23-
#### General
24-
25-
#### Broadcaster
26-
27-
#### Orchestrator
28-
29-
#### Transcoder

VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
0.8.6
1+
0.8.7

ai/worker/docker.go

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -67,10 +67,12 @@ var pipelineToImage = map[string]string{
6767
"llm": "livepeer/ai-runner:llm",
6868
}
6969
var livePipelineToImage = map[string]string{
70-
"streamdiffusion": "livepeer/ai-runner:live-app-streamdiffusion",
71-
"comfyui": "livepeer/ai-runner:live-app-comfyui",
72-
"segment_anything_2": "livepeer/ai-runner:live-app-segment_anything_2",
73-
"noop": "livepeer/ai-runner:live-app-noop",
70+
"streamdiffusion": "livepeer/ai-runner:live-app-streamdiffusion",
71+
// streamdiffusion-sd15 is a utility image that uses a SD1.5 model on the default config of the pipeline. Optimizes startup time.
72+
"streamdiffusion-sd15": "livepeer/ai-runner:live-app-streamdiffusion-sd15",
73+
"comfyui": "livepeer/ai-runner:live-app-comfyui",
74+
"segment_anything_2": "livepeer/ai-runner:live-app-segment_anything_2",
75+
"noop": "livepeer/ai-runner:live-app-noop",
7476
}
7577

7678
type ImageOverrides struct {

box/build-runner.sh

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ set -ex
33

44
PIPELINE=${PIPELINE:-noop}
55

6-
if [[ "$PIPELINE" != "noop" && "$PIPELINE" != "comfyui" && "$PIPELINE" != "streamdiffusion" ]]; then
7-
echo "Error: PIPELINE must be either 'noop', 'comfyui' or 'streamdiffusion'"
6+
if [[ "$PIPELINE" != "noop" && "$PIPELINE" != "comfyui" && "$PIPELINE" != "streamdiffusion" && "$PIPELINE" != "streamdiffusion-sd15" ]]; then
7+
echo "Error: PIPELINE must be either 'noop', 'comfyui', 'streamdiffusion' or 'streamdiffusion-sd15'"
88
exit 1
99
fi
1010

@@ -18,8 +18,21 @@ docker build -t livepeer/ai-runner:live-base -f docker/Dockerfile.live-base .
1818
if [ "${PIPELINE}" = "noop" ]; then
1919
docker build -t livepeer/ai-runner:live-app-noop -f docker/Dockerfile.live-app-noop --build-arg VERSION=${VERSION} .
2020
else
21-
docker build -t livepeer/ai-runner:live-base-${PIPELINE} -f docker/Dockerfile.live-base-${PIPELINE} .
22-
docker build -t livepeer/ai-runner:live-app-${PIPELINE} -f docker/Dockerfile.live-app__PIPELINE__ --build-arg PIPELINE=${PIPELINE} --build-arg VERSION=${VERSION} .
21+
BASE_PIPELINE=${PIPELINE}
22+
INFERPY_INITIAL_PARAMS=""
23+
if [[ "$PIPELINE" == "streamdiffusion-sd15" ]]; then
24+
BASE_PIPELINE="streamdiffusion"
25+
JSON_FILE=./app/live/pipelines/streamdiffusion_sd15_default_params.json
26+
INFERPY_INITIAL_PARAMS=$(tr -d '\n' < "$JSON_FILE")
27+
fi
28+
docker build -t livepeer/ai-runner:live-base-${BASE_PIPELINE} -f docker/Dockerfile.live-base-${BASE_PIPELINE} .
29+
docker build \
30+
-f docker/Dockerfile.live-app__PIPELINE__ \
31+
-t livepeer/ai-runner:live-app-${PIPELINE} \
32+
--build-arg PIPELINE=${BASE_PIPELINE} \
33+
--build-arg VERSION=${VERSION} \
34+
--build-arg INFERPY_INITIAL_PARAMS="$INFERPY_INITIAL_PARAMS" \
35+
.
2336
fi
2437

2538
docker stop live-video-to-video_${PIPELINE}_8900 || true

box/stream.sh

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ PIPELINE=${PIPELINE:-noop}
55
STREAM_KEY="my-stream"
66
STREAM_ID="my-stream-id"
77
RTMP_OUTPUT=${RTMP_OUTPUT:-""}
8+
FPS=${FPS:-30}
9+
INPUT_VIDEO=${INPUT_VIDEO:-""}
810

911
case "$1" in
1012
start)
@@ -18,12 +20,16 @@ case "$1" in
1820
QUERY="${QUERY}\&params=${ENCODED_PARAMS}"
1921
fi
2022

21-
ffmpeg -re -f lavfi \
22-
-i testsrc=size=1920x1080:rate=30,format=yuv420p \
23-
-vf scale=1280:720 \
23+
INPUT_FLAGS="-f lavfi -i testsrc=size=1280x720:rate=${FPS},format=yuv420p"
24+
if [ -n "$INPUT_VIDEO" ]; then
25+
INPUT_FLAGS="-stream_loop -1 -i ${INPUT_VIDEO}"
26+
fi
27+
28+
ffmpeg -re ${INPUT_FLAGS} \
29+
-vf "scale=1280:720:force_original_aspect_ratio=increase,crop=1280:720" \
2430
-c:v libx264 \
2531
-b:v 1000k \
26-
-x264-params keyint=60 \
32+
-x264-params keyint=$((FPS * 2)) \
2733
-f flv rtmp://127.0.0.1:1935/${STREAM_KEY}?${QUERY}
2834
;;
2935
playback)

cmd/livepeer/starter/flags.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,10 +67,14 @@ func NewLivepeerConfig(fs *flag.FlagSet) LivepeerConfig {
6767
cfg.MediaMTXApiPassword = fs.String("mediaMTXApiPassword", "", "HTTP basic auth password for MediaMTX API requests")
6868
cfg.LiveAITrickleHostForRunner = fs.String("liveAITrickleHostForRunner", "", "Trickle Host used by AI Runner; It's used to overwrite the publicly available Trickle Host")
6969
cfg.LiveAIAuthApiKey = fs.String("liveAIAuthApiKey", "", "API key to use for Live AI authentication requests")
70+
cfg.LiveAIHeartbeatURL = fs.String("liveAIHeartbeatURL", "", "Base URL for Live AI heartbeat requests")
71+
cfg.LiveAIHeartbeatHeaders = fs.String("liveAIHeartbeatHeaders", "", "Map of headers to use for Live AI heartbeat requests. e.g. 'header:val,header2:val2'")
72+
cfg.LiveAIHeartbeatInterval = fs.Duration("liveAIHeartbeatInterval", *cfg.LiveAIHeartbeatInterval, "Interval to send Live AI heartbeat requests")
7073
cfg.LiveAIAuthWebhookURL = fs.String("liveAIAuthWebhookUrl", "", "Live AI RTMP authentication webhook URL")
7174
cfg.LivePaymentInterval = fs.Duration("livePaymentInterval", *cfg.LivePaymentInterval, "Interval to pay process Gateway <> Orchestrator Payments for Live AI Video")
7275
cfg.LiveOutSegmentTimeout = fs.Duration("liveOutSegmentTimeout", *cfg.LiveOutSegmentTimeout, "Timeout duration to wait the output segment to be available in the Live AI pipeline; defaults to no timeout")
7376
cfg.LiveAICapRefreshModels = fs.String("liveAICapRefreshModels", "", "Comma separated list of models to periodically fetch capacity for. Leave unset to switch off periodic refresh.")
77+
cfg.LiveAISaveNSegments = fs.Int("liveAISaveNSegments", 10, "Set how many segments to save to disk for debugging (both input and output)")
7478

7579
// Onchain:
7680
cfg.EthAcctAddr = fs.String("ethAcctAddr", *cfg.EthAcctAddr, "Existing Eth account address. For use when multiple ETH accounts exist in the keystore directory")

cmd/livepeer/starter/starter.go

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,9 +177,13 @@ type LivepeerConfig struct {
177177
KafkaGatewayTopic *string
178178
MediaMTXApiPassword *string
179179
LiveAIAuthApiKey *string
180+
LiveAIHeartbeatURL *string
181+
LiveAIHeartbeatHeaders *string
182+
LiveAIHeartbeatInterval *time.Duration
180183
LivePaymentInterval *time.Duration
181184
LiveOutSegmentTimeout *time.Duration
182185
LiveAICapRefreshModels *string
186+
LiveAISaveNSegments *int
183187
}
184188

185189
// DefaultLivepeerConfig creates LivepeerConfig exactly the same as when no flags are passed to the livepeer process.
@@ -232,6 +236,7 @@ func DefaultLivepeerConfig() LivepeerConfig {
232236
defaultLivePaymentInterval := 5 * time.Second
233237
defaultLiveOutSegmentTimeout := 0 * time.Second
234238
defaultGatewayHost := ""
239+
defaultLiveAIHeartbeatInterval := 5 * time.Second
235240

236241
// Onchain:
237242
defaultEthAcctAddr := ""
@@ -347,6 +352,7 @@ func DefaultLivepeerConfig() LivepeerConfig {
347352
LivePaymentInterval: &defaultLivePaymentInterval,
348353
LiveOutSegmentTimeout: &defaultLiveOutSegmentTimeout,
349354
GatewayHost: &defaultGatewayHost,
355+
LiveAIHeartbeatInterval: &defaultLiveAIHeartbeatInterval,
350356

351357
// Onchain:
352358
EthAcctAddr: &defaultEthAcctAddr,
@@ -1673,6 +1679,22 @@ func StartLivepeer(ctx context.Context, cfg LivepeerConfig) {
16731679
if cfg.LiveAIAuthApiKey != nil {
16741680
n.LiveAIAuthApiKey = *cfg.LiveAIAuthApiKey
16751681
}
1682+
if cfg.LiveAIHeartbeatURL != nil {
1683+
n.LiveAIHeartbeatURL = *cfg.LiveAIHeartbeatURL
1684+
}
1685+
if cfg.LiveAIHeartbeatInterval != nil {
1686+
n.LiveAIHeartbeatInterval = *cfg.LiveAIHeartbeatInterval
1687+
}
1688+
if cfg.LiveAIHeartbeatHeaders != nil {
1689+
n.LiveAIHeartbeatHeaders = make(map[string]string)
1690+
headers := strings.Split(*cfg.LiveAIHeartbeatHeaders, ",")
1691+
for _, header := range headers {
1692+
parts := strings.SplitN(header, ":", 2)
1693+
if len(parts) == 2 {
1694+
n.LiveAIHeartbeatHeaders[parts[0]] = parts[1]
1695+
}
1696+
}
1697+
}
16761698
n.LivePaymentInterval = *cfg.LivePaymentInterval
16771699
n.LiveOutSegmentTimeout = *cfg.LiveOutSegmentTimeout
16781700
if cfg.LiveAITrickleHostForRunner != nil {
@@ -1681,6 +1703,7 @@ func StartLivepeer(ctx context.Context, cfg LivepeerConfig) {
16811703
if cfg.LiveAICapRefreshModels != nil && *cfg.LiveAICapRefreshModels != "" {
16821704
n.LiveAICapRefreshModels = strings.Split(*cfg.LiveAICapRefreshModels, ",")
16831705
}
1706+
n.LiveAISaveNSegments = cfg.LiveAISaveNSegments
16841707

16851708
//Create Livepeer Node
16861709

core/livepeernode.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,9 +161,13 @@ type LivepeerNode struct {
161161
MediaMTXApiPassword string
162162
LiveAITrickleHostForRunner string
163163
LiveAIAuthApiKey string
164+
LiveAIHeartbeatURL string
165+
LiveAIHeartbeatHeaders map[string]string
166+
LiveAIHeartbeatInterval time.Duration
164167
LivePaymentInterval time.Duration
165168
LiveOutSegmentTimeout time.Duration
166169
LiveAICapRefreshModels []string
170+
LiveAISaveNSegments *int
167171

168172
// Gateway
169173
GatewayHost string
@@ -175,6 +179,7 @@ type LivePipeline struct {
175179
Pipeline string
176180
ControlPub *trickle.TricklePublisher
177181
StopControl func()
182+
ReportUpdate func([]byte)
178183

179184
StreamCtx context.Context
180185
streamCancel context.CancelCauseFunc

go.mod

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ go 1.23.2
55
require (
66
contrib.go.opencensus.io/exporter/prometheus v0.4.2
77
github.com/Masterminds/semver/v3 v3.2.1
8+
github.com/bluenviron/gortsplib/v4 v4.12.3
9+
github.com/bluenviron/mediacommon/v2 v2.4.0
810
github.com/cenkalti/backoff v2.2.1+incompatible
911
github.com/dustin/go-humanize v1.0.1
1012
github.com/ethereum/go-ethereum v1.13.5
@@ -17,14 +19,18 @@ require (
1719
github.com/jaypipes/pcidb v1.0.0
1820
github.com/livepeer/go-tools v0.3.6-0.20240130205227-92479de8531b
1921
github.com/livepeer/livepeer-data v0.7.5-0.20231004073737-06f1f383fb18
20-
github.com/livepeer/lpms v0.0.0-20250529161047-c1eefa63ff3a
22+
github.com/livepeer/lpms v0.0.0-20250905152032-a53e20a33466
2123
github.com/livepeer/m3u8 v0.11.1
2224
github.com/mattn/go-sqlite3 v1.14.18
2325
github.com/oapi-codegen/nethttp-middleware v1.0.1
2426
github.com/oapi-codegen/runtime v1.1.1
2527
github.com/olekukonko/tablewriter v0.0.5
2628
github.com/patrickmn/go-cache v2.1.0+incompatible
2729
github.com/peterbourgon/ff/v3 v3.4.0
30+
github.com/pion/interceptor v0.1.37
31+
github.com/pion/rtp v1.8.21
32+
github.com/pion/sdp/v3 v3.0.10
33+
github.com/pion/webrtc/v4 v4.0.11
2834
github.com/pkg/errors v0.9.1
2935
github.com/prometheus/client_golang v1.14.0
3036
github.com/segmentio/kafka-go v0.4.47
@@ -43,25 +49,18 @@ require (
4349
require (
4450
github.com/asticode/go-astikit v0.30.0 // indirect
4551
github.com/asticode/go-astits v1.13.0 // indirect
46-
github.com/bluenviron/gortsplib/v4 v4.12.3 // indirect
47-
github.com/bluenviron/mediacommon/v2 v2.4.0 // indirect
4852
github.com/pion/datachannel v1.5.10 // indirect
4953
github.com/pion/dtls/v3 v3.0.4 // indirect
5054
github.com/pion/ice/v4 v4.0.7 // indirect
51-
github.com/pion/interceptor v0.1.37 // indirect
5255
github.com/pion/logging v0.2.3 // indirect
5356
github.com/pion/mdns/v2 v2.0.7 // indirect
5457
github.com/pion/randutil v0.1.0 // indirect
5558
github.com/pion/rtcp v1.2.15 // indirect
56-
github.com/pion/rtp v1.8.21 // indirect
5759
github.com/pion/sctp v1.8.36 // indirect
58-
github.com/pion/sdp/v3 v3.0.10 // indirect
59-
github.com/pion/sdp/v4 v4.0.0-20240223200530-fb77fb3c6578 // indirect
6060
github.com/pion/srtp/v3 v3.0.4 // indirect
6161
github.com/pion/stun/v3 v3.0.0 // indirect
6262
github.com/pion/transport/v3 v3.0.7 // indirect
6363
github.com/pion/turn/v4 v4.0.0 // indirect
64-
github.com/pion/webrtc/v4 v4.0.11 // indirect
6564
github.com/wlynxg/anet v0.0.5 // indirect
6665
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
6766
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.33.0 // indirect

0 commit comments

Comments
 (0)