From 95fd8aed963f0d9928787907e446357182a1f623 Mon Sep 17 00:00:00 2001 From: Gabe Kangas Date: Tue, 14 Jul 2020 18:52:48 -0700 Subject: [PATCH] Added a basic transcoder test --- core/ffmpeg/transcoder.go | 7 +++++-- core/ffmpeg/transcoder_test.go | 30 ++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 core/ffmpeg/transcoder_test.go diff --git a/core/ffmpeg/transcoder.go b/core/ffmpeg/transcoder.go index 43bde2ed0..3b0d22142 100644 --- a/core/ffmpeg/transcoder.go +++ b/core/ffmpeg/transcoder.go @@ -24,6 +24,7 @@ type Transcoder struct { hlsPlaylistLength int segmentLengthSeconds int appendToStream bool + ffmpegPath string } // HLSVariant is a combination of settings that results in a single HLS stream @@ -104,7 +105,7 @@ func (t *Transcoder) getString() string { ffmpegFlags := []string{ "cat", t.input, "|", - config.Config.GetFFMpegPath(), + t.ffmpegPath, "-hide_banner", "-i pipe:", t.getVariantsString(), @@ -112,7 +113,7 @@ func (t *Transcoder) getString() string { // HLS Output "-f", "hls", "-hls_time", strconv.Itoa(t.segmentLengthSeconds), // Length of each segment - "-hls_list_size", strconv.Itoa(config.Config.GetMaxNumberOfReferencedSegmentsInPlaylist()), // Max # in variant playlist + "-hls_list_size", strconv.Itoa(t.hlsPlaylistLength), // Max # in variant playlist "-hls_delete_threshold", "10", // Start deleting files after hls_list_size + 10 "-hls_flags", strings.Join(hlsOptionFlags, "+"), // Specific options in HLS generation @@ -175,6 +176,8 @@ func getVariantFromConfigQuality(quality config.StreamQuality, index int) HLSVar // NewTranscoder will return a new Transcoder, populated by the config func NewTranscoder() Transcoder { transcoder := new(Transcoder) + transcoder.ffmpegPath = config.Config.GetFFMpegPath() + transcoder.hlsPlaylistLength = config.Config.GetMaxNumberOfReferencedSegmentsInPlaylist() var outputPath string if config.Config.S3.Enabled || config.Config.IPFS.Enabled { diff --git a/core/ffmpeg/transcoder_test.go b/core/ffmpeg/transcoder_test.go new file mode 100644 index 000000000..8488aa0de --- /dev/null +++ b/core/ffmpeg/transcoder_test.go @@ -0,0 +1,30 @@ +package ffmpeg + +import ( + "testing" +) + +func TestFFmpegCommand(t *testing.T) { + transcoder := new(Transcoder) + transcoder.ffmpegPath = "/fake/path/ffmpeg" + transcoder.SetSegmentLength(4) + transcoder.SetInput("fakecontent.flv") + transcoder.SetOutputPath("fakeOutput") + transcoder.SetHLSPlaylistLength(10) + + variant := HLSVariant{} + variant.videoBitrate = "1200k" + variant.isAudioPassthrough = true + variant.encoderPreset = "veryfast" + variant.SetVideoFramerate(30) + + transcoder.AddVariant(variant) + + cmd := transcoder.getString() + + expected := "cat fakecontent.flv | /fake/path/ffmpeg -hide_banner -i pipe: -map v:0 -c:v:0 libx264 -b:v:0 1200k -map a:0 -c:a:0 copy -r 30 -g 60 -keyint_min 60 -preset veryfast -var_stream_map \"v:0,a:0 \" -f hls -hls_time 4 -hls_list_size 10 -hls_delete_threshold 10 -hls_flags delete_segments+program_date_time+temp_file -tune zerolatency -sc_threshold 0 -master_pl_name stream.m3u8 -strftime 1 -hls_segment_filename fakeOutput/%v/stream-%s.ts -max_muxing_queue_size 400 fakeOutput/%v/stream.m3u8 2> transcoder.log" + + if cmd != expected { + t.Errorf("ffmpeg command does not match expected. Got %s, want: %s", cmd, expected) + } +}