mirror of
https://github.com/AlexxIT/go2rtc.git
synced 2025-10-06 00:37:00 +08:00
Refactored code to resize JPEG snapshot if "h" parameter exists in the URL query
This commit is contained in:
@@ -892,6 +892,7 @@ API examples:
|
|||||||
|
|
||||||
- MJPEG stream: `http://192.168.1.123:1984/api/stream.mjpeg?src=camera1`
|
- MJPEG stream: `http://192.168.1.123:1984/api/stream.mjpeg?src=camera1`
|
||||||
- JPEG snapshots: `http://192.168.1.123:1984/api/frame.jpeg?src=camera1`
|
- JPEG snapshots: `http://192.168.1.123:1984/api/frame.jpeg?src=camera1`
|
||||||
|
- JPEG snapshot resized to 100px: `http://192.168.1.123:1984/api/frame.jpeg?src=camera1&h=100`
|
||||||
|
|
||||||
### Module: Log
|
### Module: Log
|
||||||
|
|
||||||
|
@@ -2,11 +2,17 @@ package ffmpeg
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
|
"fmt"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TranscodeToJPEG(b []byte) ([]byte, error) {
|
func TranscodeToJPEG(b []byte, height ...int) ([]byte, error) {
|
||||||
cmd := exec.Command(defaults["bin"], "-hide_banner", "-i", "-", "-f", "mjpeg", "-")
|
cmdArgs := []string{defaults["bin"], "-hide_banner", "-i", "-", "-f", "mjpeg"}
|
||||||
|
if len(height) > 0 {
|
||||||
|
cmdArgs = append(cmdArgs, "-vf", fmt.Sprintf("scale=-1:%d", height[0]))
|
||||||
|
}
|
||||||
|
cmdArgs = append(cmdArgs, "-")
|
||||||
|
cmd := exec.Command(cmdArgs[0], cmdArgs[1:]...)
|
||||||
cmd.Stdin = bytes.NewBuffer(b)
|
cmd.Stdin = bytes.NewBuffer(b)
|
||||||
return cmd.Output()
|
return cmd.Output()
|
||||||
}
|
}
|
||||||
|
@@ -60,10 +60,23 @@ func handlerKeyframe(w http.ResponseWriter, r *http.Request) {
|
|||||||
case core.CodecH264, core.CodecH265:
|
case core.CodecH264, core.CodecH265:
|
||||||
ts := time.Now()
|
ts := time.Now()
|
||||||
var err error
|
var err error
|
||||||
|
// Resize image if "h" parameter exists
|
||||||
|
if hParam := r.URL.Query().Get("h"); hParam != "" {
|
||||||
|
h, err := strconv.Atoi(hParam)
|
||||||
|
if err != nil {
|
||||||
|
http.Error(w, "Invalid height parameter", http.StatusBadRequest)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if data, err = ffmpeg.TranscodeToJPEG(data, h); err != nil {
|
||||||
|
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
} else {
|
||||||
if data, err = ffmpeg.TranscodeToJPEG(data); err != nil {
|
if data, err = ffmpeg.TranscodeToJPEG(data); err != nil {
|
||||||
http.Error(w, err.Error(), http.StatusInternalServerError)
|
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
}
|
||||||
log.Debug().Msgf("[mjpeg] transcoding time=%s", time.Since(ts))
|
log.Debug().Msgf("[mjpeg] transcoding time=%s", time.Since(ts))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user