Fix correctly assign input and output IDs to progress data

This commit is contained in:
Ingo Oppermann 2025-03-17 11:49:59 +01:00
parent a5831b3b1a
commit 19479201b4
No known key found for this signature in database
GPG Key ID: 2AB32426E9DD229E
3 changed files with 221 additions and 16 deletions

View File

@ -10,7 +10,8 @@ type ProgressIOFramerate struct {
type ProgressIO struct {
ID string
Address string
URL string // The original URL as reported by ffmpeg
Address string // A possibly modified URL
// General
Index uint64
@ -48,6 +49,7 @@ type ProgressIO struct {
}
func (p *ProgressIO) UnmarshalParser(pp *parse.ProgressIO) {
p.URL = pp.URL
p.Address = pp.Address
p.Index = pp.Index
p.Stream = pp.Stream
@ -85,6 +87,7 @@ func (p *ProgressIO) UnmarshalParser(pp *parse.ProgressIO) {
func (p *ProgressIO) MarshalParser() parse.ProgressIO {
pp := parse.ProgressIO{
URL: p.URL,
Address: p.Address,
Index: p.Index,
Stream: p.Stream,

View File

@ -289,25 +289,28 @@ func (t *task) State() (*app.State, error) {
progress := t.parser.Progress()
state.Progress.UnmarshalParser(&progress)
for i, p := range state.Progress.Input {
if int(p.Index) >= len(t.process.Config.Input) {
continue
}
state.Progress.Input[i].ID = t.process.Config.Input[p.Index].ID
}
for i, p := range state.Progress.Output {
if int(p.Index) >= len(t.process.Config.Output) {
continue
}
state.Progress.Output[i].ID = t.process.Config.Output[p.Index].ID
}
state.Progress.Input = assignConfigID(state.Progress.Input, t.process.Config.Input)
state.Progress.Output = assignConfigID(state.Progress.Output, t.process.Config.Output)
return state, nil
}
func assignConfigID(progress []app.ProgressIO, config []app.ConfigIO) []app.ProgressIO {
for i, p := range progress {
for _, c := range config {
if c.Address != p.URL {
continue
}
progress[i].ID = c.ID
break
}
}
return progress
}
func (t *task) Report() (*app.Report, error) {
token := t.lock.RLock()
defer t.lock.RUnlock(token)

199
restream/task_test.go Normal file
View File

@ -0,0 +1,199 @@
package restream
import (
"testing"
"github.com/datarhei/core/v16/restream/app"
"github.com/stretchr/testify/require"
)
func TestAssignConfigID(t *testing.T) {
config := app.Config{
Input: []app.ConfigIO{
{
ID: "0",
Address: "https://example.com/3j3wr1ua_360.m3u8",
},
{
ID: "1",
Address: "https://example.com/3j3wr1ua_720.m3u8",
},
{
ID: "2",
Address: "https://example.com/3j3wr1ua_1080.m3u8",
},
{
ID: "3",
Address: "anullsrc=r=44100:cl=mono",
},
},
Output: []app.ConfigIO{
{
ID: "0",
Address: "/%v.m3u8",
},
{
ID: "snapshot",
Address: "/%v.jpg",
},
{
ID: "snapshot_main",
Address: "/main.jpg",
},
{
ID: "snapshot_main_240",
Address: "/main_240.jpg",
},
},
}
progress := app.Progress{
Input: []app.ProgressIO{
{
URL: "https://example.com/3j3wr1ua_360.m3u8",
Address: "https://example.com/3j3wr1ua_360.m3u8",
},
{
URL: "https://example.com/3j3wr1ua_720.m3u8",
Address: "https://example.com/3j3wr1ua_720.m3u8",
},
{
URL: "https://example.com/3j3wr1ua_1080.m3u8",
Address: "https://example.com/3j3wr1ua_1080.m3u8",
},
{
URL: "anullsrc=r=44100:cl=mono",
Address: "anullsrc=r=44100:cl=mono",
},
},
Output: []app.ProgressIO{
{
URL: "/%v.m3u8",
Address: "/0.m3u8",
},
{
URL: "/%v.m3u8",
Address: "/1.m3u8",
},
{
URL: "/%v.m3u8",
Address: "/2.m3u8",
},
{
URL: "/%v.m3u8",
Address: "/0.m3u8",
},
{
URL: "/%v.m3u8",
Address: "/1.m3u8",
},
{
URL: "/%v.m3u8",
Address: "/2.m3u8",
},
{
URL: "/%v.jpg",
Address: "/%v.jpg",
},
{
URL: "/%v.jpg",
Address: "/%v.jpg",
},
{
URL: "/%v.jpg",
Address: "/%v.jpg",
},
{
URL: "/main.jpg",
Address: "/main.jpg",
},
{
URL: "/main_240.jpg",
Address: "/main_240.jpg",
},
},
}
progress.Input = assignConfigID(progress.Input, config.Input)
require.Equal(t, []app.ProgressIO{
{
ID: "0",
URL: "https://example.com/3j3wr1ua_360.m3u8",
Address: "https://example.com/3j3wr1ua_360.m3u8",
},
{
ID: "1",
URL: "https://example.com/3j3wr1ua_720.m3u8",
Address: "https://example.com/3j3wr1ua_720.m3u8",
},
{
ID: "2",
URL: "https://example.com/3j3wr1ua_1080.m3u8",
Address: "https://example.com/3j3wr1ua_1080.m3u8",
},
{
ID: "3",
URL: "anullsrc=r=44100:cl=mono",
Address: "anullsrc=r=44100:cl=mono",
},
}, progress.Input)
progress.Output = assignConfigID(progress.Output, config.Output)
require.Equal(t, []app.ProgressIO{
{
ID: "0",
URL: "/%v.m3u8",
Address: "/0.m3u8",
},
{
ID: "0",
URL: "/%v.m3u8",
Address: "/1.m3u8",
},
{
ID: "0",
URL: "/%v.m3u8",
Address: "/2.m3u8",
},
{
ID: "0",
URL: "/%v.m3u8",
Address: "/0.m3u8",
},
{
ID: "0",
URL: "/%v.m3u8",
Address: "/1.m3u8",
},
{
ID: "0",
URL: "/%v.m3u8",
Address: "/2.m3u8",
},
{
ID: "snapshot",
URL: "/%v.jpg",
Address: "/%v.jpg",
},
{
ID: "snapshot",
URL: "/%v.jpg",
Address: "/%v.jpg",
},
{
ID: "snapshot",
URL: "/%v.jpg",
Address: "/%v.jpg",
},
{
ID: "snapshot_main",
URL: "/main.jpg",
Address: "/main.jpg",
},
{
ID: "snapshot_main_240",
URL: "/main_240.jpg",
Address: "/main_240.jpg",
},
}, progress.Output)
}