101 lines
1.9 KiB
Go
101 lines
1.9 KiB
Go
package codec
|
|
|
|
import (
|
|
"time"
|
|
|
|
"git.r-2.top/kunmeng/vdk/av"
|
|
"git.r-2.top/kunmeng/vdk/codec/fake"
|
|
)
|
|
|
|
type OpusCodecData struct {
|
|
typ av.CodecType
|
|
SampleRate_ int
|
|
ChannelLayout_ av.ChannelLayout
|
|
}
|
|
|
|
func (self OpusCodecData) Type() av.CodecType {
|
|
return self.typ
|
|
}
|
|
|
|
func (self OpusCodecData) SampleRate() int {
|
|
return self.SampleRate_
|
|
}
|
|
|
|
func (self OpusCodecData) ChannelLayout() av.ChannelLayout {
|
|
return self.ChannelLayout_
|
|
}
|
|
|
|
func (self OpusCodecData) PacketDuration(data []byte) (time.Duration, error) {
|
|
return time.Duration(20) * time.Millisecond, nil
|
|
}
|
|
|
|
func (self OpusCodecData) SampleFormat() av.SampleFormat {
|
|
return av.FLT
|
|
}
|
|
|
|
type PCMUCodecData struct {
|
|
typ av.CodecType
|
|
}
|
|
|
|
func (self PCMUCodecData) Type() av.CodecType {
|
|
return self.typ
|
|
}
|
|
|
|
func (self PCMUCodecData) SampleRate() int {
|
|
return 8000
|
|
}
|
|
|
|
func (self PCMUCodecData) ChannelLayout() av.ChannelLayout {
|
|
return av.CH_MONO
|
|
}
|
|
|
|
func (self PCMUCodecData) SampleFormat() av.SampleFormat {
|
|
return av.S16
|
|
}
|
|
|
|
func (self PCMUCodecData) PacketDuration(data []byte) (time.Duration, error) {
|
|
return time.Duration(len(data)) * time.Second / time.Duration(8000), nil
|
|
}
|
|
|
|
func NewPCMMulawCodecData() av.AudioCodecData {
|
|
return PCMUCodecData{
|
|
typ: av.PCM_MULAW,
|
|
}
|
|
}
|
|
|
|
func NewPCMCodecData() av.AudioCodecData {
|
|
return PCMUCodecData{
|
|
typ: av.PCM,
|
|
}
|
|
}
|
|
|
|
func NewPCMAlawCodecData() av.AudioCodecData {
|
|
return PCMUCodecData{
|
|
typ: av.PCM_ALAW,
|
|
}
|
|
}
|
|
func NewOpusCodecData(sr int, cc av.ChannelLayout) av.AudioCodecData {
|
|
return OpusCodecData{
|
|
typ: av.OPUS,
|
|
SampleRate_: sr,
|
|
ChannelLayout_: cc,
|
|
}
|
|
}
|
|
|
|
type SpeexCodecData struct {
|
|
fake.CodecData
|
|
}
|
|
|
|
func (self SpeexCodecData) PacketDuration(data []byte) (time.Duration, error) {
|
|
return time.Millisecond * 20, nil
|
|
}
|
|
|
|
func NewSpeexCodecData(sr int, cl av.ChannelLayout) SpeexCodecData {
|
|
codec := SpeexCodecData{}
|
|
codec.CodecType_ = av.SPEEX
|
|
codec.SampleFormat_ = av.S16
|
|
codec.SampleRate_ = sr
|
|
codec.ChannelLayout_ = cl
|
|
return codec
|
|
}
|