diff --git a/api.go b/api.go index de1d4ef..46de85b 100644 --- a/api.go +++ b/api.go @@ -131,10 +131,11 @@ func startApiServer(addr string) { apiServer.router.HandleFunc("/api/v1/streams/statistics", nil) // 统计所有推拉流 if stream.AppConfig.GB28181.Enable { - apiServer.router.HandleFunc("/ws/v1/gb28181/talk", apiServer.OnGBTalk) // 对讲的主讲人WebSocket连接 - apiServer.router.HandleFunc("/api/v1/control/ws-talk/{device}/{channel}", apiServer.OnGBTalk) // 对讲的主讲人WebSocket连接 - apiServer.router.HandleFunc("/api/v1/gb28181/source/create", withJsonParams(apiServer.OnGBOfferCreate, &SourceSDP{})) - apiServer.router.HandleFunc("/api/v1/gb28181/answer/set", withJsonParams(apiServer.OnGBSourceConnect, &SourceSDP{})) // 应答的sdp, 如果是active模式拉流, 设置对方的地址. 下载文件设置文件大小 + apiServer.router.HandleFunc("/ws/v1/gb28181/talk", apiServer.OnGBTalk) // 对讲的主讲人WebSocket连接 + apiServer.router.HandleFunc("/api/v1/control/ws-talk/{device}/{channel}", apiServer.OnGBTalk) // 对讲的主讲人WebSocket连接 + apiServer.router.HandleFunc("/api/v1/gb28181/source/create", withJsonParams(apiServer.OnGBOfferCreate, &SourceSDP{})) // 创建国标源 + apiServer.router.HandleFunc("/api/v1/gb28181/answer/set", withJsonParams(apiServer.OnGBSourceConnect, &SourceSDP{})) // 设置应答sdp, 如果是active模式拉流, 设置对方的地址. 下载文件设置文件大小 + apiServer.router.HandleFunc("/api/v1/gb28181/speed/set", withJsonParams(apiServer.OnGBSpeedSet, &SourceSDP{})) } apiServer.router.HandleFunc("/api/v1/gc/force", func(writer http.ResponseWriter, request *http.Request) { diff --git a/api_gb.go b/api_gb.go index afbe86e..cab197f 100644 --- a/api_gb.go +++ b/api_gb.go @@ -24,20 +24,20 @@ const ( ) type SDP struct { - SessionName string `json:"session_name,omitempty"` // play/download/playback/talk/broadcast - Addr string `json:"addr,omitempty"` // 连接地址 - SSRC string `json:"ssrc,omitempty"` - Setup string `json:"setup,omitempty"` // active/passive - Transport string `json:"transport,omitempty"` // tcp/udp - Speed int `json:"speed,omitempty"` - StartTime int `json:"start_time,omitempty"` - EndTime int `json:"end_time,omitempty"` - FileSize int `json:"file_size,omitempty"` + SessionName string `json:"session_name,omitempty"` // play/download/playback/talk/broadcast + Addr string `json:"addr,omitempty"` // 连接地址 + SSRC string `json:"ssrc,omitempty"` + Setup string `json:"setup,omitempty"` // active/passive + Transport string `json:"transport,omitempty"` // tcp/udp + Speed float64 `json:"speed,omitempty"` + StartTime int `json:"start_time,omitempty"` + EndTime int `json:"end_time,omitempty"` + FileSize int `json:"file_size,omitempty"` } type DownloadInfo struct { PlaybackDuration int // 回放/下载时长 - PlaybackSpeed int // 回放/下载速度 + PlaybackSpeed float64 // 回放/下载速度 PlaybackFileURL string // 回放/下载文件URL PlaybackStartTime string // 回放/下载开始时间 PlaybackEndTime string // 回放/下载结束时间 @@ -370,3 +370,16 @@ func (api *ApiServer) OnLiveGBSTalk(w http.ResponseWriter, r *http.Request) { talkSource.Close() } + +func (api *ApiServer) OnGBSpeedSet(v *SourceSDP, w http.ResponseWriter, r *http.Request) { + source := stream.SourceManager.Find(v.Source) + if source == nil { + w.WriteHeader(http.StatusBadRequest) + httpResponseError(w, "stream not found") + } else if stream.SourceType28181 != source.GetType() { + w.WriteHeader(http.StatusBadRequest) + httpResponseError(w, "stream type not support") + } else if gbSource := Source2GBSource(source); gbSource != nil { + gbSource.SetSpeed(v.Speed) + } +} diff --git a/gb28181/source.go b/gb28181/source.go index ce0c371..df85592 100644 --- a/gb28181/source.go +++ b/gb28181/source.go @@ -80,7 +80,7 @@ type GBSource interface { SetTransport(transport transport.Transport) GetDuration() int - GetSpeed() int + GetSpeed() float64 GetSessionName() string GetStartTime() string GetEndTime() string @@ -88,7 +88,7 @@ type GBSource interface { GetPlaybackProgress() float64 SetDuration(duration int) - SetSpeed(speed int) + SetSpeed(speed float64) SetSessionName(sessionName string) SetStartTime(startTime string) SetEndTime(endTime string) @@ -112,7 +112,7 @@ type BaseGBSource struct { sessionName string // play/playback/download... duration int // 回放/下载时长, 单位秒 - speed int // 回放/下载速度 + speed float64 // 回放/下载速度 startTime string // 回放/下载开始时间 endTime string // 回放/下载结束时间 fileSize int // 回放/下载文件大小 @@ -345,7 +345,7 @@ func (source *BaseGBSource) GetDuration() int { return source.duration } -func (source *BaseGBSource) GetSpeed() int { +func (source *BaseGBSource) GetSpeed() float64 { return source.speed } @@ -353,7 +353,7 @@ func (source *BaseGBSource) SetDuration(duration int) { source.duration = duration } -func (source *BaseGBSource) SetSpeed(speed int) { +func (source *BaseGBSource) SetSpeed(speed float64) { source.speed = speed }