test
This commit is contained in:
parent
9e244f72bf
commit
0b08aa7224
@ -3,6 +3,7 @@ package rtspv2
|
|||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"log"
|
||||||
"net"
|
"net"
|
||||||
"net/url"
|
"net/url"
|
||||||
"strconv"
|
"strconv"
|
||||||
@ -25,6 +26,7 @@ type ProxyConn struct {
|
|||||||
cseq int
|
cseq int
|
||||||
session string
|
session string
|
||||||
protocol int
|
protocol int
|
||||||
|
in int
|
||||||
}
|
}
|
||||||
|
|
||||||
type Proxy struct {
|
type Proxy struct {
|
||||||
@ -40,7 +42,6 @@ func NewProxyConn(netconn net.Conn) *ProxyConn {
|
|||||||
conn.writebuf = make([]byte, 4096)
|
conn.writebuf = make([]byte, 4096)
|
||||||
conn.readbuf = make([]byte, 4096)
|
conn.readbuf = make([]byte, 4096)
|
||||||
conn.session = uuid.New().String()
|
conn.session = uuid.New().String()
|
||||||
conn.cseq = 1
|
|
||||||
return conn
|
return conn
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -156,6 +157,7 @@ func (self *ProxyConn) prepare() error {
|
|||||||
return errors.New("no fist cmd")
|
return errors.New("no fist cmd")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cseq := strings.TrimSpace(stringInBetween(string(self.readbuf[:n]), "CSeq:", "\r\n"))
|
||||||
switch fistStringsSlice[0] {
|
switch fistStringsSlice[0] {
|
||||||
case OPTIONS:
|
case OPTIONS:
|
||||||
|
|
||||||
@ -165,45 +167,47 @@ func (self *ProxyConn) prepare() error {
|
|||||||
if self.URL, err = url.Parse(fistStringsSlice[1]); err != nil {
|
if self.URL, err = url.Parse(fistStringsSlice[1]); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
_, err := self.netconn.Write([]byte("RTSP/1.0 200 OK\r\nPublic: OPTIONS, DESCRIBE, SETUP, PLAY\r\nSession: " + self.session + "\r\nCSeq: " + strconv.Itoa(self.cseq) + "\r\n\r\n"))
|
_, err := self.netconn.Write([]byte("RTSP/1.0 200 OK\r\nPublic: OPTIONS, DESCRIBE, SETUP, PLAY\r\nSession: " + self.session + "\r\nCSeq: " + cseq + "\r\n\r\n"))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
self.options = true
|
self.options = true
|
||||||
|
|
||||||
case SETUP:
|
case SETUP:
|
||||||
|
|
||||||
if strings.Contains(string(self.readbuf[:n]), "RTP/AVP/UDP") {
|
if strings.Contains(string(self.readbuf[:n]), "RTP/AVP/UDP") {
|
||||||
_, err := self.netconn.Write([]byte("RTSP/1.0 461 Unsupported transport\r\nCSeq: " + strconv.Itoa(self.cseq) + "\r\nSession: " + self.session + "\r\n\r\n"))
|
_, err := self.netconn.Write([]byte("RTSP/1.0 461 Unsupported transport\r\nCSeq: " + cseq + "\r\nSession: " + self.session + "\r\n\r\n"))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
_, err := self.netconn.Write([]byte("RTSP/1.0 200 OK\r\nCSeq: " + strconv.Itoa(self.cseq) + "\r\nSession: " + self.session + "\r\nTransport: RTP/AVP/TCP;unicast;interleaved=0-1\r\n\r\n"))
|
log.Println("RTSP/1.0 200 OK\r\nCSeq: " + cseq + "\r\nSession: " + self.session + "\r\nTransport: RTP/AVP/TCP;unicast;interleaved=" + strconv.Itoa(self.in) + "-" + strconv.Itoa(self.in+1) + "\r\n\r\n")
|
||||||
|
_, err := self.netconn.Write([]byte("RTSP/1.0 200 OK\r\nCSeq: " + cseq + "\r\nSession: " + self.session + "\r\nTransport: RTP/AVP/TCP;unicast;interleaved=" + strconv.Itoa(self.in) + "-" + strconv.Itoa(self.in+1) + "\r\n\r\n"))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
self.in = self.in + 2
|
||||||
case DESCRIBE:
|
case DESCRIBE:
|
||||||
|
|
||||||
buf := "RTSP/1.0 200 OK\r\nContent-Type: application/sdp\r\nSession: " + self.session + "\r\nContent-Length: " + strconv.Itoa(len(self.sdp)) + "\r\nCSeq: " + strconv.Itoa(self.cseq) + "\r\n\r\n"
|
buf := "RTSP/1.0 200 OK\r\nContent-Type: application/sdp\r\nSession: " + self.session + "\r\nContent-Length: " + strconv.Itoa(len(self.sdp)) + "\r\nCSeq: " + cseq + "\r\n\r\n"
|
||||||
_, err := self.netconn.Write([]byte(buf + string(self.sdp)))
|
_, err := self.netconn.Write([]byte(buf + string(self.sdp)))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
case PLAY:
|
case PLAY:
|
||||||
|
_, err := self.netconn.Write([]byte("RTSP/1.0 200 OK\r\nSession: " + self.session + ";timeout=60\r\nCSeq: " + cseq + "\r\n\r\n"))
|
||||||
_, err := self.netconn.Write([]byte("RTSP/1.0 200 OK\r\nSession: " + self.session + ";timeout=60\r\nCSeq: " + strconv.Itoa(self.cseq) + "\r\n\r\n"))
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
self.playing = true
|
self.playing = true
|
||||||
|
case TEARDOWN:
|
||||||
|
self.netconn.Close()
|
||||||
|
return errors.New("exit")
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|
||||||
return errors.New("metod not found")
|
return errors.New("metod not found " + fistStringsSlice[0])
|
||||||
|
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
Loading…
Reference in New Issue
Block a user