Expose internal structure of packets on packetizer
Some checks failed
continuous-integration/drone/push Build is failing
Some checks failed
continuous-integration/drone/push Build is failing
This commit is contained in:
parent
ac32c8c4ec
commit
b7ce508d50
|
@ -15,9 +15,10 @@ type AdtsPacketizer struct {
|
|||
}
|
||||
|
||||
type AdtsPacket struct {
|
||||
sampleNumber int64
|
||||
header *aacAdts.ADTSHeader
|
||||
data []byte
|
||||
SampleNumber int64
|
||||
Header *aacAdts.ADTSHeader
|
||||
// Data raw AAC frame
|
||||
Data []byte
|
||||
}
|
||||
|
||||
func (p *AdtsPacket) KeepMode() KeepMode {
|
||||
|
@ -25,11 +26,11 @@ func (p *AdtsPacket) KeepMode() KeepMode {
|
|||
}
|
||||
|
||||
func (p *AdtsPacket) GetStartSampleNumber() int64 {
|
||||
return p.sampleNumber
|
||||
return p.SampleNumber
|
||||
}
|
||||
|
||||
func (p *AdtsPacket) GetEndSampleNumber() int64 {
|
||||
return p.sampleNumber + adtsAACFrameSamples
|
||||
return p.SampleNumber + adtsAACFrameSamples
|
||||
}
|
||||
|
||||
func (p *AdtsPacket) Category() int64 {
|
||||
|
@ -37,8 +38,8 @@ func (p *AdtsPacket) Category() int64 {
|
|||
}
|
||||
|
||||
func (p *AdtsPacket) GetData() (result []byte) {
|
||||
result = append(result, p.header.Encode()...)
|
||||
result = append(result, p.data...)
|
||||
result = append(result, p.Header.Encode()...)
|
||||
result = append(result, p.Data...)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -59,19 +60,19 @@ func (o *AdtsPacketizer) GetPacket() Packet {
|
|||
return nil
|
||||
}
|
||||
|
||||
packet.header = header
|
||||
packet.data = make([]byte, packet.header.PayloadLength)
|
||||
packet.Header = header
|
||||
packet.Data = make([]byte, packet.Header.PayloadLength)
|
||||
|
||||
var n int
|
||||
if n, err = io.ReadFull(o.reader, packet.data); err != nil {
|
||||
if n, err = io.ReadFull(o.reader, packet.Data); err != nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
if n != len(packet.data) {
|
||||
if n != len(packet.Data) {
|
||||
return nil
|
||||
}
|
||||
|
||||
packet.sampleNumber = o.samples
|
||||
packet.SampleNumber = o.samples
|
||||
o.samples += adtsAACFrameSamples //always this fixed size per frame
|
||||
|
||||
return packet
|
||||
|
|
|
@ -22,7 +22,6 @@ type FLACHeaderPacket struct {
|
|||
TotalSamples uint64
|
||||
Hash [128 / 8]byte
|
||||
MetadataBlocks [][]byte
|
||||
buf []byte
|
||||
}
|
||||
|
||||
func (p *FLACHeaderPacket) KeepMode() KeepMode {
|
||||
|
@ -84,9 +83,7 @@ func readFlacMetadataBlock(br *bitio.Reader) (block byte, data []byte) {
|
|||
}
|
||||
|
||||
func readFlacHeader(br *bitio.Reader) *FLACHeaderPacket {
|
||||
hdr := &FLACHeaderPacket{
|
||||
buf: make([]byte, 0, 1024*1024),
|
||||
}
|
||||
hdr := &FLACHeaderPacket{}
|
||||
|
||||
if _, err := br.Read(hdr.Capture[:]); err != nil || bytes.Compare(hdr.Capture[:], []byte("fLaC")) != 0 {
|
||||
return nil
|
||||
|
|
|
@ -12,8 +12,8 @@ type Mp3Packetizer struct {
|
|||
}
|
||||
|
||||
type Mp3Packet struct {
|
||||
sampleNumber int64
|
||||
frame mp3parser.Frame
|
||||
SampleNumber int64
|
||||
Frame mp3parser.Frame
|
||||
}
|
||||
|
||||
func (p *Mp3Packet) KeepMode() KeepMode {
|
||||
|
@ -21,11 +21,11 @@ func (p *Mp3Packet) KeepMode() KeepMode {
|
|||
}
|
||||
|
||||
func (p *Mp3Packet) GetStartSampleNumber() int64 {
|
||||
return p.sampleNumber
|
||||
return p.SampleNumber
|
||||
}
|
||||
|
||||
func (p *Mp3Packet) GetEndSampleNumber() int64 {
|
||||
return p.sampleNumber + int64(p.frame.Samples())
|
||||
return p.SampleNumber + int64(p.Frame.Samples())
|
||||
}
|
||||
|
||||
func (p *Mp3Packet) Category() int64 {
|
||||
|
@ -33,7 +33,7 @@ func (p *Mp3Packet) Category() int64 {
|
|||
}
|
||||
|
||||
func (p *Mp3Packet) GetData() []byte {
|
||||
return p.frame.Bytes()
|
||||
return p.Frame.Bytes()
|
||||
}
|
||||
|
||||
func (p *Mp3Packet) GetDataOffset(_ int64) []byte {
|
||||
|
@ -49,12 +49,12 @@ func (o *Mp3Packetizer) GetPacket() Packet {
|
|||
|
||||
var skipped int
|
||||
|
||||
if err := o.decoder.Decode(&packet.frame, &skipped); err != nil {
|
||||
if err := o.decoder.Decode(&packet.Frame, &skipped); err != nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
packet.sampleNumber = o.samples
|
||||
o.samples += int64(packet.frame.Samples())
|
||||
packet.SampleNumber = o.samples
|
||||
o.samples += int64(packet.Frame.Samples())
|
||||
|
||||
return packet
|
||||
}
|
||||
|
|
|
@ -24,36 +24,36 @@ type oggPacketHeader struct {
|
|||
PageSegments byte
|
||||
}
|
||||
type OggPacket struct {
|
||||
sampleNumber int64
|
||||
header oggPacketHeader
|
||||
pageSegmentTable []byte
|
||||
segments [][]byte
|
||||
SampleNumber int64
|
||||
Header oggPacketHeader
|
||||
PageSegmentTable []byte
|
||||
Segments [][]byte
|
||||
}
|
||||
|
||||
func (p *OggPacket) KeepMode() KeepMode {
|
||||
if p.header.AbsoluteGranulePosition == 0 {
|
||||
if p.Header.AbsoluteGranulePosition == 0 {
|
||||
return Keep
|
||||
}
|
||||
return Discard
|
||||
}
|
||||
|
||||
func (p *OggPacket) GetStartSampleNumber() int64 {
|
||||
return p.sampleNumber
|
||||
return p.SampleNumber
|
||||
}
|
||||
|
||||
func (p *OggPacket) GetEndSampleNumber() int64 {
|
||||
return p.header.AbsoluteGranulePosition
|
||||
return p.Header.AbsoluteGranulePosition
|
||||
}
|
||||
|
||||
func (p *OggPacket) Category() int64 {
|
||||
return int64(p.header.StreamSerialNumber)
|
||||
return int64(p.Header.StreamSerialNumber)
|
||||
}
|
||||
|
||||
func (p *OggPacket) GetData() []byte {
|
||||
buf := bytes.NewBuffer(make([]byte, 0, 4+1+1+8+4+4+4+1+int(p.header.PageSegments)*(255+1)))
|
||||
_ = binary.Write(buf, binary.LittleEndian, p.header)
|
||||
_ = binary.Write(buf, binary.LittleEndian, p.pageSegmentTable)
|
||||
for _, segment := range p.segments {
|
||||
buf := bytes.NewBuffer(make([]byte, 0, 4+1+1+8+4+4+4+1+int(p.Header.PageSegments)*(255+1)))
|
||||
_ = binary.Write(buf, binary.LittleEndian, p.Header)
|
||||
_ = binary.Write(buf, binary.LittleEndian, p.PageSegmentTable)
|
||||
for _, segment := range p.Segments {
|
||||
if len(segment) > 0 {
|
||||
_ = binary.Write(buf, binary.LittleEndian, segment)
|
||||
}
|
||||
|
@ -63,15 +63,15 @@ func (p *OggPacket) GetData() []byte {
|
|||
}
|
||||
|
||||
func (p *OggPacket) GetDataOffset(offset int64) []byte {
|
||||
buf := bytes.NewBuffer(make([]byte, 0, 4+1+1+8+4+4+4+1+int(p.header.PageSegments)*(255+1)))
|
||||
buf := bytes.NewBuffer(make([]byte, 0, 4+1+1+8+4+4+4+1+int(p.Header.PageSegments)*(255+1)))
|
||||
|
||||
//rewrite header
|
||||
headerClone := p.header
|
||||
headerClone := p.Header
|
||||
headerClone.AbsoluteGranulePosition -= offset
|
||||
headerClone.PageChecksum = 0
|
||||
_ = binary.Write(buf, binary.LittleEndian, headerClone)
|
||||
_ = binary.Write(buf, binary.LittleEndian, p.pageSegmentTable)
|
||||
for _, segment := range p.segments {
|
||||
_ = binary.Write(buf, binary.LittleEndian, p.PageSegmentTable)
|
||||
for _, segment := range p.Segments {
|
||||
if len(segment) > 0 {
|
||||
_ = binary.Write(buf, binary.LittleEndian, segment)
|
||||
}
|
||||
|
@ -89,28 +89,28 @@ func NewOggPacketizer(reader io.Reader) *OggPacketizer {
|
|||
|
||||
func (o *OggPacketizer) GetPacket() Packet {
|
||||
packet := &OggPacket{}
|
||||
if err := binary.Read(o.reader, binary.LittleEndian, &packet.header); err != nil || bytes.Compare(packet.header.Capture[:], []byte{'O', 'g', 'g', 'S'}) != 0 {
|
||||
if err := binary.Read(o.reader, binary.LittleEndian, &packet.Header); err != nil || bytes.Compare(packet.Header.Capture[:], []byte{'O', 'g', 'g', 'S'}) != 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
packet.pageSegmentTable = make([]byte, packet.header.PageSegments)
|
||||
if err := binary.Read(o.reader, binary.LittleEndian, packet.pageSegmentTable); err != nil {
|
||||
packet.PageSegmentTable = make([]byte, packet.Header.PageSegments)
|
||||
if err := binary.Read(o.reader, binary.LittleEndian, packet.PageSegmentTable); err != nil {
|
||||
return nil
|
||||
}
|
||||
packet.segments = make([][]byte, packet.header.PageSegments)
|
||||
packet.Segments = make([][]byte, packet.Header.PageSegments)
|
||||
|
||||
for i, size := range packet.pageSegmentTable {
|
||||
for i, size := range packet.PageSegmentTable {
|
||||
if size > 0 {
|
||||
packet.segments[i] = make([]byte, size)
|
||||
if err := binary.Read(o.reader, binary.LittleEndian, packet.segments[i]); err != nil {
|
||||
packet.Segments[i] = make([]byte, size)
|
||||
if err := binary.Read(o.reader, binary.LittleEndian, packet.Segments[i]); err != nil {
|
||||
return nil
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//use previous sample number instead
|
||||
packet.sampleNumber = o.samples
|
||||
o.samples = packet.header.AbsoluteGranulePosition
|
||||
packet.SampleNumber = o.samples
|
||||
o.samples = packet.Header.AbsoluteGranulePosition
|
||||
|
||||
return packet
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue