60 lines
1.6 KiB
Go
60 lines
1.6 KiB
Go
package media
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/ossrs/go-oryx-lib/errors"
|
|
)
|
|
|
|
type Zlm struct {
|
|
Ctx context.Context
|
|
Schema string // The schema of ZLM, eg: http
|
|
Addr string // The address of ZLM, eg: localhost:8085
|
|
Secret string // The secret of ZLM, eg: ZLMediaKit_secret
|
|
}
|
|
|
|
// /index/api/openRtpServer
|
|
// secret={{ZLMediaKit_secret}}&port=0&enable_tcp=1&stream_id=test2
|
|
func (z *Zlm) Publish(id, ssrc string) (int, error) {
|
|
|
|
res := struct {
|
|
Code int `json:"code"`
|
|
Port int `json:"port"`
|
|
}{}
|
|
|
|
if err := apiRequest(z.Ctx, z.Schema+"://"+z.Addr+"/index/api/openRtpServer?secret="+z.Secret+"&port=0&enable_tcp=1&stream_id="+id+"&ssrc="+ssrc, nil, &res); err != nil {
|
|
return 0, errors.Wrapf(err, "gb/v1/publish")
|
|
}
|
|
return res.Port, nil
|
|
}
|
|
|
|
// /index/api/closeRtpServer
|
|
func (z *Zlm) Unpublish(id string) error {
|
|
res := struct {
|
|
Code int `json:"code"`
|
|
}{}
|
|
if err := apiRequest(z.Ctx, z.Schema+"://"+z.Addr+"/index/api/closeRtpServer?secret="+z.Secret+"&stream_id="+id, nil, &res); err != nil {
|
|
return errors.Wrapf(err, "gb/v1/publish")
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// /index/api/getMediaList
|
|
func (z *Zlm) GetStreamStatus(id string) (bool, error) {
|
|
res := struct {
|
|
Code int `json:"code"`
|
|
}{}
|
|
if err := apiRequest(z.Ctx, z.Schema+"://"+z.Addr+"/index/api/getMediaList?secret="+z.Secret+"&stream_id="+id, nil, &res); err != nil {
|
|
return false, errors.Wrapf(err, "gb/v1/publish")
|
|
}
|
|
return res.Code == 0, nil
|
|
}
|
|
|
|
func (z *Zlm) GetAddr() string {
|
|
return z.Addr
|
|
}
|
|
|
|
func (z *Zlm) GetWebRTCAddr(id string) string {
|
|
return "http://" + z.Addr + "/index/api/webrtc?app=rtp&stream=" + id + "&type=play"
|
|
}
|