mirror of https://bitbucket.org/ausocean/av.git
revid: improved logging key value pairs in revid.go
This commit is contained in:
parent
852e714d13
commit
b3a8f2bca3
|
@ -43,7 +43,7 @@ type Config struct {
|
|||
RtmpMethod uint8
|
||||
Packetization uint8
|
||||
QuantizationMode uint8
|
||||
Verbosity uint8
|
||||
Verbosity int8
|
||||
HorizontalFlip uint8
|
||||
VerticalFlip uint8
|
||||
FramesPerClip int
|
||||
|
@ -280,7 +280,7 @@ func (c *Config) Validate(r *Revid) error {
|
|||
}
|
||||
|
||||
if c.Quantization == "" {
|
||||
c.Logger.Log(smartlogger.Warning, "No quantization defined, defaulting to 35!")
|
||||
c.Logger.Log(smartlogger.Warning, "No quantization defined")
|
||||
c.Quantization = defaultQuantization
|
||||
} else {
|
||||
if integer, err := strconv.Atoi(c.Quantization); integer < 0 || integer > 51 || err != nil {
|
||||
|
|
|
@ -31,7 +31,7 @@ package revid
|
|||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
_ "fmt"
|
||||
"io"
|
||||
"os"
|
||||
"os/exec"
|
||||
|
@ -145,14 +145,14 @@ func (r *Revid) reset(config Config) error {
|
|||
r.config.Logger = config.Logger
|
||||
err := config.Validate(r)
|
||||
if err != nil {
|
||||
return errors.New("Config struct is bad!: " + err.Error())
|
||||
return errors.New("Config struct is bad: " + err.Error())
|
||||
}
|
||||
r.config = config
|
||||
|
||||
if r.destination != nil {
|
||||
err = r.destination.close()
|
||||
if err != nil {
|
||||
r.config.Logger.Log(smartlogger.Error, err.Error())
|
||||
r.config.Logger.Log(smartlogger.Error, "Could not close destination", "error", err.Error())
|
||||
}
|
||||
}
|
||||
switch r.config.Output {
|
||||
|
@ -186,10 +186,10 @@ func (r *Revid) reset(config Config) error {
|
|||
}
|
||||
switch r.config.InputCodec {
|
||||
case H264:
|
||||
r.config.Logger.Log(smartlogger.Info, "using H264 lexer")
|
||||
r.config.Logger.Log(smartlogger.Info, "Using H264 lexer")
|
||||
r.lexTo = lex.H264
|
||||
case Mjpeg:
|
||||
r.config.Logger.Log(smartlogger.Info, "using MJPEG lexer")
|
||||
r.config.Logger.Log(smartlogger.Info, "Using MJPEG lexer")
|
||||
r.lexTo = lex.MJPEG
|
||||
}
|
||||
|
||||
|
@ -297,16 +297,17 @@ func (r *Revid) packClips() {
|
|||
case frame := <-r.encoder.Stream():
|
||||
lenOfFrame := len(frame)
|
||||
if lenOfFrame > ringBufferElementSize {
|
||||
r.config.Logger.Log(smartlogger.Warning, fmt.Sprintf("Frame was too big: %v bytes, getting another one!", lenOfFrame))
|
||||
r.config.Logger.Log(smartlogger.Warning, "Frame was too big", "frame size", lenOfFrame)
|
||||
frame = r.getFrame()
|
||||
lenOfFrame = len(frame)
|
||||
}
|
||||
_, err := r.ringBuffer.Write(frame)
|
||||
if err != nil {
|
||||
if err == ring.ErrDropped {
|
||||
r.config.Logger.Log(smartlogger.Warning, fmt.Sprintf("dropped %d byte frame", len(frame)))
|
||||
r.config.Logger.Log(smartlogger.Warning, "dropped frame", "frame size", len(frame))
|
||||
} else {
|
||||
r.config.Logger.Log(smartlogger.Error, err.Error())
|
||||
r.config.Logger.Log(smartlogger.Error, "Unexpected ringbuffer write error",
|
||||
"error", err.Error())
|
||||
}
|
||||
}
|
||||
packetCount++
|
||||
|
@ -352,31 +353,31 @@ func (r *Revid) outputClips() {
|
|||
r.config.Logger.Log(smartlogger.Debug, "About to send")
|
||||
err = r.destination.load(chunk)
|
||||
if err != nil {
|
||||
r.config.Logger.Log(smartlogger.Error, "failed to load clip")
|
||||
r.config.Logger.Log(smartlogger.Error, "Failed to load clip")
|
||||
}
|
||||
err = r.destination.send()
|
||||
if err == nil {
|
||||
r.config.Logger.Log(smartlogger.Debug, "sent clip")
|
||||
r.config.Logger.Log(smartlogger.Debug, "Sent clip")
|
||||
}
|
||||
|
||||
if r.isRunning && err != nil && chunk.Len() > 11 {
|
||||
r.config.Logger.Log(smartlogger.Debug, "Send failed! Trying again")
|
||||
// Try and send again
|
||||
err = r.destination.send()
|
||||
r.config.Logger.Log(smartlogger.Error, err.Error())
|
||||
r.config.Logger.Log(smartlogger.Error, "Destination send error", "error", err.Error())
|
||||
|
||||
// if there's still an error we try and reconnect, unless we're stopping
|
||||
for r.isRunning && err != nil {
|
||||
r.config.Logger.Log(smartlogger.Debug, "Send failed a again! Trying to reconnect...")
|
||||
time.Sleep(time.Duration(sendFailedDelay) * time.Millisecond)
|
||||
r.config.Logger.Log(smartlogger.Error, err.Error())
|
||||
r.config.Logger.Log(smartlogger.Error, "Send failed with error", "error", err.Error())
|
||||
|
||||
if rs, ok := r.destination.(restarter); ok {
|
||||
r.config.Logger.Log(smartlogger.Debug, fmt.Sprintf("restarting %T session", rs))
|
||||
r.config.Logger.Log(smartlogger.Debug, "restarting session", "session", rs)
|
||||
err = rs.restart()
|
||||
if err != nil {
|
||||
// TODO(kortschak): Make this "Fatal" when that exists.
|
||||
r.config.Logger.Log(smartlogger.Error, "failed to restart rtmp session")
|
||||
r.config.Logger.Log(smartlogger.Error, "failed to restart rtmp session", "error", err.Error())
|
||||
r.isRunning = false
|
||||
return
|
||||
}
|
||||
|
@ -386,7 +387,7 @@ func (r *Revid) outputClips() {
|
|||
r.config.Logger.Log(smartlogger.Debug, "Trying to send again with new connection...")
|
||||
err = r.destination.send()
|
||||
if err != nil {
|
||||
r.config.Logger.Log(smartlogger.Error, err.Error())
|
||||
r.config.Logger.Log(smartlogger.Error, "Send failed with error", "error", err.Error())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -401,16 +402,16 @@ func (r *Revid) outputClips() {
|
|||
if deltaTime > bitrateTime {
|
||||
// FIXME(kortschak): For subsecond deltaTime, this will give infinite bitrate.
|
||||
r.bitrate = int(float64(bytes*8) / float64(deltaTime/time.Second))
|
||||
r.config.Logger.Log(smartlogger.Debug, fmt.Sprintf("Bitrate: %v bits/s\n", r.bitrate))
|
||||
r.config.Logger.Log(smartlogger.Debug, fmt.Sprintf("Ring buffer size: %v\n", r.ringBuffer.Len()))
|
||||
r.config.Logger.Log(smartlogger.Debug, "Bitrate (bits/s)", "bitrate", r.bitrate)
|
||||
r.config.Logger.Log(smartlogger.Debug, "Ring buffer size", "value", r.ringBuffer.Len())
|
||||
prevTime = now
|
||||
bytes = 0
|
||||
}
|
||||
}
|
||||
r.config.Logger.Log(smartlogger.Info, "Not outputting clips anymore!")
|
||||
r.config.Logger.Log(smartlogger.Info, "Not outputting clips anymore")
|
||||
err := r.destination.close()
|
||||
if err != nil {
|
||||
r.config.Logger.Log(smartlogger.Error, "failed to close destination")
|
||||
r.config.Logger.Log(smartlogger.Error, "Failed to close destination", "error", err.Error())
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -420,32 +421,42 @@ func (r *Revid) startRaspivid() error {
|
|||
r.config.Logger.Log(smartlogger.Info, "Starting raspivid!")
|
||||
switch r.config.InputCodec {
|
||||
case H264:
|
||||
args := []string{
|
||||
"-cd", "H264",
|
||||
"-o", "-",
|
||||
"-n",
|
||||
"-t", runContinuously,
|
||||
"-b", r.config.Bitrate,
|
||||
"-w", r.config.Width,
|
||||
"-h", r.config.Height,
|
||||
"-fps", r.config.FrameRate,
|
||||
"-ih",
|
||||
"-g", r.config.IntraRefreshPeriod,
|
||||
}
|
||||
// FIXME(saxon): consider using a map right from the start to store
|
||||
// the raspivid args
|
||||
raspiArgs := make(map[string]string)
|
||||
raspiArgs["-cd"] = "H264"
|
||||
raspiArgs["-o"] = "-"
|
||||
raspiArgs["-n"] = ""
|
||||
raspiArgs["-t"] = runContinuously
|
||||
raspiArgs["-b"] = r.config.Bitrate
|
||||
raspiArgs["-w"] = r.config.Width
|
||||
raspiArgs["-h"] = r.config.Height
|
||||
raspiArgs["-fps"] = r.config.FrameRate
|
||||
raspiArgs["-ih"] = ""
|
||||
raspiArgs["-g"] = r.config.IntraRefreshPeriod
|
||||
|
||||
if r.config.QuantizationMode == QuantizationOn {
|
||||
args = append(args, "-qp", r.config.Quantization)
|
||||
raspiArgs["-qp"] = r.config.Quantization
|
||||
}
|
||||
if r.config.HorizontalFlip == Yes {
|
||||
args = append(args, "-hf")
|
||||
raspiArgs["-hf"] = strconv.Itoa(int(r.config.HorizontalFlip))
|
||||
}
|
||||
if r.config.VerticalFlip == Yes {
|
||||
args = append(args, "-vf")
|
||||
raspiArgs["-vf"] = strconv.Itoa(int(r.config.VerticalFlip))
|
||||
}
|
||||
// Log all the args and create []string
|
||||
args := make([]string, 0)
|
||||
for i := range raspiArgs {
|
||||
r.config.Logger.Log(smartlogger.Info, "Raspivid arg", i, raspiArgs[i])
|
||||
// First append the flag
|
||||
args = append(args, i)
|
||||
// and now append any values for the flag
|
||||
args = append(args, raspiArgs[i])
|
||||
}
|
||||
|
||||
r.config.Logger.Log(smartlogger.Info, fmt.Sprintf("Starting raspivid with args: %v", args))
|
||||
r.cmd = exec.Command("raspivid", args...)
|
||||
|
||||
case Mjpeg:
|
||||
// FIXME(saxon): do above in this case too
|
||||
r.cmd = exec.Command("raspivid",
|
||||
"-cd", "MJPEG",
|
||||
"-o", "-",
|
||||
|
|
|
@ -28,8 +28,8 @@ LICENSE
|
|||
package revid
|
||||
|
||||
import (
|
||||
"testing"
|
||||
"time"
|
||||
_ "testing"
|
||||
_ "time"
|
||||
)
|
||||
|
||||
/*
|
||||
|
@ -143,7 +143,7 @@ func TestRtmpOutputUsingLibRtmp(t *testing.T){
|
|||
revidInst.Stop()
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
// Test revidInst with a Raspivid h264 input
|
||||
func TestRaspividToRtmp(t *testing.T) {
|
||||
config := Config{
|
||||
|
@ -157,7 +157,7 @@ func TestRaspividToRtmp(t *testing.T) {
|
|||
Packetization: Flv,
|
||||
FrameRate: "25",
|
||||
}
|
||||
revidInst, err := New(config)
|
||||
revidInst, err := New(config, nil)
|
||||
if err != nil {
|
||||
t.Errorf("Should not have got an error!")
|
||||
return
|
||||
|
@ -166,3 +166,4 @@ func TestRaspividToRtmp(t *testing.T) {
|
|||
time.Sleep(43200 * time.Second)
|
||||
revidInst.Stop()
|
||||
}
|
||||
*/
|
||||
|
|
Loading…
Reference in New Issue