Fix correctly assign input and output IDs to progress data
This commit is contained in:
parent
a5831b3b1a
commit
19479201b4
@ -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,
|
||||
|
||||
@ -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
199
restream/task_test.go
Normal 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)
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user