diff --git a/transcoder/transcoder.go b/transcoder/transcoder.go index 209dacf..b8680b3 100644 --- a/transcoder/transcoder.go +++ b/transcoder/transcoder.go @@ -24,6 +24,7 @@ type Transcoder struct { process *exec.Cmd mediafile *models.Mediafile configuration ffmpeg.Configuration + whiteListProtocols []string } // SetProcessStderrPipe Set the STDERR pipe @@ -51,6 +52,10 @@ func (t *Transcoder) SetConfiguration(v ffmpeg.Configuration) { t.configuration = v } +func (t *Transcoder) SetWhiteListProtocols(availableProtocols []string) { + t.whiteListProtocols = availableProtocols +} + // Process Get transcoding process func (t Transcoder) Process() *exec.Cmd { return t.process @@ -75,6 +80,11 @@ func (t Transcoder) FFprobeExec() string { func (t Transcoder) GetCommand() []string { media := t.mediafile rcommand := append([]string{"-y"}, media.ToStrCommand()...) + + if t.whiteListProtocols != nil { + rcommand = append([]string{"-protocol_whitelist", strings.Join(t.whiteListProtocols, ",")}, rcommand...) + } + return rcommand } @@ -166,6 +176,10 @@ func (t *Transcoder) Initialize(inputPath string, outputPath string) error { command := []string{"-i", inputPath, "-print_format", "json", "-show_format", "-show_streams", "-show_error"} + if t.whiteListProtocols != nil { + command = append([]string{"-protocol_whitelist", strings.Join(t.whiteListProtocols, ",")}, command...) + } + cmd := exec.Command(cfg.FfprobeBin, command...) cmd.Stdout = &outb cmd.Stderr = &errb diff --git a/transcoder/transcored_test.go b/transcoder/transcored_test.go new file mode 100644 index 0000000..694e2a9 --- /dev/null +++ b/transcoder/transcored_test.go @@ -0,0 +1,28 @@ +package transcoder + +import ( + "github.com/stretchr/testify/require" + "github.com/xfrr/goffmpeg/models" + "testing" +) + +func TestTranscoder(t *testing.T) { + t.Run("#SetWhiteListProtocols", func(t *testing.T) { + t.Run("Should not set -protocol_whitelist option if it isn't present", func(t *testing.T) { + ts := Transcoder{} + + ts.SetMediaFile(&models.Mediafile{}) + require.NotEqual(t, ts.GetCommand()[0:2], []string{"-protocol_whitelist", "file,http,https,tcp,tls"}) + require.NotContains(t, ts.GetCommand(), "protocol_whitelist") + }) + + t.Run("Should set -protocol_whitelist option if it's present", func(t *testing.T) { + ts := Transcoder{} + + ts.SetMediaFile(&models.Mediafile{}) + ts.SetWhiteListProtocols([]string{"file","http","https","tcp","tls"}) + + require.Equal(t, ts.GetCommand()[0:2], []string{"-protocol_whitelist", "file,http,https,tcp,tls"}) + }) + }) +}