stream-server/transcoder/transcoder.go

40 lines
879 B
Go

package transcoder
import (
"os/exec"
"os"
"io"
)
func NewTranscoder(stream_key string) (io.WriteCloser, error) {
base_dir, _ := os.UserHomeDir()
command := "ffmpeg"
command_args := []string{
"-probesize", "500",
"-i", "pipe:0",
"-c:a", "libopus",
"-c:v", "vp9",
"-quality", "realtime",
"-speed", "7",
"-tile-columns", "4",
"-frame-parallel", "1",
"-threads", "8",
"-b:v", "1M",
"-g", "30",
"-hls_time", "6",
"-hls_list_size", "4",
"-hls_base_url", "/vid/" + stream_key + "/",
"-hls_segment_type", "fmp4",
"-hls_flags", "delete_segments",
"-hls_flags", "+program_date_time",
"stream.m3u8",
}
transcoder := exec.Command(command, command_args...)
transcoder.Dir = base_dir + "/live/" + stream_key + "/"
data_in, err := transcoder.StdinPipe()
if err != nil {
return nil, err
}
transcoder.Start()
return data_in, nil
}