mirror of
https://github.com/owncast/owncast.git
synced 2024-10-10 19:16:02 +00:00
Make video segment filename unique (#214)
* Make video segment filename unique * fix typo * Remove type casting function
This commit is contained in:
parent
48c8cf5ed2
commit
6946d4b3ea
@ -8,6 +8,7 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
log "github.com/sirupsen/logrus"
|
log "github.com/sirupsen/logrus"
|
||||||
|
"github.com/teris-io/shortid"
|
||||||
|
|
||||||
"github.com/gabek/owncast/config"
|
"github.com/gabek/owncast/config"
|
||||||
"github.com/gabek/owncast/utils"
|
"github.com/gabek/owncast/utils"
|
||||||
@ -25,6 +26,7 @@ type Transcoder struct {
|
|||||||
segmentLengthSeconds int
|
segmentLengthSeconds int
|
||||||
appendToStream bool
|
appendToStream bool
|
||||||
ffmpegPath string
|
ffmpegPath string
|
||||||
|
segmentIdentifier string
|
||||||
}
|
}
|
||||||
|
|
||||||
// HLSVariant is a combination of settings that results in a single HLS stream
|
// HLSVariant is a combination of settings that results in a single HLS stream
|
||||||
@ -103,6 +105,10 @@ func (t *Transcoder) getString() string {
|
|||||||
hlsOptionFlags = append(hlsOptionFlags, "append_list")
|
hlsOptionFlags = append(hlsOptionFlags, "append_list")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if t.segmentIdentifier == "" {
|
||||||
|
t.segmentIdentifier = shortid.MustGenerate()
|
||||||
|
}
|
||||||
|
|
||||||
ffmpegFlags := []string{
|
ffmpegFlags := []string{
|
||||||
"cat", t.input, "|",
|
"cat", t.input, "|",
|
||||||
t.ffmpegPath,
|
t.ffmpegPath,
|
||||||
@ -125,7 +131,7 @@ func (t *Transcoder) getString() string {
|
|||||||
// Filenames
|
// Filenames
|
||||||
"-master_pl_name", "stream.m3u8",
|
"-master_pl_name", "stream.m3u8",
|
||||||
"-strftime 1", // Support the use of strftime in filenames
|
"-strftime 1", // Support the use of strftime in filenames
|
||||||
"-hls_segment_filename", path.Join(t.segmentOutputPath, "/%v/stream-%s.ts"), // Each segment's filename
|
"-hls_segment_filename", path.Join(t.segmentOutputPath, "/%v/stream-%s-"+t.segmentIdentifier+".ts"), // Each segment's filename
|
||||||
"-max_muxing_queue_size", "400", // Workaround for Too many packets error: https://trac.ffmpeg.org/ticket/6375?cversion=0
|
"-max_muxing_queue_size", "400", // Workaround for Too many packets error: https://trac.ffmpeg.org/ticket/6375?cversion=0
|
||||||
path.Join(t.segmentOutputPath, "/%v/stream.m3u8"), // Each variant's playlist
|
path.Join(t.segmentOutputPath, "/%v/stream.m3u8"), // Each variant's playlist
|
||||||
"2> transcoder.log",
|
"2> transcoder.log",
|
||||||
@ -353,3 +359,8 @@ func (t *Transcoder) SetSegmentLength(seconds int) {
|
|||||||
func (t *Transcoder) SetAppendToStream(append bool) {
|
func (t *Transcoder) SetAppendToStream(append bool) {
|
||||||
t.appendToStream = append
|
t.appendToStream = append
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SetIdentifer enables appending a unique identifier to segment file name
|
||||||
|
func (t *Transcoder) SetIdentifier(output string) {
|
||||||
|
t.segmentIdentifier = output
|
||||||
|
}
|
||||||
|
@ -11,6 +11,7 @@ func TestFFmpegCommand(t *testing.T) {
|
|||||||
transcoder.SetInput("fakecontent.flv")
|
transcoder.SetInput("fakecontent.flv")
|
||||||
transcoder.SetOutputPath("fakeOutput")
|
transcoder.SetOutputPath("fakeOutput")
|
||||||
transcoder.SetHLSPlaylistLength(10)
|
transcoder.SetHLSPlaylistLength(10)
|
||||||
|
transcoder.SetIdentifier("jdofFGg")
|
||||||
|
|
||||||
variant := HLSVariant{}
|
variant := HLSVariant{}
|
||||||
variant.videoBitrate = 1200
|
variant.videoBitrate = 1200
|
||||||
@ -22,7 +23,7 @@ func TestFFmpegCommand(t *testing.T) {
|
|||||||
|
|
||||||
cmd := transcoder.getString()
|
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 -maxrate:v:0 1272k -bufsize:v:0 1440k -g:v:0 119 -x264-params:v:0 "scenecut=0:open_gop=0:min-keyint=119:keyint=119" -map a:0 -c:a:0 copy -r 30 -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`
|
expected := `cat fakecontent.flv | /fake/path/ffmpeg -hide_banner -i pipe: -map v:0 -c:v:0 libx264 -b:v:0 1200k -maxrate:v:0 1272k -bufsize:v:0 1440k -g:v:0 119 -x264-params:v:0 "scenecut=0:open_gop=0:min-keyint=119:keyint=119" -map a:0 -c:a:0 copy -r 30 -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-jdofFGg.ts -max_muxing_queue_size 400 fakeOutput/%v/stream.m3u8 2> transcoder.log`
|
||||||
|
|
||||||
if cmd != expected {
|
if cmd != expected {
|
||||||
t.Errorf("ffmpeg command does not match expected. Got %s, want: %s", cmd, expected)
|
t.Errorf("ffmpeg command does not match expected. Got %s, want: %s", cmd, expected)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user