mirror of
https://github.com/pion/webrtc.git
synced 2025-09-27 03:25:58 +08:00
Fix MIME type comparisons to be case-insensitive
This commit is contained in:
@@ -240,7 +240,7 @@ func (m *MediaEngine) RegisterDefaultCodecs() error {
|
|||||||
func (m *MediaEngine) addCodec(codecs []RTPCodecParameters, codec RTPCodecParameters) ([]RTPCodecParameters, error) {
|
func (m *MediaEngine) addCodec(codecs []RTPCodecParameters, codec RTPCodecParameters) ([]RTPCodecParameters, error) {
|
||||||
for _, c := range codecs {
|
for _, c := range codecs {
|
||||||
if c.PayloadType == codec.PayloadType {
|
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.ClockRateEqual(c.MimeType, c.ClockRate, codec.ClockRate) &&
|
||||||
fmtp.ChannelsEqual(c.MimeType, c.Channels, codec.Channels) {
|
fmtp.ChannelsEqual(c.MimeType, c.Channels, codec.Channels) {
|
||||||
return codecs, nil
|
return codecs, nil
|
||||||
@@ -798,7 +798,7 @@ func payloaderForCodec(codec RTPCodecCapability) (rtp.Payloader, error) {
|
|||||||
|
|
||||||
func (m *MediaEngine) isRTXEnabled(typ RTPCodecType, directions []RTPTransceiverDirection) bool {
|
func (m *MediaEngine) isRTXEnabled(typ RTPCodecType, directions []RTPTransceiverDirection) bool {
|
||||||
for _, p := range m.getRTPParametersByKind(typ, directions).Codecs {
|
for _, p := range m.getRTPParametersByKind(typ, directions).Codecs {
|
||||||
if p.MimeType == MimeTypeRTX {
|
if strings.EqualFold(p.MimeType, MimeTypeRTX) {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -808,7 +808,7 @@ func (m *MediaEngine) isRTXEnabled(typ RTPCodecType, directions []RTPTransceiver
|
|||||||
|
|
||||||
func (m *MediaEngine) isFECEnabled(typ RTPCodecType, directions []RTPTransceiverDirection) bool {
|
func (m *MediaEngine) isFECEnabled(typ RTPCodecType, directions []RTPTransceiverDirection) bool {
|
||||||
for _, p := range m.getRTPParametersByKind(typ, directions).Codecs {
|
for _, p := range m.getRTPParametersByKind(typ, directions).Codecs {
|
||||||
if strings.Contains(p.MimeType, MimeTypeFlexFEC) {
|
if strings.Contains(strings.ToLower(p.MimeType), MimeTypeFlexFEC) {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -575,6 +575,7 @@ func TestMediaEngineHeaderExtensionDirection(t *testing.T) {
|
|||||||
|
|
||||||
// If a user attempts to register a codec twice we should just discard duplicate calls.
|
// If a user attempts to register a codec twice we should just discard duplicate calls.
|
||||||
func TestMediaEngineDoubleRegister(t *testing.T) {
|
func TestMediaEngineDoubleRegister(t *testing.T) {
|
||||||
|
t.Run("Same Codec", func(t *testing.T) {
|
||||||
mediaEngine := MediaEngine{}
|
mediaEngine := MediaEngine{}
|
||||||
|
|
||||||
assert.NoError(t, mediaEngine.RegisterCodec(
|
assert.NoError(t, mediaEngine.RegisterCodec(
|
||||||
@@ -590,6 +591,55 @@ func TestMediaEngineDoubleRegister(t *testing.T) {
|
|||||||
}, RTPCodecTypeAudio))
|
}, 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
|
// If a user attempts to register a codec with same payload but with different
|
||||||
|
Reference in New Issue
Block a user