diff --git a/revid/Config.go b/revid/Config.go index c5bb93ab..f7ea321d 100644 --- a/revid/Config.go +++ b/revid/Config.go @@ -41,7 +41,6 @@ type Config struct { Input uint8 InputCodec uint8 Output uint8 - RtmpEncodingMethod uint8 RtmpMethod uint8 Packetization uint8 QuantizationMode uint8 @@ -187,7 +186,7 @@ func (config *Config) Validate(r *revidInst) error { case Ffmpeg: case NothingDefined: r.Log(Warning, "No RTMP encoding method defined, defautling to ffmpeg!") - config.RtmpEncodingMethod = Ffmpeg + config.RtmpMethod = Ffmpeg default: return errors.New("Bad rtmp method defined in config!") } diff --git a/revid/RevidCLI.go b/revid/RevidCLI.go new file mode 100644 index 00000000..f2c49e8b --- /dev/null +++ b/revid/RevidCLI.go @@ -0,0 +1,134 @@ +package main + +import ( + "flag" +) + +const ( + inputPtr = 0 + inputCodecPtr = 1 + outputPtr = 2 + rtmpMethodPtr = 3 + packetisationPtr = 4 + quantizationModePtr = 5 + verbosityPtr = 6 + framesPerClipPrt = 7 + rtmpUrlPtr = 8 + bitratePtr = 9 + outputFileNamePtr = 10 + inputFileNamePtr = 11 + heightPtr = 12 + widthPtr = 13 + frameRatePtr = 14 + httpAddressPtr = 15 + quantizationPtr = 18 + timeoutPtr = 19 + intraRefreshPeriodPtr = 20 + sleepTime = 2 * 43200 +) + +func main() { + flagNames := [19][2]string{ + {"Input", "The input type"}, + {"InputCodec", "The codec of the input"}, + {"Output", "The output type"}, + {"RtmpMethod", "The method used to send over rtmp (ffmpeg or librtmp)"}, + {"Packetization", "The method of data packetisation"}, + {"QuantizationMode", "The level of quantization"}, + {"Verbosity", "Verbosity on or off"}, + {"FramesPerClip", "Number of frames per clip sent"}, + {"RtmpUrl", "Url of rtmp endpoint"}, + {"Bitrate", "Bitrate of recorded video"}, + {"OutputFileName", "The directory of the output file"}, + {"InputFileName", "The directory of the input file"}, + {"Height", "Height in pixels"}, + {"Width", "Width in pixels"}, + {"FrameRate", "Frame rate of captured video"}, + {"HttpAddress", "Destination address of http posts"}, + {"Quantization", "Desired quantization value"}, + {"Timeout", "Http timeout in seconds"}, + {"IntraRefreshPeriod", "The IntraRefreshPeriod i.e. how many keyframes we send"}, + } + + var flags [20](*string) + for i := 0; i < 20; i++ { + flags[i] = flag.String(flagNames[i][0], "", flagNames[i][1]) + } + + flag.Parse() + config := Config{} + + switch flags[inputPtr] { + case "Raspivid": + config.Input = Raspivid + case "Rtp": + config.Input = Rtp + case "File": + config.Input = File + } + + switch flags[inputCodecPtr] { + case "H264Codec": + config.InputCodec = H264Codec + } + + switch flags[outputPtr] { + case "File": + config.Output = File + case "Http": + config.Output = Http + case "Rtmp": + config.Output = Rtmp + } + + switch flags[rtmpMethodPtr] { + case "Ffmpeg": + config.RtmpMethod = Ffmpeg + case "LibRtmp": + config.RtmpMethod = LibRtmp + } + + switch flags[packetisationPtr] { + case "None": + config.Packetisation = None + case "Rtp": + config.Packetisation = Rtp + case "Flv": + config.Packetisation = Flv + } + + switch flags[quantisationModePtr] { + case "QuantizationOn": + config.Quantization = QuantizationOn + case "QuantizationOff": + config.Quantization = QuantizationOff + } + + switch flags[verbosityPtr] { + case "No": + config.Verbosity = No + case "Yes": + config.Verbosity = Yes + } + + config.FramesPerClip = flags[framesPerClipPtr] + config.RtmpUrl = flags[rtmpUrlPtr] + config.Bitrate = flags[bitratePtr] + config.OutputFileName = flags[outputFileNamePtr] + config.InputFileName = flags[inputFileNamePtr] + config.Height = flags[heightPtr] + config.Width = flags[widthPtr] + config.FrameRate = flags[frameRatePtr] + config.HttpAddress = flags[httpAddressPtr] + config.Quantization = flags[quantisationPtr] + config.Timeout = flags[timeoutPtr] + config.IntraRefreshPeriod = flags[intraRefreshPeriodPtr] + + revidInst, err := NewRevidInstance(config) + if err != nil { + fmt.Println(err) + } + revidInst.Start() + time.Sleep(sleepTime * time.Second) + revidInst.Stop() +}