51 lines
1.1 KiB
Go
51 lines
1.1 KiB
Go
package weblive
|
||
|
||
import (
|
||
"net/http"
|
||
"strings"
|
||
"time"
|
||
|
||
"github.com/gin-gonic/gin"
|
||
)
|
||
|
||
// liveQualitySet 与前端开播档位一致;非法 query 回落为 high
|
||
var liveQualitySet = map[string]struct{}{
|
||
"source": {}, "high": {}, "mid": {}, "low": {},
|
||
}
|
||
|
||
func normalizeQuality(q string) string {
|
||
q = strings.TrimSpace(strings.ToLower(q))
|
||
if _, ok := liveQualitySet[q]; ok {
|
||
return q
|
||
}
|
||
return "high"
|
||
}
|
||
|
||
func liveQualityList() []gin.H {
|
||
return []gin.H{
|
||
{"id": "source", "label": "原画(设备默认)"},
|
||
{"id": "high", "label": "高清 720p"},
|
||
{"id": "mid", "label": "标清 480p"},
|
||
{"id": "low", "label": "流畅 360p"},
|
||
}
|
||
}
|
||
|
||
// handleLiveInfo 仅 GET、无请求体、不读 query;只输出直播状态与画质元数据
|
||
func handleLiveInfo(c *gin.Context) {
|
||
h, herr := getHub()
|
||
live := false
|
||
cq := ""
|
||
if herr == nil {
|
||
h.mu.RLock()
|
||
live = h.publishConn != nil && h.pubPC != nil && len(h.forwarders) > 0
|
||
cq = h.publishQuality
|
||
h.mu.RUnlock()
|
||
}
|
||
c.JSON(http.StatusOK, gin.H{
|
||
"live": live,
|
||
"qualities": liveQualityList(),
|
||
"current_quality": cq,
|
||
"ts": time.Now().UnixMilli(),
|
||
})
|
||
}
|