testing
This commit is contained in:
parent
7a563b07e3
commit
b84c19f719
25
example/test/main.go
Normal file
25
example/test/main.go
Normal file
@ -0,0 +1,25 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"github.com/deepch/vdk/format/ts"
|
||||
"log"
|
||||
"os"
|
||||
)
|
||||
|
||||
func main() {
|
||||
f, _ := os.Open("edb9708f29b24ba9b175808d6b9df9c6541e25766d4a40209a8f903948b72f3f.ts")
|
||||
m := ts.NewDemuxer(f)
|
||||
var i int
|
||||
for {
|
||||
p, err := m.ReadPacket()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
if p.IsKeyFrame {
|
||||
i = 0
|
||||
}
|
||||
log.Println(i, p.Time, p.Data[4:10], len(p.Data))
|
||||
i++
|
||||
|
||||
}
|
||||
}
|
@ -3,6 +3,7 @@ package mp4f
|
||||
import (
|
||||
"bufio"
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
"time"
|
||||
|
||||
@ -238,14 +239,15 @@ func (self *Muxer) WriteTrailer() (err error) {
|
||||
return
|
||||
}
|
||||
|
||||
func (element *Muxer) WriteHeader(streams []av.CodecData) (err error) {
|
||||
func (element *Muxer) WriteHeader(streams []av.CodecData) error {
|
||||
element.streams = []*Stream{}
|
||||
for _, stream := range streams {
|
||||
if err = element.newStream(stream); err != nil {
|
||||
return
|
||||
if err := element.newStream(stream); err != nil {
|
||||
log.Println("WriteHeader", err)
|
||||
}
|
||||
}
|
||||
return
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (element *Muxer) GetInit(streams []av.CodecData) (string, []byte) {
|
||||
@ -285,6 +287,9 @@ func (element *Muxer) GetInit(streams []av.CodecData) (string, []byte) {
|
||||
}
|
||||
|
||||
func (element *Muxer) WritePacket(pkt av.Packet, GOP bool) (bool, []byte, error) {
|
||||
if pkt.Idx+1 > int8(len(element.streams)) {
|
||||
return false, nil, nil
|
||||
}
|
||||
stream := element.streams[pkt.Idx]
|
||||
if GOP {
|
||||
ts := time.Duration(0)
|
||||
|
@ -40,9 +40,10 @@ const (
|
||||
)
|
||||
|
||||
type Client struct {
|
||||
DebugRtsp bool
|
||||
DebugRtp bool
|
||||
Headers []string
|
||||
DebugRtsp bool
|
||||
DebugRtp bool
|
||||
DisableAudio bool
|
||||
Headers []string
|
||||
|
||||
SkipErrRtpBlock bool
|
||||
|
||||
@ -1076,12 +1077,44 @@ func (self *Stream) handleRtpPacket(packet []byte) (err error) {
|
||||
err = fmt.Errorf("rtp: packet too short")
|
||||
return
|
||||
}
|
||||
payloadOffset := 12 + int(packet[0]&0xf)*4
|
||||
|
||||
timestamp := binary.BigEndian.Uint32(packet[4:8])
|
||||
|
||||
/*
|
||||
Test offset
|
||||
*/
|
||||
Padding := (packet[0]>>5)&1 == 1
|
||||
Extension := (packet[0]>>4)&1 == 1
|
||||
CSRCCnt := int(packet[0] & 0x0f)
|
||||
|
||||
RTPHeaderSize := 12
|
||||
|
||||
payloadOffset := RTPHeaderSize
|
||||
end := len(packet)
|
||||
if end-payloadOffset >= 4*CSRCCnt {
|
||||
payloadOffset += 4 * CSRCCnt
|
||||
}
|
||||
|
||||
if Extension && end-payloadOffset >= 4 {
|
||||
extLen := 4 * int(binary.BigEndian.Uint16(packet[payloadOffset+2:]))
|
||||
payloadOffset += 4
|
||||
if end-payloadOffset >= extLen {
|
||||
payloadOffset += extLen
|
||||
}
|
||||
}
|
||||
|
||||
if Padding && end-payloadOffset > 0 {
|
||||
paddingLen := int(packet[end-1])
|
||||
if end-payloadOffset >= paddingLen {
|
||||
end -= paddingLen
|
||||
}
|
||||
}
|
||||
|
||||
if payloadOffset > len(packet) {
|
||||
err = fmt.Errorf("rtp: packet too short")
|
||||
return
|
||||
}
|
||||
timestamp := binary.BigEndian.Uint32(packet[4:8])
|
||||
|
||||
payload := packet[payloadOffset:]
|
||||
|
||||
/*
|
||||
|
1
format/rtsp/server.go
Normal file
1
format/rtsp/server.go
Normal file
@ -0,0 +1 @@
|
||||
package rtsp
|
@ -284,7 +284,11 @@ func (self *Stream) payloadEnd() (n int, err error) {
|
||||
b := make([]byte, 4+len(nalu))
|
||||
pio.PutU32BE(b[0:4], uint32(len(nalu)))
|
||||
copy(b[4:], nalu)
|
||||
self.addPacket(b, time.Duration(0), (1000*time.Millisecond)/time.Duration(self.fps))
|
||||
fps := self.fps
|
||||
if self.fps == 0 {
|
||||
fps = 25
|
||||
}
|
||||
self.addPacket(b, time.Duration(0), (1000*time.Millisecond)/time.Duration(fps))
|
||||
n++
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user