Корректировка видеокамеры
This commit is contained in:
@@ -1,4 +1,3 @@
|
||||
// cmd/server/main.go
|
||||
package main
|
||||
|
||||
import (
|
||||
@@ -12,6 +11,7 @@ import (
|
||||
"log"
|
||||
"net/http"
|
||||
"os"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"gpio-monitor/internal/adapter"
|
||||
@@ -79,8 +79,8 @@ func (a *API) HandleHistory(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
|
||||
func (a *API) HandleStream(w http.ResponseWriter, r *http.Request) {
|
||||
// Проверяем доступность go2rtc
|
||||
resp, err := http.Get("http://localhost:1984/api/streams?src=cam")
|
||||
// Проверяем доступность MJPEG потока в go2rtc
|
||||
resp, err := http.Get("http://localhost:1984/api/streams?src=cam_mjpeg")
|
||||
camAvailable := err == nil && resp.StatusCode == 200
|
||||
if resp != nil {
|
||||
resp.Body.Close()
|
||||
@@ -89,17 +89,15 @@ func (a *API) HandleStream(w http.ResponseWriter, r *http.Request) {
|
||||
writeJSON(w, map[string]interface{}{
|
||||
"cam": "/api/cam",
|
||||
"available": camAvailable,
|
||||
"source": fmt.Sprintf("http://%s:1984/api/stream.mjpeg?src=cam", r.Host),
|
||||
"source": fmt.Sprintf("http://%s:1984/api/stream.mjpeg?src=cam_mjpeg", strings.Split(r.Host, ":")[0]),
|
||||
})
|
||||
}
|
||||
|
||||
// Прокси для MJPEG потока с go2rtc
|
||||
// Прокси для MJPEG потока — просто ретранслирует готовый поток из go2rtc
|
||||
func handleCamProxy(w http.ResponseWriter, r *http.Request) {
|
||||
log.Printf("[cam] proxy request from %s", r.RemoteAddr)
|
||||
|
||||
resp, err := http.Get(
|
||||
"http://127.0.0.1:1984/api/stream.mjpeg?src=cam",
|
||||
)
|
||||
resp, err := http.Get("http://127.0.0.1:1984/api/stream.mjpeg?src=cam_mjpeg")
|
||||
if err != nil {
|
||||
log.Printf("[cam] go2rtc unavailable: %v", err)
|
||||
http.Error(w, "camera unavailable", 503)
|
||||
@@ -107,6 +105,7 @@ func handleCamProxy(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
// Прокидываем заголовки
|
||||
for k, vv := range resp.Header {
|
||||
for _, v := range vv {
|
||||
w.Header().Add(k, v)
|
||||
@@ -114,7 +113,6 @@ func handleCamProxy(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
|
||||
w.Header().Set("Access-Control-Allow-Origin", "*")
|
||||
|
||||
w.WriteHeader(resp.StatusCode)
|
||||
|
||||
flusher, ok := w.(http.Flusher)
|
||||
@@ -134,7 +132,6 @@ func handleCamProxy(w http.ResponseWriter, r *http.Request) {
|
||||
log.Printf("[cam] client disconnected")
|
||||
return
|
||||
}
|
||||
|
||||
flusher.Flush()
|
||||
}
|
||||
|
||||
@@ -243,4 +240,4 @@ func main() {
|
||||
log.Println("Server started on :8080")
|
||||
log.Println("Camera proxy available at /api/cam")
|
||||
log.Fatal(http.ListenAndServe(":8080", nil))
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user