Add the possibility to change whitelist protocols

This commit is contained in:
Stanislav Morozov
2020-04-11 01:52:28 +03:00
parent c3a1545b29
commit fd973f7a7c
2 changed files with 42 additions and 0 deletions

View File

@@ -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

View File

@@ -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"})
})
})
}