Skip to content

Commit 3e2a804

Browse files
San9H0JoeTurki
authored andcommitted
Fix MIME type comparisons to be case-insensitive
1 parent 788147d commit 3e2a804

File tree

2 files changed

+65
-15
lines changed

2 files changed

+65
-15
lines changed

mediaengine.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -240,7 +240,7 @@ func (m *MediaEngine) RegisterDefaultCodecs() error {
240240
func (m *MediaEngine) addCodec(codecs []RTPCodecParameters, codec RTPCodecParameters) ([]RTPCodecParameters, error) {
241241
for _, c := range codecs {
242242
if c.PayloadType == codec.PayloadType {
243-
if c.MimeType == codec.MimeType &&
243+
if strings.EqualFold(c.MimeType, codec.MimeType) &&
244244
fmtp.ClockRateEqual(c.MimeType, c.ClockRate, codec.ClockRate) &&
245245
fmtp.ChannelsEqual(c.MimeType, c.Channels, codec.Channels) {
246246
return codecs, nil
@@ -798,7 +798,7 @@ func payloaderForCodec(codec RTPCodecCapability) (rtp.Payloader, error) {
798798

799799
func (m *MediaEngine) isRTXEnabled(typ RTPCodecType, directions []RTPTransceiverDirection) bool {
800800
for _, p := range m.getRTPParametersByKind(typ, directions).Codecs {
801-
if p.MimeType == MimeTypeRTX {
801+
if strings.EqualFold(p.MimeType, MimeTypeRTX) {
802802
return true
803803
}
804804
}
@@ -808,7 +808,7 @@ func (m *MediaEngine) isRTXEnabled(typ RTPCodecType, directions []RTPTransceiver
808808

809809
func (m *MediaEngine) isFECEnabled(typ RTPCodecType, directions []RTPTransceiverDirection) bool {
810810
for _, p := range m.getRTPParametersByKind(typ, directions).Codecs {
811-
if strings.Contains(p.MimeType, MimeTypeFlexFEC) {
811+
if strings.Contains(strings.ToLower(p.MimeType), MimeTypeFlexFEC) {
812812
return true
813813
}
814814
}

mediaengine_test.go

+62-12
Original file line numberDiff line numberDiff line change
@@ -575,21 +575,71 @@ func TestMediaEngineHeaderExtensionDirection(t *testing.T) {
575575

576576
// If a user attempts to register a codec twice we should just discard duplicate calls.
577577
func TestMediaEngineDoubleRegister(t *testing.T) {
578-
mediaEngine := MediaEngine{}
578+
t.Run("Same Codec", func(t *testing.T) {
579+
mediaEngine := MediaEngine{}
579580

580-
assert.NoError(t, mediaEngine.RegisterCodec(
581-
RTPCodecParameters{
582-
RTPCodecCapability: RTPCodecCapability{MimeTypeOpus, 48000, 0, "", nil},
583-
PayloadType: 111,
584-
}, RTPCodecTypeAudio))
581+
assert.NoError(t, mediaEngine.RegisterCodec(
582+
RTPCodecParameters{
583+
RTPCodecCapability: RTPCodecCapability{MimeTypeOpus, 48000, 0, "", nil},
584+
PayloadType: 111,
585+
}, RTPCodecTypeAudio))
585586

586-
assert.NoError(t, mediaEngine.RegisterCodec(
587-
RTPCodecParameters{
588-
RTPCodecCapability: RTPCodecCapability{MimeTypeOpus, 48000, 0, "", nil},
589-
PayloadType: 111,
590-
}, RTPCodecTypeAudio))
587+
assert.NoError(t, mediaEngine.RegisterCodec(
588+
RTPCodecParameters{
589+
RTPCodecCapability: RTPCodecCapability{MimeTypeOpus, 48000, 0, "", nil},
590+
PayloadType: 111,
591+
}, RTPCodecTypeAudio))
591592

592-
assert.Equal(t, len(mediaEngine.audioCodecs), 1)
593+
assert.Equal(t, len(mediaEngine.audioCodecs), 1)
594+
})
595+
596+
t.Run("Case Insensitive Audio Codec", func(t *testing.T) {
597+
mediaEngine := MediaEngine{}
598+
599+
assert.NoError(t, mediaEngine.RegisterCodec(
600+
RTPCodecParameters{
601+
RTPCodecCapability: RTPCodecCapability{"audio/OPUS", 48000, 0, "", nil},
602+
PayloadType: 111,
603+
}, RTPCodecTypeAudio))
604+
605+
assert.NoError(t, mediaEngine.RegisterCodec(
606+
RTPCodecParameters{
607+
RTPCodecCapability: RTPCodecCapability{"audio/opus", 48000, 0, "", nil},
608+
PayloadType: 111,
609+
}, RTPCodecTypeAudio))
610+
611+
assert.Equal(t, len(mediaEngine.audioCodecs), 1)
612+
})
613+
614+
t.Run("Case Insensitive Video Codec", func(t *testing.T) {
615+
mediaEngine := MediaEngine{}
616+
617+
assert.NoError(t, mediaEngine.RegisterCodec(
618+
RTPCodecParameters{
619+
RTPCodecCapability: RTPCodecCapability{strings.ToUpper(MimeTypeRTX), 90000, 0, "", nil},
620+
PayloadType: 98,
621+
}, RTPCodecTypeVideo))
622+
assert.NoError(t, mediaEngine.RegisterCodec(
623+
RTPCodecParameters{
624+
RTPCodecCapability: RTPCodecCapability{MimeTypeRTX, 90000, 0, "", nil},
625+
PayloadType: 98,
626+
}, RTPCodecTypeVideo))
627+
assert.NoError(t, mediaEngine.RegisterCodec(
628+
RTPCodecParameters{
629+
RTPCodecCapability: RTPCodecCapability{strings.ToUpper(MimeTypeFlexFEC), 90000, 0, "", nil},
630+
PayloadType: 100,
631+
}, RTPCodecTypeVideo))
632+
assert.NoError(t, mediaEngine.RegisterCodec(
633+
RTPCodecParameters{
634+
RTPCodecCapability: RTPCodecCapability{MimeTypeFlexFEC, 90000, 0, "", nil},
635+
PayloadType: 100,
636+
}, RTPCodecTypeVideo))
637+
assert.Equal(t, len(mediaEngine.videoCodecs), 2)
638+
isRTX := mediaEngine.isRTXEnabled(RTPCodecTypeVideo, []RTPTransceiverDirection{RTPTransceiverDirectionRecvonly})
639+
assert.True(t, isRTX)
640+
isFEC := mediaEngine.isFECEnabled(RTPCodecTypeVideo, []RTPTransceiverDirection{RTPTransceiverDirectionRecvonly})
641+
assert.True(t, isFEC)
642+
})
593643
}
594644

595645
// If a user attempts to register a codec with same payload but with different

0 commit comments

Comments
 (0)