Kirika/audio/packetizer/mp3.go
DataHoarder b7ce508d50
Some checks failed
continuous-integration/drone/push Build is failing
Expose internal structure of packets on packetizer
2022-11-07 14:02:07 +01:00

61 lines
1 KiB
Go

package packetizer
import (
"bufio"
mp3parser "github.com/sssgun/mp3"
"io"
)
type Mp3Packetizer struct {
decoder *mp3parser.Decoder
samples int64
}
type Mp3Packet struct {
SampleNumber int64
Frame mp3parser.Frame
}
func (p *Mp3Packet) KeepMode() KeepMode {
return Discard
}
func (p *Mp3Packet) GetStartSampleNumber() int64 {
return p.SampleNumber
}
func (p *Mp3Packet) GetEndSampleNumber() int64 {
return p.SampleNumber + int64(p.Frame.Samples())
}
func (p *Mp3Packet) Category() int64 {
return 0
}
func (p *Mp3Packet) GetData() []byte {
return p.Frame.Bytes()
}
func (p *Mp3Packet) GetDataOffset(_ int64) []byte {
return p.GetData()
}
func NewMp3Packetizer(reader io.Reader) *Mp3Packetizer {
return &Mp3Packetizer{decoder: mp3parser.NewDecoder(bufio.NewReader(reader))}
}
func (o *Mp3Packetizer) GetPacket() Packet {
packet := &Mp3Packet{}
var skipped int
if err := o.decoder.Decode(&packet.Frame, &skipped); err != nil {
return nil
}
packet.SampleNumber = o.samples
o.samples += int64(packet.Frame.Samples())
return packet
}