mirror of
https://github.com/Monibuca/plugin-rtsp.git
synced 2025-09-27 12:02:20 +08:00
👌 IMPROVE: 导出RTSP插件
This commit is contained in:
22
main.go
22
main.go
@@ -40,16 +40,16 @@ func (conf *RTSPConfig) OnEvent(event any) {
|
||||
s.Start()
|
||||
if conf.PullOnStart {
|
||||
for streamPath, url := range conf.PullList {
|
||||
if err := plugin.Pull(streamPath, url, new(RTSPPuller), false); err != nil {
|
||||
plugin.Error("pull", zap.String("streamPath", streamPath), zap.String("url", url), zap.Error(err))
|
||||
if err := RTSPPlugin.Pull(streamPath, url, new(RTSPPuller), false); err != nil {
|
||||
RTSPPlugin.Error("pull", zap.String("streamPath", streamPath), zap.String("url", url), zap.Error(err))
|
||||
}
|
||||
}
|
||||
}
|
||||
case SEpublish:
|
||||
for streamPath, url := range conf.PushList {
|
||||
if streamPath == v.Stream.Path {
|
||||
if err := plugin.Push(streamPath, url, new(RTSPPusher), false); err != nil {
|
||||
plugin.Error("push", zap.String("streamPath", streamPath), zap.String("url", url), zap.Error(err))
|
||||
if err := RTSPPlugin.Push(streamPath, url, new(RTSPPusher), false); err != nil {
|
||||
RTSPPlugin.Error("push", zap.String("streamPath", streamPath), zap.String("url", url), zap.Error(err))
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -57,8 +57,8 @@ func (conf *RTSPConfig) OnEvent(event any) {
|
||||
if conf.PullOnSubscribe {
|
||||
for streamPath, url := range conf.PullList {
|
||||
if streamPath == v.Path {
|
||||
if err := plugin.Pull(streamPath, url, new(RTSPPuller), false); err != nil {
|
||||
plugin.Error("pull", zap.String("streamPath", streamPath), zap.String("url", url), zap.Error(err))
|
||||
if err := RTSPPlugin.Pull(streamPath, url, new(RTSPPuller), false); err != nil {
|
||||
RTSPPlugin.Error("pull", zap.String("streamPath", streamPath), zap.String("url", url), zap.Error(err))
|
||||
}
|
||||
break
|
||||
}
|
||||
@@ -73,7 +73,7 @@ var rtspConfig = &RTSPConfig{
|
||||
RTCPAddr: ":8001",
|
||||
ReadBufferSize: 2048,
|
||||
}
|
||||
var plugin = InstallPlugin(rtspConfig)
|
||||
var RTSPPlugin = InstallPlugin(rtspConfig)
|
||||
|
||||
func filterStreams() (ss []*Stream) {
|
||||
Streams.RLock()
|
||||
@@ -92,15 +92,19 @@ func (*RTSPConfig) API_list(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
|
||||
func (*RTSPConfig) API_Pull(rw http.ResponseWriter, r *http.Request) {
|
||||
err := plugin.Pull(r.URL.Query().Get("streamPath"), r.URL.Query().Get("target"), new(RTSPPuller), r.URL.Query().Has("save"))
|
||||
err := RTSPPlugin.Pull(r.URL.Query().Get("streamPath"), r.URL.Query().Get("target"), new(RTSPPuller), r.URL.Query().Has("save"))
|
||||
if err != nil {
|
||||
http.Error(rw, err.Error(), http.StatusBadRequest)
|
||||
} else {
|
||||
rw.Write([]byte("ok"))
|
||||
}
|
||||
}
|
||||
|
||||
func (*RTSPConfig) API_Push(rw http.ResponseWriter, r *http.Request) {
|
||||
err := plugin.Push(r.URL.Query().Get("streamPath"), r.URL.Query().Get("target"), new(RTSPPusher), r.URL.Query().Has("save"))
|
||||
err := RTSPPlugin.Push(r.URL.Query().Get("streamPath"), r.URL.Query().Get("target"), new(RTSPPusher), r.URL.Query().Has("save"))
|
||||
if err != nil {
|
||||
http.Error(rw, err.Error(), http.StatusBadRequest)
|
||||
} else {
|
||||
rw.Write([]byte("ok"))
|
||||
}
|
||||
}
|
||||
|
@@ -126,7 +126,7 @@ func (p *RTSPPublisher) SetTracks() error {
|
||||
// 复用AVCC写入逻辑,解析出AAC的配置信息
|
||||
at.WriteAVCC(0, append([]byte{0xAF, 0}, asc...))
|
||||
} else {
|
||||
plugin.Warn("aac no config")
|
||||
RTSPPlugin.Warn("aac no config")
|
||||
}
|
||||
default:
|
||||
return fmt.Errorf("unsupport codec:%s", keyval[0])
|
||||
|
14
server.go
14
server.go
@@ -14,22 +14,22 @@ type RTSPIO struct {
|
||||
}
|
||||
|
||||
func (conf *RTSPConfig) OnConnOpen(ctx *gortsplib.ServerHandlerOnConnOpenCtx) {
|
||||
plugin.Debug("conn opened")
|
||||
RTSPPlugin.Debug("conn opened")
|
||||
}
|
||||
|
||||
func (conf *RTSPConfig) OnConnClose(ctx *gortsplib.ServerHandlerOnConnCloseCtx) {
|
||||
plugin.Debug("conn closed")
|
||||
RTSPPlugin.Debug("conn closed")
|
||||
if p, ok := conf.LoadAndDelete(ctx.Conn); ok {
|
||||
p.(IIO).Stop()
|
||||
}
|
||||
}
|
||||
|
||||
func (conf *RTSPConfig) OnSessionOpen(ctx *gortsplib.ServerHandlerOnSessionOpenCtx) {
|
||||
plugin.Debug("session opened")
|
||||
RTSPPlugin.Debug("session opened")
|
||||
}
|
||||
|
||||
func (conf *RTSPConfig) OnSessionClose(ctx *gortsplib.ServerHandlerOnSessionCloseCtx) {
|
||||
plugin.Debug("session closed")
|
||||
RTSPPlugin.Debug("session closed")
|
||||
if p, ok := conf.LoadAndDelete(ctx.Session); ok {
|
||||
p.(IIO).Stop()
|
||||
}
|
||||
@@ -37,10 +37,10 @@ func (conf *RTSPConfig) OnSessionClose(ctx *gortsplib.ServerHandlerOnSessionClos
|
||||
|
||||
// called after receiving a DESCRIBE request.
|
||||
func (conf *RTSPConfig) OnDescribe(ctx *gortsplib.ServerHandlerOnDescribeCtx) (*base.Response, *gortsplib.ServerStream, error) {
|
||||
plugin.Debug("describe request")
|
||||
RTSPPlugin.Debug("describe request")
|
||||
var suber RTSPSubscriber
|
||||
suber.SetIO(ctx.Conn.NetConn())
|
||||
if err := plugin.Subscribe(ctx.Path, &suber); err == nil {
|
||||
if err := RTSPPlugin.Subscribe(ctx.Path, &suber); err == nil {
|
||||
conf.Store(ctx.Conn, &suber)
|
||||
return &base.Response{
|
||||
StatusCode: base.StatusOK,
|
||||
@@ -90,7 +90,7 @@ func (conf *RTSPConfig) OnRecord(ctx *gortsplib.ServerHandlerOnRecordCtx) (*base
|
||||
func (conf *RTSPConfig) OnAnnounce(ctx *gortsplib.ServerHandlerOnAnnounceCtx) (*base.Response, error) {
|
||||
p := &RTSPPublisher{}
|
||||
p.SetIO(ctx.Conn.NetConn())
|
||||
if err := plugin.Publish(ctx.Path, p); err == nil {
|
||||
if err := RTSPPlugin.Publish(ctx.Path, p); err == nil {
|
||||
p.tracks = ctx.Tracks
|
||||
p.stream = gortsplib.NewServerStream(ctx.Tracks)
|
||||
if err = p.SetTracks(); err != nil {
|
||||
|
Reference in New Issue
Block a user