Skip to content

Commit

Permalink
Also set metadata when reopening only the muxer under nvenc.
Browse files Browse the repository at this point in the history
  • Loading branch information
j0sh committed Sep 6, 2024
1 parent aa14cc5 commit beda797
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 0 deletions.
2 changes: 2 additions & 0 deletions ffmpeg/encoder.c
Original file line number Diff line number Diff line change
Expand Up @@ -326,6 +326,8 @@ int reopen_output(struct output_ctx *octx, struct input_ctx *ictx)
ret = avio_open(&octx->oc->pb, octx->fname, AVIO_FLAG_WRITE);
if (ret < 0) LPMS_ERR(reopen_out_err, "Error re-opening output file");
}

if (octx->metadata) av_dict_copy(&octx->oc->metadata, octx->metadata, 0);
ret = avformat_write_header(octx->oc, &octx->muxer->opts);
if (ret < 0) LPMS_ERR(reopen_out_err, "Error re-writing header");

Expand Down
44 changes: 44 additions & 0 deletions ffmpeg/ffmpeg_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1759,6 +1759,50 @@ func TestTranscoder_FormatOptions(t *testing.T) {
}
}

func TestTranscoder_Metadata(t *testing.T) {
runTestTranscoder_Metadata(t, Software)
}

func runTestTranscoder_Metadata(t *testing.T, accel Acceleration) {
// check that metadata is there in all segments
run, dir := setupTest(t)
defer os.RemoveAll(dir)

err := RTMPToHLS("../transcoder/test.ts", dir+"/in.m3u8", dir+"/in_%d.ts", "2", 0)
if err != nil {
t.Error(err)
}
tc := NewTranscoder()
defer tc.StopTranscoder()
for i := 0; i < 4; i++ {
in := &TranscodeOptionsIn{
Fname: fmt.Sprintf("%s/in_%d.ts", dir, i),
Accel: accel,
}
out := []TranscodeOptions{{
Accel: accel,
Oname: fmt.Sprintf("%s/out_%d.ts", dir, i),
Profile: P144p30fps16x9,
Metadata: map[string]string{
"service_name": fmt.Sprintf("lpms-test-%d", i),
},
}}
_, err := tc.Transcode(in, out)
if err != nil {
t.Error(err)
}
}

cmd := `
ffprobe -hide_banner -i out_1.ts
ffprobe -i out_0.ts 2>&1 | grep 'service_name : lpms-test-0'
ffprobe -i out_1.ts 2>&1 | grep 'service_name : lpms-test-1'
ffprobe -i out_2.ts 2>&1 | grep 'service_name : lpms-test-2'
ffprobe -i out_3.ts 2>&1 | grep 'service_name : lpms-test-3'
`
run(cmd)
}

func TestTranscoder_IgnoreUnknown(t *testing.T) {
run, dir := setupTest(t)
defer os.RemoveAll(dir)
Expand Down
5 changes: 5 additions & 0 deletions ffmpeg/nvidia_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -801,3 +801,8 @@ func TestNvidia_DiscontinuityAudioSegment(t *testing.T) {
func TestNvidia_Rotation(t *testing.T) {
runRotationTests(t, Nvidia)
}

func TestNvidia_Metadata(t *testing.T) {
// with nvenc we reopen the outputs so exercise that
runTestTranscoder_Metadata(t, Nvidia)
}

0 comments on commit beda797

Please sign in to comment.