package packets import ( //"bytes" "fmt" "io" "log" "net" "testing" "github.com/beatgammit/rtsp" ) const ( rtpPort = 17300 rtcpPort = 17319 rtspUrl = "rtsp://192.168.0.50:8554/CH002.sdp" rtpUrl = "rtsp://192.168.0.50:8554/CH002.sdp/track1" ) /* Let's see if we can connect to an rtsp device then read an rtp stream, and then convert the rtp packets to mpegts packets and output. */ func TestMain(t *testing.T) { sess := rtsp.NewSession() res, err := sess.Options(rtspUrl) if err != nil { t.Errorf("Shouldn't have got error: %v\n",err) } fmt.Println("Options:") fmt.Println(res) res, err = sess.Describe(rtspUrl) if err != nil { log.Fatalln(err) t.Errorf("Shouldn't have got error: %v\n", err) } fmt.Println("Describe:") fmt.Println(res) p, err := rtsp.ParseSdp(&io.LimitedReader{R: res.Body, N: res.ContentLength}) if err != nil { t.Errorf("Shouldn't have got error: %v\n", err) } log.Printf("%+v", p) fmt.Println("Setting up!") res, err = sess.Setup(rtpUrl, fmt.Sprintf("RTP/AVP;unicast;client_port=%d-%d", rtpPort, rtcpPort)) if err != nil { t.Errorf("Shouldn't have got error: %v\n", err) } log.Println(res) fmt.Println("Playing !") res, err = sess.Play(rtspUrl, res.Header.Get("Session")) if err != nil { t.Errorf("Shouldn't have got error: %v\n", err) } log.Println(res) // create udp connection for rtp stuff rtpLaddr, err := net.ResolveUDPAddr("udp", "192.168.0.109:17300") if err != nil { t.Errorf("Local rtp addr not set! %v\n",err) } rtpAddr, err := net.ResolveUDPAddr("udp", "192.168.0.50:17300") if err != nil { t.Errorf("Resolving rtp address didn't work! %v\n", err) } rtpConn, err := net.DialUDP("udp", rtpLaddr, rtpAddr) if err != nil { t.Errorf("Conncection not established! %v\n", err) } // Create udp connection for rtcp stuff rtcpLaddr, err := net.ResolveUDPAddr("udp", "192.168.0.109:17319") if err != nil { t.Errorf("Local RTCP address not resolved! %v\n", err) } rtcpAddr, err := net.ResolveUDPAddr("udp", "192.168.0.50:17301") if err != nil { t.Errorf("Remote RTCP address not resolved! %v\n", err) } rtcpConn, err := net.DialUDP("udp", rtcpLaddr, rtcpAddr) if err != nil { t.Errorf("Connection not established! %v\n", err) } // let's create a session that will store useful stuff from the connections rtpSession := NewSession(rtpConn, rtcpConn) converter := NewRtpToTsConverter() go converter.Convert() for ii:=0;ii<10000000;ii++{ select{ default: case rtpPacket := <-rtpSession.RtpChan: converter.RtpChan<-rtpPacket case tsPacket:=<-converter.TsChan: fmt.Println(tsPacket.ToByteSlice()) } } }