mirror of
https://github.com/ossrs/srs.git
synced 2025-03-09 15:49:59 +00:00
proxy /api/v1/streams api
This commit is contained in:
parent
a91d98e1ad
commit
a37a8aff29
1 changed files with 114 additions and 12 deletions
|
@ -30,24 +30,78 @@ type SrsClient struct {
|
||||||
RecvBytes int `json:"recv_bytes"`
|
RecvBytes int `json:"recv_bytes"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type SrsApiCodeResponse struct {
|
||||||
|
Code int `json:"code"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type SrsAPICommonResponse struct {
|
||||||
|
SrsApiCodeResponse
|
||||||
|
Server string `json:"server"`
|
||||||
|
Service string `json:"service"`
|
||||||
|
Pid string `json:"pid"`
|
||||||
|
}
|
||||||
|
|
||||||
type SrsClientResponse struct {
|
type SrsClientResponse struct {
|
||||||
Code int `json:"code"`
|
SrsAPICommonResponse
|
||||||
Server string `json:"server"`
|
Client SrsClient `json:"client"`
|
||||||
Service string `json:"service"`
|
|
||||||
Pid string `json:"pid"`
|
|
||||||
Client SrsClient `json:"client"`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type SrsClientsResponse struct {
|
type SrsClientsResponse struct {
|
||||||
Code int `json:"code"`
|
SrsAPICommonResponse
|
||||||
Server string `json:"server"`
|
|
||||||
Service string `json:"service"`
|
|
||||||
Pid string `json:"pid"`
|
|
||||||
Clients []SrsClient `json:"clients"`
|
Clients []SrsClient `json:"clients"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type SrsClientDeleteResponse struct {
|
type SrsKbps struct {
|
||||||
Code int `json:"code"`
|
Recv_30s uint32 `json:"recv_30s"`
|
||||||
|
Send_30s uint32 `json:"send_30s"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type SrsPublish struct {
|
||||||
|
Active bool `json:"active"`
|
||||||
|
Cid string `json:"cid"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type SrsVideo struct {
|
||||||
|
Codec string `json:"codec"`
|
||||||
|
Profile string `json:"profile"`
|
||||||
|
Level string `json:"level"`
|
||||||
|
Width uint32 `json:"width"`
|
||||||
|
Height uint32 `json:"height"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type SrsAudio struct {
|
||||||
|
Codec string `json:"codec"`
|
||||||
|
Sample_rate uint32 `json:"sample_rate"`
|
||||||
|
Channel uint8 `json:"channel"`
|
||||||
|
Profile string `json:"profile"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type SrsStream struct {
|
||||||
|
Id string `json:"id"`
|
||||||
|
Name string `json:"name"`
|
||||||
|
Vhost string `json:"vhost"`
|
||||||
|
App string `json:"app"`
|
||||||
|
TcUrl string `json:"tcUrl"`
|
||||||
|
Url string `json:"url"`
|
||||||
|
Live_ms uint64 `json:"live_ms"`
|
||||||
|
Clients uint32 `json:"clients"`
|
||||||
|
Frames uint32 `json:"frames"`
|
||||||
|
Send_bytes uint32 `json:"send_bytes"`
|
||||||
|
Recv_bytes uint32 `json:"recv_bytes"`
|
||||||
|
Kbps SrsKbps `json:"kbps"`
|
||||||
|
Publish SrsPublish `json:"publish"`
|
||||||
|
Video SrsVideo `json:"video"`
|
||||||
|
Audio SrsAudio `json:"audio"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type SrsStreamResponse struct {
|
||||||
|
SrsAPICommonResponse
|
||||||
|
Stream SrsStream `json:"stream"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type SrsStreamsResponse struct {
|
||||||
|
SrsAPICommonResponse
|
||||||
|
Streams []SrsStream `json:"streams"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type SrsApiProxy struct {
|
type SrsApiProxy struct {
|
||||||
|
@ -83,7 +137,7 @@ func proxySrsClientsAPI(ctx context.Context, servers []*SRSServer, w http.Respon
|
||||||
for _, server := range servers {
|
for _, server := range servers {
|
||||||
if ret, err := server.ApiRequest(ctx, r, body); err == nil {
|
if ret, err := server.ApiRequest(ctx, r, body); err == nil {
|
||||||
logger.Df(ctx, "response %v", string(ret))
|
logger.Df(ctx, "response %v", string(ret))
|
||||||
var res SrsClientDeleteResponse
|
var res SrsApiCodeResponse
|
||||||
if err := json.Unmarshal(ret, &res); err == nil && res.Code == 0 {
|
if err := json.Unmarshal(ret, &res); err == nil && res.Code == 0 {
|
||||||
apiResponse(ctx, w, r, res)
|
apiResponse(ctx, w, r, res)
|
||||||
return nil
|
return nil
|
||||||
|
@ -126,5 +180,53 @@ func proxySrsClientsAPI(ctx context.Context, servers []*SRSServer, w http.Respon
|
||||||
}
|
}
|
||||||
|
|
||||||
func proxySrsStreamsAPI(ctx context.Context, servers []*SRSServer, w http.ResponseWriter, r *http.Request) error {
|
func proxySrsStreamsAPI(ctx context.Context, servers []*SRSServer, w http.ResponseWriter, r *http.Request) error {
|
||||||
|
defer r.Body.Close()
|
||||||
|
|
||||||
|
streamId := ""
|
||||||
|
if strings.HasPrefix(r.URL.Path, "/api/v1/streams/") {
|
||||||
|
streamId = r.URL.Path[len("/api/v1/streams/"):]
|
||||||
|
}
|
||||||
|
logger.Df(ctx, "%v %v streamId=%v", r.Method, r.URL.Path, streamId)
|
||||||
|
|
||||||
|
body, err := io.ReadAll(r.Body)
|
||||||
|
if err != nil {
|
||||||
|
apiError(ctx, w, r, err, http.StatusInternalServerError)
|
||||||
|
return errors.Wrapf(err, "read request body err")
|
||||||
|
}
|
||||||
|
if r.Method != http.MethodGet {
|
||||||
|
err := errors.Errorf("Unsupported http method type %v", r.Method)
|
||||||
|
apiError(ctx, w, r, err, http.StatusBadRequest)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if len(streamId) > 0 {
|
||||||
|
var stream SrsStreamResponse
|
||||||
|
for _, server := range servers {
|
||||||
|
if ret, err := server.ApiRequest(ctx, r, body); err == nil {
|
||||||
|
if err := json.Unmarshal(ret, &stream); err == nil && stream.Code == 0 {
|
||||||
|
apiResponse(ctx, w, r, stream)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ret := SrsApiCodeResponse{
|
||||||
|
Code: 2048,
|
||||||
|
}
|
||||||
|
apiResponse(ctx, w, r, ret)
|
||||||
|
return nil
|
||||||
|
} else {
|
||||||
|
var streams SrsStreamsResponse
|
||||||
|
for _, server := range servers {
|
||||||
|
var res SrsStreamsResponse
|
||||||
|
if ret, err := server.ApiRequest(ctx, r, body); err == nil {
|
||||||
|
if err := json.Unmarshal(ret, &res); err == nil && res.Code == 0 {
|
||||||
|
streams.Streams = append(streams.Streams, res.Streams...)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
apiResponse(ctx, w, r, streams)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue