working on some new stuff to test, but can't test because don't have camera

This commit is contained in:
Saxon Milton 2017-12-17 17:54:52 +10:30
parent 91b6a87a93
commit 2415160b5a
2 changed files with 38 additions and 105 deletions

View File

@ -29,7 +29,6 @@ LICENSE
package packets
import (
"os"
"fmt"
)
@ -57,76 +56,13 @@ func NewRtpToTsConverter() (c *rtpToTsConverter) {
}
func (c* rtpToTsConverter) Convert(rtpSession *Session) {
file,_ := os.Create("video")
var sps []byte
var pps []byte
// Frist find sps
fmt.Println("finding sps")
for {
rtpPacket := <-rtpSession.RtpChan
fragmentType := rtpPacket.Payload[0] & 0x1F
if fragmentType == 7 {
sps = make([]byte,4+len(rtpPacket.Payload))
sps[0] = 0x00
sps[1] = 0x00
sps[2] = 0x00
sps[3] = 0x01
for i := range rtpPacket.Payload {
sps[i+4] = rtpPacket.Payload[i]
}
break
}
}
fmt.Println("finding pps")
// now find pps
for {
rtpPacket := <-rtpSession.RtpChan
fragmentType := rtpPacket.Payload[0] & 0x1F
if fragmentType == 8 {
pps = make([]byte,4+len(rtpPacket.Payload))
pps[0] = 0x00
pps[1] = 0x00
pps[2] = 0x00
pps[3] = 0x01
for i := range rtpPacket.Payload {
pps[i+4] = rtpPacket.Payload[i]
}
break
}
}
for {
select{
default:
case rtpPacket := <-rtpSession.RtpChan:
threeNUBs := rtpPacket.Payload[0] & 0xE0
fragmentType := rtpPacket.Payload[0] & 0x1F
startBit := (rtpPacket.Payload[1] & 0x80)>>7
fiveNUBs := rtpPacket.Payload[1] & 0x1F
fragmentData := rtpPacket.Payload[2:]
if fragmentType == 28 {
if startBit == 1 {
file.Write(sps)
file.Write(pps)
buffer := make([]byte,5+len(fragmentData))
buffer[0] = 0x00
buffer[1] = 0x00
buffer[2] = 0x00
buffer[3] = 0x01
buffer[4] = threeNUBs | fiveNUBs
for i := range fragmentData {
buffer[i+5] = fragmentData[i]
}
file.Write(buffer)
} else {
file.Write(fragmentData)
}
}
for ii := range rtpPacket.Payload {
c.payloadByteChan<-rtpPacket.Payload[ii]
}
if rtpPacket.Marker == true {
firstPacket:=true
for len(c.payloadByteChan) > 0 {
lengthOfByteChan := len(c.payloadByteChan)
@ -163,5 +99,4 @@ func (c* rtpToTsConverter) Convert(rtpSession *Session) {
}
}
}
}
}

View File

@ -276,8 +276,8 @@ func input(input string, output string) {
clipSize := 0
packetCount := 0
//now := time.Now()
//prevTime := now
now := time.Now()
prevTime := now
fmt.Printf("Looping\n")
for {
if clip, err := ringBuffer.Get(); err != nil {
@ -303,18 +303,17 @@ func input(input string, output string) {
clipSize += mp2tPacketSize
// send if (1) our buffer is full or (2) 1 second has elapsed and we have % packetsPerFrame
//now = time.Now()
if packetCount == 3 {
now = time.Now()
if (packetCount == mp2tMaxPackets) ||
(now.Sub(prevTime) > clipDuration*time.Second && packetCount%packetsPerFrame == 0) {
clipCount++
if err := ringBuffer.DoneWriting(clipSize); err != nil {
inputErrChan <- err
return
}
fmt.Println("here1")
time.Sleep(10*time.Second)
clipSize = 0
packetCount = 0
//prevTime = now
prevTime = now
break
}
}
@ -331,7 +330,6 @@ func output(output string) {
if clip, err := ringBuffer.Read(); err == nil {
now := time.Now()
fmt.Println(clip)
sendClipToStdout(clip,output,conn)
for err = sendClip(clip, output, conn); err != nil; {
outputErrChan <- err
err = sendClip(clip, output, conn)