Closed Linsugar closed 2 months ago
Hello, SPS and PPS are wrapped inside RTP packets by the client, not by the server. The server just routes RTP packets from a client (publisher) to other clients (readers), without touching them.
Putting SPS and PPS in the same RTP packet is performed by the great majority of publishers to save bandwidth, therefore, if you need to extract them, you'd better just decode incoming RTP packets by using the CreateDecoder()
method, like in this example:
https://github.com/bluenviron/gortsplib/blob/main/examples/server-h264-save-to-disk/main.go
package main
import ( "fmt" "log" "sync"
)
type serverHandler struct { s gortsplib.Server mutex sync.Mutex stream gortsplib.ServerStream publisher *gortsplib.ServerSession }
// OnConnOpen xxx . func (sh serverHandler) OnConnOpen(ctx gortsplib.ServerHandlerOnConnOpenCtx) { log.Printf("xxx ") }
// OnConnClose xx. func (sh serverHandler) OnConnClose(ctx gortsplib.ServerHandlerOnConnCloseCtx) { log.Printf("(%v)", ctx.Error) }
// OnSessionOpen xx. func (sh serverHandler) OnSessionOpen(ctx gortsplib.ServerHandlerOnSessionOpenCtx) { log.Printf("xx") }
// OnSessionClose xx. func (sh serverHandler) OnSessionClose(ctx gortsplib.ServerHandlerOnSessionCloseCtx) { log.Printf("xx")
}
// OnDescribe xx. func (sh serverHandler) OnDescribe(ctx gortsplib.ServerHandlerOnDescribeCtx) (base.Response, gortsplib.ServerStream, error) { log.Printf("xx") sh.mutex.Lock() defer sh.mutex.Unlock()
}
// OnAnnounce called when receiving an ANNOUNCE request. func (sh serverHandler) OnAnnounce(ctx gortsplib.ServerHandlerOnAnnounceCtx) (base.Response, error) { sh.mutex.Lock() log.Printf("announce request") var forma format.H264 _ = ctx.Description.FindFormat(&forma)
}
// OnSetup called when receiving a SETUP request. func (sh serverHandler) OnSetup(ctx gortsplib.ServerHandlerOnSetupCtx) (base.Response, gortsplib.ServerStream, error) { log.Printf("setup request")
}
// OnPlay called when receiving a PLAY request. func (sh serverHandler) OnPlay(ctx gortsplib.ServerHandlerOnPlayCtx) (*base.Response, error) { log.Printf("xx")
}
// OnRecord called when receiving a RECORD request. func (sh serverHandler) OnRecord(ctx gortsplib.ServerHandlerOnRecordCtx) (*base.Response, error) { log.Printf("xxx")
}
func main() { // configure the server
}