Creating the files I need for repacketisation

This commit is contained in:
Unknown 2017-12-11 15:24:49 +10:30
parent bc7962b240
commit 24658ed1aa
4 changed files with 113 additions and 107 deletions

6
packet/MpegTs.go Normal file
View File

@ -0,0 +1,6 @@
package packet
type MpegTsPacket struct {
}

View File

@ -0,0 +1,20 @@
package packet
type RtpToTsConverter interface {
New() *rtpToTsConverter
}
type rtpToTsConverter struct {
TsOutChan <-chan MpegTsPacket
RtpInChan chan<- RtpPacket
}
func New() c *rtpToTsConverter {
c = new(rtpToTsConverter)
c.TsOutChan = make(chan, MpegTsPacket)
c.RtpInChan = make(chan, RtpPacket)
}
func (c* RtpToTsConverter) convert() {
}

View File

@ -29,11 +29,11 @@ OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISE
OF THE POSSIBILITY OF SUCH DAMAGE. OF THE POSSIBILITY OF SUCH DAMAGE.
*/ */
package rtp package packet
import ( import (
"net"
"fmt" "fmt"
"net"
) )
const ( const (
@ -43,12 +43,14 @@ const (
const ( const (
hasRtpPadding = 1 << 5 hasRtpPadding = 1 << 5
hasRtpExt = 1 << 4 hasRtpExt = 1 << 4
hasMarker = 1 << 7
) )
type RtpPacket struct { type RtpPacket struct {
Version byte Version byte
Padding bool Padding bool
Ext bool Ext bool
CC byte
Marker bool Marker bool
PayloadType byte PayloadType byte
SequenceNumber uint SequenceNumber uint
@ -125,20 +127,19 @@ func (s *Session) handleRtp(buf []byte) {
Version: (buf[0] & 0xC0) >> 6, Version: (buf[0] & 0xC0) >> 6,
Padding: buf[0]&hasRtpPadding != 0, Padding: buf[0]&hasRtpPadding != 0,
Ext: buf[0]&hasRtpExt != 0, Ext: buf[0]&hasRtpExt != 0,
Marker: buf[1]&1 != 0, CC: buf[0] & 0x0F,
PayloadType: buf[1] >> 1, Marker: buf[1]&hasMarker != 0,
PayloadType: buf[1] & 0x7F,
SequenceNumber: toUint(buf[2:4]), SequenceNumber: toUint(buf[2:4]),
Timestamp: toUint(buf[4:8]), Timestamp: toUint(buf[4:8]),
SyncSource: toUint(buf[8:12]), SyncSource: toUint(buf[8:12]),
CSRC: make([]uint, buf[0]>>4), CSRC: make([]uint, buf[0]&0x0F),
} }
if packet.Version != RTP_VERSION { if packet.Version != RTP_VERSION {
fmt.Printf("Packet version: %v", packet.Version)
panic("Unsupported version") panic("Unsupported version")
} }
i := 12 i := 12
for j := range packet.CSRC { for j := range packet.CSRC {

View File

@ -9,7 +9,7 @@ import (
"net" "net"
"time" "time"
"../rtp" "../packet"
"github.com/beatgammit/rtsp" "github.com/beatgammit/rtsp"
) )
@ -18,20 +18,6 @@ func init() {
flag.Parse() 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() { func main() {
if len(flag.Args()) >= 1 { if len(flag.Args()) >= 1 {
rtspUrl := flag.Args()[0] rtspUrl := flag.Args()[0]
@ -75,51 +61,44 @@ func main() {
// create udp connection for rtp stuff // create udp connection for rtp stuff
rtpLaddr, err := net.ResolveUDPAddr("udp", "192.168.0.109:17300") rtpLaddr, err := net.ResolveUDPAddr("udp", "192.168.0.109:17300")
if err != nil {fmt.Println("Local rtp addr not set!")} if err != nil {
fmt.Println("Local rtp addr not set!")
}
rtpAddr, err := net.ResolveUDPAddr("udp", "192.168.0.50:17300") rtpAddr, err := net.ResolveUDPAddr("udp", "192.168.0.50:17300")
if err != nil { fmt.Println( "Resolving rtp address didn't work!")} if err != nil {
fmt.Println("Resolving rtp address didn't work!")
}
rtpConn, err := net.DialUDP("udp", rtpLaddr, rtpAddr) rtpConn, err := net.DialUDP("udp", rtpLaddr, rtpAddr)
if err != nil {fmt.Println("Rtp dial didn't work!")} if err != nil {
fmt.Println("Rtp dial didn't work!")
}
// Create udp connection for rtcp stuff // Create udp connection for rtcp stuff
rtcpLaddr, err := net.ResolveUDPAddr("udp", "192.168.0.109:17319") rtcpLaddr, err := net.ResolveUDPAddr("udp", "192.168.0.109:17319")
if err != nil {fmt.Println("Local ")} if err != nil {
fmt.Println("Local ")
}
rtcpAddr, err := net.ResolveUDPAddr("udp", "192.168.0.50:17301") rtcpAddr, err := net.ResolveUDPAddr("udp", "192.168.0.50:17301")
if err != nil {fmt.Println("resolving rtcp address didn't work!")} if err != nil {
fmt.Println("resolving rtcp address didn't work!")
}
rtcpConn, err := net.DialUDP("udp", rtcpLaddr, rtcpAddr) rtcpConn, err := net.DialUDP("udp", rtcpLaddr, rtcpAddr)
if err != nil {fmt.Println("Rtcp dial didnt't work!")} if err != nil {
fmt.Println("Rtcp dial didnt't work!")
}
// let's create a session that will store useful stuff from the connections // let's create a session that will store useful stuff from the connections
rtpSession := rtp.New(rtpConn, rtcpConn) rtpSession := rtp.New(rtpConn, rtcpConn)
// Loop here until we get something in the channels // Loop here until we get something in the channels
for { for {
fmt.Printf("Length of rtpChan: %v\n", len(rtpSession.RtpChan)) fmt.Printf("Length of rtpChan: %v\n", len(rtpSession.RtpChan))
time.Sleep(1 * time.Second) time.Sleep(1 * time.Second)
select { select {
case rtpPacket := <-rtpSession.RtpChan: case rtpPacket := <-rtpSession.RtpChan:
fmt.Println(rtpPacket)
default: default:
} }
}
} 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)
} }
} }
} }