diff --git a/pkg/format/format_test.go b/pkg/format/format_test.go index 45e0885b..3c5f8a2f 100644 --- a/pkg/format/format_test.go +++ b/pkg/format/format_test.go @@ -94,6 +94,28 @@ func TestNewFromMediaDescription(t *testing.T) { ChannelCount: 2, }, }, + { + "audio lpcm 16 with no explicit channel", + &psdp.MediaDescription{ + MediaName: psdp.MediaName{ + Media: "audio", + Protos: []string{"RTP", "AVP"}, + Formats: []string{"97"}, + }, + Attributes: []psdp.Attribute{ + { + Key: "rtpmap", + Value: "97 L16/16000", + }, + }, + }, + &LPCM{ + PayloadTyp: 97, + BitDepth: 16, + SampleRate: 16000, + ChannelCount: 1, + }, + }, { "audio lpcm 24", &psdp.MediaDescription{ diff --git a/pkg/format/lpcm.go b/pkg/format/lpcm.go index 091d238c..5f9c5bea 100644 --- a/pkg/format/lpcm.go +++ b/pkg/format/lpcm.go @@ -47,22 +47,26 @@ func (t *LPCM) unmarshal(payloadType uint8, clock string, codec string, rtpmap s t.BitDepth = 24 } - tmp := strings.SplitN(clock, "/", 32) - if len(tmp) != 2 { + tmp := strings.SplitN(clock, "/", 2) + if len(tmp) < 1 { return fmt.Errorf("invalid clock (%v)", clock) } - sampleRate, err := strconv.ParseInt(tmp[0], 10, 64) + tmp1, err := strconv.ParseInt(tmp[0], 10, 64) if err != nil { return err } - t.SampleRate = int(sampleRate) + t.SampleRate = int(tmp1) - channelCount, err := strconv.ParseInt(tmp[1], 10, 64) - if err != nil { - return err + if len(tmp) >= 2 { + tmp1, err := strconv.ParseInt(tmp[1], 10, 64) + if err != nil { + return err + } + t.ChannelCount = int(tmp1) + } else { + t.ChannelCount = 1 } - t.ChannelCount = int(channelCount) return nil }