package ffmpegServer import ( "context" "errors" ffmpegCmd "github.com/u2takey/ffmpeg-go" "os/exec" "path/filepath" "strings" ) func PrepareUrl(url string) (string, bool) { if url == "" { return "", false } urlArr := strings.Split(url, "?") if len(urlArr) > 2 { return "", false } url = urlArr[0] return url, true } func PrepareStreamPath(streamPath string) (string, bool) { streamArr := strings.Split(streamPath, "/") if len(streamArr) != 2 { return "", false } streamPath = filepath.Join(streamArr...) return streamPath, true } func ProbeWithTimeout(url string, timeoutMs int) error { args := ffmpegCmd.ConvertKwargsToCmdLineArgs(ffmpegCmd.KwArgs{ "stimeout": timeoutMs * 1000, "loglevel": "error", }) args = append(args, url) ctx := context.Background() cmd := exec.CommandContext(ctx, "ffprobe", args...) errBuf := new(strings.Builder) cmd.Stderr = errBuf err := cmd.Run() if err != nil { errStr := strings.TrimSpace(errBuf.String()) return errors.New(errStr) } return nil }