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) {
|
||||
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
|
||||
}
|
||||
}
|
||||
|
@@ -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
|
||||
|
Reference in New Issue
Block a user