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
 | |
| }
 | 
