feat: 导出CSV加HLS代理列,按IP排序

This commit is contained in:
tian 2026-07-27 15:11:09 +08:00
parent 7c1fea3620
commit 7b8cf92b87
2 changed files with 24 additions and 7 deletions

View File

@ -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))
}
}

Binary file not shown.