mirror of
https://github.com/aler9/gortsplib
synced 2025-10-05 15:16:51 +08:00
new server structure
This commit is contained in:
@@ -10,52 +10,61 @@ import (
|
||||
"github.com/aler9/gortsplib/pkg/base"
|
||||
)
|
||||
|
||||
type serverConnHandler struct {
|
||||
}
|
||||
func handleConn(conn *gortsplib.ServerConn) {
|
||||
onRequest := func(req *base.Request) (*base.Response, error) {
|
||||
switch req.Method {
|
||||
case base.Options:
|
||||
return &base.Response{
|
||||
StatusCode: base.StatusOK,
|
||||
Header: base.Header{
|
||||
"Public": base.HeaderValue{strings.Join([]string{
|
||||
string(base.Describe),
|
||||
string(base.Announce),
|
||||
string(base.Setup),
|
||||
string(base.Play),
|
||||
string(base.Record),
|
||||
string(base.Pause),
|
||||
string(base.Teardown),
|
||||
}, ", ")},
|
||||
},
|
||||
}, nil
|
||||
|
||||
func (sc *serverConnHandler) OnClose(err error) {
|
||||
}
|
||||
case base.Teardown:
|
||||
return &base.Response{
|
||||
StatusCode: base.StatusOK,
|
||||
Header: base.Header{},
|
||||
}, fmt.Errorf("terminated")
|
||||
}
|
||||
|
||||
func (sc *serverConnHandler) OnRequest(req *base.Request) (*base.Response, error) {
|
||||
switch req.Method {
|
||||
case base.Options:
|
||||
return &base.Response{
|
||||
StatusCode: base.StatusOK,
|
||||
Header: base.Header{
|
||||
"Public": base.HeaderValue{strings.Join([]string{
|
||||
string(base.Describe),
|
||||
string(base.Announce),
|
||||
string(base.Setup),
|
||||
string(base.Play),
|
||||
string(base.Record),
|
||||
string(base.Pause),
|
||||
string(base.Teardown),
|
||||
}, ", ")},
|
||||
},
|
||||
}, nil
|
||||
|
||||
case base.Teardown:
|
||||
return &base.Response{
|
||||
StatusCode: base.StatusOK,
|
||||
StatusCode: base.StatusBadRequest,
|
||||
Header: base.Header{},
|
||||
}, fmt.Errorf("terminated")
|
||||
}, fmt.Errorf("unhandled method: %v", req.Method)
|
||||
}
|
||||
|
||||
return &base.Response{
|
||||
StatusCode: base.StatusBadRequest,
|
||||
Header: base.Header{},
|
||||
}, fmt.Errorf("unhandled method: %v", req.Method)
|
||||
}
|
||||
onFrame := func(id int, typ gortsplib.StreamType, buf []byte) {
|
||||
}
|
||||
|
||||
func (sc *serverConnHandler) OnFrame(id int, typ gortsplib.StreamType, buf []byte) {
|
||||
done := conn.Read(onRequest, onFrame)
|
||||
|
||||
err := <-done
|
||||
panic(err)
|
||||
}
|
||||
|
||||
func main() {
|
||||
// create server
|
||||
gortsplib.Serve(":8554", func(c *gortsplib.ServerConn) gortsplib.ServerConnHandler {
|
||||
return &serverConnHandler{}
|
||||
})
|
||||
s, err := gortsplib.Serve(":8554")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
// wait forever
|
||||
select {}
|
||||
// accept connections
|
||||
for {
|
||||
conn, err := s.Accept()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
go handleConn(conn)
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user