mirror of https://bitbucket.org/ausocean/av.git
135 lines
3.3 KiB
Go
135 lines
3.3 KiB
Go
|
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()
|
||
|
}
|