diff --git a/internal/web/ui.go b/internal/web/ui.go index 4c485af..708c182 100644 --- a/internal/web/ui.go +++ b/internal/web/ui.go @@ -1675,16 +1675,20 @@ func (u *UI) actionDevicesExportChannels(w http.ResponseWriter, r *http.Request) w.Header().Set("Content-Type", "text/csv; charset=utf-8") w.Header().Set("Content-Disposition", "attachment; filename=video_channels.csv") w.Write([]byte("\xef\xbb\xbf")) - w.Write([]byte("设备名,IP,视频源,RTSP地址,HLS地址\n")) + w.Write([]byte("设备名,IP,视频源,RTSP地址,HLS地址,HLS代理地址\n")) if u.preview == nil { return } units, _ := u.preview.ListRecognitionUnits() + type row struct { + devName, devIP, devID, unitName, sourceName, rtsp, hls, proxyHLS string + } + var rows []row for _, unit := range units { - // Find which device this unit is assigned to devName := "" devIP := "" + devID := "" for _, dev := range devices { if dev == nil { continue @@ -1694,6 +1698,7 @@ func (u *UI) actionDevicesExportChannels(w http.ResponseWriter, r *http.Request) if ref == unit.Ref { devName = dev.DisplayName() devIP = dev.IP + devID = dev.DeviceID break } } @@ -1709,11 +1714,23 @@ func (u *UI) actionDevicesExportChannels(w http.ResponseWriter, r *http.Request) if rtspPort == "" { rtspPort = "8555" } - rtsp := fmt.Sprintf("rtsp://%s:%s/live/%s", devIP, rtspPort, unit.Name) - hls := fmt.Sprintf("http://%s:9000/hls/%s/index.m3u8", devIP, unit.Name) - fmt.Fprintf(w, "%s,%s,%s,%s,%s\n", - escapeCSV(devName), escapeCSV(devIP), - escapeCSV(unit.VideoSourceRef), escapeCSV(rtsp), escapeCSV(hls)) + rows = append(rows, row{ + devName, devIP, devID, unit.Name, unit.VideoSourceRef, + fmt.Sprintf("rtsp://%s:%s/live/%s", devIP, rtspPort, unit.Name), + fmt.Sprintf("http://%s:9000/hls/%s/index.m3u8", devIP, unit.Name), + fmt.Sprintf("http://管理端IP:18080/hls/%s/hls/%s/index.m3u8", devID, unit.Name), + }) + } + sort.Slice(rows, func(i, j int) bool { + if rows[i].devIP != rows[j].devIP { + return rows[i].devIP < rows[j].devIP + } + return rows[i].unitName < rows[j].unitName + }) + for _, r := range rows { + fmt.Fprintf(w, "%s,%s,%s,%s,%s,%s\n", + escapeCSV(r.devName), escapeCSV(r.devIP), + escapeCSV(r.sourceName), escapeCSV(r.rtsp), escapeCSV(r.hls), escapeCSV(r.proxyHLS)) } } diff --git a/safesightd-linux-arm64 b/safesightd-linux-arm64 index ab1cac3..4b2cf5e 100644 Binary files a/safesightd-linux-arm64 and b/safesightd-linux-arm64 differ