av/protocol/rtsp/rtsp-util/main.go

83 lines
1.4 KiB
Go

package main
import (
"bytes"
"flag"
"fmt"
"io"
"log"
"rtsp"
)
func init() {
flag.Parse()
}
const sampleRequest = `OPTIONS rtsp://example.com/media.mp4 RTSP/1.0
CSeq: 1
Require: implicit-play
Proxy-Require: gzipped-messages
`
const sampleResponse = `RTSP/1.0 200 OK
CSeq: 1
Public: DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE
`
func main() {
if len(flag.Args()) >= 1 {
rtspUrl := flag.Args()[0]
sess := rtsp.NewSession()
res, err := sess.Options(rtspUrl)
if err != nil {
log.Fatalln(err)
}
fmt.Println("Options:")
fmt.Println(res)
res, err = sess.Describe(rtspUrl)
if err != nil {
log.Fatalln(err)
}
fmt.Println("Describe:")
fmt.Println(res)
p, err := rtsp.ParseSdp(&io.LimitedReader{R: res.Body, N: res.ContentLength})
if err != nil {
log.Fatalln(err)
}
log.Printf("%+v", p)
rtpPort, rtcpPort := 8000, 8001
res, err = sess.Setup(rtspUrl, fmt.Sprintf("RTP/AVP;unicast;client_port=%d-%d", rtpPort, rtcpPort))
if err != nil {
log.Fatalln(err)
}
log.Println(res)
res, err = sess.Play(rtspUrl, res.Header.Get("Session"))
if err != nil {
log.Fatalln(err)
}
log.Println(res)
} else {
r, err := rtsp.ReadRequest(bytes.NewBufferString(sampleRequest))
if err != nil {
fmt.Println(err)
} else {
fmt.Println(r)
}
res, err := rtsp.ReadResponse(bytes.NewBufferString(sampleResponse))
if err != nil {
fmt.Println(err)
} else {
fmt.Println(res)
}
}
}