Fix MIME type comparisons to be case-insensitive

This commit is contained in:
SangHo
2025-04-07 19:27:49 +09:00
committed by Joe Turki
parent 788147df80
commit 3e2a804b08
2 changed files with 65 additions and 15 deletions

View File

@@ -240,7 +240,7 @@ func (m *MediaEngine) RegisterDefaultCodecs() error {
func (m *MediaEngine) addCodec(codecs []RTPCodecParameters, codec RTPCodecParameters) ([]RTPCodecParameters, error) {
for _, c := range codecs {
if c.PayloadType == codec.PayloadType {
if c.MimeType == codec.MimeType &&
if strings.EqualFold(c.MimeType, codec.MimeType) &&
fmtp.ClockRateEqual(c.MimeType, c.ClockRate, codec.ClockRate) &&
fmtp.ChannelsEqual(c.MimeType, c.Channels, codec.Channels) {
return codecs, nil
@@ -798,7 +798,7 @@ func payloaderForCodec(codec RTPCodecCapability) (rtp.Payloader, error) {
func (m *MediaEngine) isRTXEnabled(typ RTPCodecType, directions []RTPTransceiverDirection) bool {
for _, p := range m.getRTPParametersByKind(typ, directions).Codecs {
if p.MimeType == MimeTypeRTX {
if strings.EqualFold(p.MimeType, MimeTypeRTX) {
return true
}
}
@@ -808,7 +808,7 @@ func (m *MediaEngine) isRTXEnabled(typ RTPCodecType, directions []RTPTransceiver
func (m *MediaEngine) isFECEnabled(typ RTPCodecType, directions []RTPTransceiverDirection) bool {
for _, p := range m.getRTPParametersByKind(typ, directions).Codecs {
if strings.Contains(p.MimeType, MimeTypeFlexFEC) {
if strings.Contains(strings.ToLower(p.MimeType), MimeTypeFlexFEC) {
return true
}
}

View File

@@ -575,21 +575,71 @@ func TestMediaEngineHeaderExtensionDirection(t *testing.T) {
// If a user attempts to register a codec twice we should just discard duplicate calls.
func TestMediaEngineDoubleRegister(t *testing.T) {
mediaEngine := MediaEngine{}
t.Run("Same Codec", func(t *testing.T) {
mediaEngine := MediaEngine{}
assert.NoError(t, mediaEngine.RegisterCodec(
RTPCodecParameters{
RTPCodecCapability: RTPCodecCapability{MimeTypeOpus, 48000, 0, "", nil},
PayloadType: 111,
}, RTPCodecTypeAudio))
assert.NoError(t, mediaEngine.RegisterCodec(
RTPCodecParameters{
RTPCodecCapability: RTPCodecCapability{MimeTypeOpus, 48000, 0, "", nil},
PayloadType: 111,
}, RTPCodecTypeAudio))
assert.NoError(t, mediaEngine.RegisterCodec(
RTPCodecParameters{
RTPCodecCapability: RTPCodecCapability{MimeTypeOpus, 48000, 0, "", nil},
PayloadType: 111,
}, RTPCodecTypeAudio))
assert.NoError(t, mediaEngine.RegisterCodec(
RTPCodecParameters{
RTPCodecCapability: RTPCodecCapability{MimeTypeOpus, 48000, 0, "", nil},
PayloadType: 111,
}, RTPCodecTypeAudio))
assert.Equal(t, len(mediaEngine.audioCodecs), 1)
assert.Equal(t, len(mediaEngine.audioCodecs), 1)
})
t.Run("Case Insensitive Audio Codec", func(t *testing.T) {
mediaEngine := MediaEngine{}
assert.NoError(t, mediaEngine.RegisterCodec(
RTPCodecParameters{
RTPCodecCapability: RTPCodecCapability{"audio/OPUS", 48000, 0, "", nil},
PayloadType: 111,
}, RTPCodecTypeAudio))
assert.NoError(t, mediaEngine.RegisterCodec(
RTPCodecParameters{
RTPCodecCapability: RTPCodecCapability{"audio/opus", 48000, 0, "", nil},
PayloadType: 111,
}, RTPCodecTypeAudio))
assert.Equal(t, len(mediaEngine.audioCodecs), 1)
})
t.Run("Case Insensitive Video Codec", func(t *testing.T) {
mediaEngine := MediaEngine{}
assert.NoError(t, mediaEngine.RegisterCodec(
RTPCodecParameters{
RTPCodecCapability: RTPCodecCapability{strings.ToUpper(MimeTypeRTX), 90000, 0, "", nil},
PayloadType: 98,
}, RTPCodecTypeVideo))
assert.NoError(t, mediaEngine.RegisterCodec(
RTPCodecParameters{
RTPCodecCapability: RTPCodecCapability{MimeTypeRTX, 90000, 0, "", nil},
PayloadType: 98,
}, RTPCodecTypeVideo))
assert.NoError(t, mediaEngine.RegisterCodec(
RTPCodecParameters{
RTPCodecCapability: RTPCodecCapability{strings.ToUpper(MimeTypeFlexFEC), 90000, 0, "", nil},
PayloadType: 100,
}, RTPCodecTypeVideo))
assert.NoError(t, mediaEngine.RegisterCodec(
RTPCodecParameters{
RTPCodecCapability: RTPCodecCapability{MimeTypeFlexFEC, 90000, 0, "", nil},
PayloadType: 100,
}, RTPCodecTypeVideo))
assert.Equal(t, len(mediaEngine.videoCodecs), 2)
isRTX := mediaEngine.isRTXEnabled(RTPCodecTypeVideo, []RTPTransceiverDirection{RTPTransceiverDirectionRecvonly})
assert.True(t, isRTX)
isFEC := mediaEngine.isFECEnabled(RTPCodecTypeVideo, []RTPTransceiverDirection{RTPTransceiverDirectionRecvonly})
assert.True(t, isFEC)
})
}
// If a user attempts to register a codec with same payload but with different