107 lines
2.3 KiB
Go
107 lines
2.3 KiB
Go
package media
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/ossrs/go-oryx-lib/errors"
|
|
)
|
|
|
|
type Srs struct {
|
|
Ctx context.Context
|
|
Schema string // The schema of SRS, eg: http
|
|
Addr string // The address of SRS, eg: localhost:1985
|
|
Username string // The username of SRS, eg: admin
|
|
Password string // The password of SRS, eg: 123456
|
|
}
|
|
|
|
func (s *Srs) Publish(id, ssrc string) (int, error) {
|
|
req := struct {
|
|
Id string `json:"id"`
|
|
SSRC string `json:"ssrc"`
|
|
}{
|
|
id, ssrc,
|
|
}
|
|
|
|
res := struct {
|
|
Code int `json:"code"`
|
|
Port int `json:"port"`
|
|
}{}
|
|
|
|
if err := apiRequest(s.Ctx, s.Schema+"://"+s.Addr+"/gb/v1/publish/", req, &res); err != nil {
|
|
return 0, errors.Wrapf(err, "gb/v1/publish")
|
|
}
|
|
|
|
return res.Port, nil
|
|
}
|
|
|
|
func (s *Srs) Unpublish(id string) error {
|
|
return nil
|
|
}
|
|
|
|
// {
|
|
// "code": 0,
|
|
// "server": "vid-y19n6nm",
|
|
// "service": "382k456r",
|
|
// "pid": "9495",
|
|
// "streams": [{
|
|
// "id": "vid-9y0ozy0",
|
|
// "name": "0551954854",
|
|
// "vhost": "vid-v2ws53u",
|
|
// "app": "live",
|
|
// "tcUrl": "webrtc://127.0.0.1:1985/live",
|
|
// "url": "/live/0551954854",
|
|
// "live_ms": 1720428680003,
|
|
// "clients": 1,
|
|
// "frames": 8431,
|
|
// "send_bytes": 66463941,
|
|
// "recv_bytes": 89323998,
|
|
// "kbps": {
|
|
// "recv_30s": 0,
|
|
// "send_30s": 0
|
|
// },
|
|
// "publish": {
|
|
// "active": false,
|
|
// "cid": "b3op069g"
|
|
// },
|
|
// "video": null,
|
|
// "audio": null
|
|
// }]
|
|
// }
|
|
func (s *Srs) GetStreamStatus(id string) (bool, error) {
|
|
type Stream struct {
|
|
Id string `json:"id"`
|
|
Name string `json:"name"`
|
|
Publish struct {
|
|
Active bool `json:"active"`
|
|
Cid string `json:"cid"`
|
|
} `json:"publish"`
|
|
}
|
|
res := struct {
|
|
Code int `json:"code"`
|
|
Streams []Stream `json:"streams"`
|
|
}{}
|
|
|
|
if err := apiRequest(s.Ctx, s.Schema+"://"+s.Addr+"/api/v1/streams?count=99", nil, &res); err != nil {
|
|
return false, errors.Wrapf(err, "api/v1/stream")
|
|
}
|
|
|
|
if len(res.Streams) == 0 {
|
|
return false, nil
|
|
} else {
|
|
for _, v := range res.Streams {
|
|
if v.Name == id {
|
|
return v.Publish.Active, nil
|
|
}
|
|
}
|
|
}
|
|
return false, nil
|
|
}
|
|
|
|
func (s *Srs) GetAddr() string {
|
|
return s.Addr
|
|
}
|
|
|
|
func (s *Srs) GetWebRTCAddr(id string) string {
|
|
return "webrtc://" + s.Addr + "/live/" + id
|
|
}
|