mirror of
https://github.com/aler9/gortsplib
synced 2025-10-08 16:40:09 +08:00
move RTP decoders/encoders into pkt/rtpcodecs
This commit is contained in:
37
pkg/rtpcodecs/rtplpcm/decoder.go
Normal file
37
pkg/rtpcodecs/rtplpcm/decoder.go
Normal file
@@ -0,0 +1,37 @@
|
||||
package rtplpcm
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"github.com/pion/rtp"
|
||||
|
||||
"github.com/aler9/gortsplib/pkg/rtptimedec"
|
||||
)
|
||||
|
||||
// Decoder is a RTP/LPCM decoder.
|
||||
type Decoder struct {
|
||||
BitDepth int
|
||||
SampleRate int
|
||||
ChannelCount int
|
||||
|
||||
timeDecoder *rtptimedec.Decoder
|
||||
sampleSize int
|
||||
}
|
||||
|
||||
// Init initializes the decoder.
|
||||
func (d *Decoder) Init() {
|
||||
d.timeDecoder = rtptimedec.New(d.SampleRate)
|
||||
d.sampleSize = d.BitDepth * d.ChannelCount / 8
|
||||
}
|
||||
|
||||
// Decode decodes audio samples from a RTP packet.
|
||||
// It returns audio samples and PTS of the first sample.
|
||||
func (d *Decoder) Decode(pkt *rtp.Packet) ([]byte, time.Duration, error) {
|
||||
plen := len(pkt.Payload)
|
||||
if (plen % d.sampleSize) != 0 {
|
||||
return nil, 0, fmt.Errorf("received payload of wrong size")
|
||||
}
|
||||
|
||||
return pkt.Payload, d.timeDecoder.Decode(pkt.Timestamp), nil
|
||||
}
|
Reference in New Issue
Block a user