support detecting LPCM formats with payload types 10 and 11 (#496)

This commit is contained in:
Alessandro Ros
2024-01-07 13:01:36 +01:00
committed by GitHub
parent 7d30b5f1b7
commit f9eb8e573b
22 changed files with 131 additions and 68 deletions

View File

@@ -55,26 +55,12 @@ func Unmarshal(mediaType string, payloadType uint8, rtpMap string, fmtp map[stri
format := func() Format {
switch {
/*
* static payload types
**/
// video
case codec == "av1" && clock == "90000":
return &AV1{}
case codec == "vp9" && clock == "90000":
return &VP9{}
case codec == "vp8" && clock == "90000":
return &VP8{}
case codec == "h265" && clock == "90000":
return &H265{}
case codec == "h264" && clock == "90000":
return &H264{}
case codec == "mp4v-es" && clock == "90000":
return &MPEG4Video{}
case payloadType == 32:
return &MPEG1Video{}
@@ -86,42 +72,74 @@ func Unmarshal(mediaType string, payloadType uint8, rtpMap string, fmtp map[stri
// audio
case codec == "opus":
return &Opus{}
case codec == "vorbis":
return &Vorbis{}
case codec == "mpeg4-generic", codec == "mp4a-latm":
return &MPEG4Audio{}
case payloadType == 14:
return &MPEG1Audio{}
case codec == "ac3":
return &AC3{}
case codec == "speex":
return &Speex{}
case (codec == "g726-16" ||
codec == "g726-24" ||
codec == "g726-32" ||
codec == "g726-40" ||
codec == "aal2-g726-16" ||
codec == "aal2-g726-24" ||
codec == "aal2-g726-32" ||
codec == "aal2-g726-40") && clock == "8000":
return &G726{}
case payloadType == 9:
return &G722{}
case payloadType == 0, payloadType == 8:
return &G711{}
case codec == "l8", codec == "l16", codec == "l24":
case payloadType == 10, payloadType == 11:
return &LPCM{}
/*
* dynamic payload types
**/
case payloadType >= 96 && payloadType <= 127:
switch {
// video
case codec == "av1" && clock == "90000":
return &AV1{}
case codec == "vp9" && clock == "90000":
return &VP9{}
case codec == "vp8" && clock == "90000":
return &VP8{}
case codec == "h265" && clock == "90000":
return &H265{}
case codec == "h264" && clock == "90000":
return &H264{}
case codec == "mp4v-es" && clock == "90000":
return &MPEG4Video{}
// audio
case codec == "opus":
return &Opus{}
case codec == "vorbis":
return &Vorbis{}
case codec == "mpeg4-generic", codec == "mp4a-latm":
return &MPEG4Audio{}
case codec == "ac3":
return &AC3{}
case codec == "speex":
return &Speex{}
case (codec == "g726-16" ||
codec == "g726-24" ||
codec == "g726-32" ||
codec == "g726-40" ||
codec == "aal2-g726-16" ||
codec == "aal2-g726-24" ||
codec == "aal2-g726-32" ||
codec == "aal2-g726-40") && clock == "8000":
return &G726{}
case codec == "l8", codec == "l16", codec == "l24":
return &LPCM{}
}
}
return &Generic{}