discard invalid H264 parameters (#431)

(https://github.com/bluenviron/mediamtx/issues/2348)
This commit is contained in:
Alessandro Ros
2023-09-22 13:49:05 +02:00
committed by GitHub
parent 44da79f72d
commit a5db98521d
2 changed files with 28 additions and 7 deletions

View File

@@ -808,6 +808,25 @@ var casesFormat = []struct {
"sprop-parameter-sets": "Z00AHo2NQFoe0IAAA4QAAK/IAg==,aO44gA==",
},
},
{
"video h264 with unparsable parameters (mediamtx/2348)",
"video",
96,
"H264/90000",
map[string]string{
"sprop-parameter-sets": "QgEBAWAAAAMAAAMAAAMAAAMAlqADwIAQ5Y2uSTJrlnAIAAADAAgAAAMAyEA=,RAHgdrAmQA==",
"packetization-mode": "1",
"profile-level-id": "010101",
},
&H264{
PayloadTyp: 96,
PacketizationMode: 1,
},
"H264/90000",
map[string]string{
"packetization-mode": "1",
},
},
{
"video h265",
"video",

View File

@@ -34,28 +34,30 @@ func (f *H264) unmarshal(ctx *unmarshalContext) error {
case "sprop-parameter-sets":
tmp := strings.Split(val, ",")
if len(tmp) >= 2 {
var err error
f.SPS, err = base64.StdEncoding.DecodeString(tmp[0])
sps, err := base64.StdEncoding.DecodeString(tmp[0])
if err != nil {
return fmt.Errorf("invalid sprop-parameter-sets (%v)", val)
}
// some cameras ship parameters with Annex-B prefix
f.SPS = bytes.TrimPrefix(f.SPS, []byte{0, 0, 0, 1})
sps = bytes.TrimPrefix(sps, []byte{0, 0, 0, 1})
f.PPS, err = base64.StdEncoding.DecodeString(tmp[1])
pps, err := base64.StdEncoding.DecodeString(tmp[1])
if err != nil {
return fmt.Errorf("invalid sprop-parameter-sets (%v)", val)
}
// some cameras ship parameters with Annex-B prefix
f.PPS = bytes.TrimPrefix(f.PPS, []byte{0, 0, 0, 1})
pps = bytes.TrimPrefix(pps, []byte{0, 0, 0, 1})
var spsp h264.SPS
err = spsp.Unmarshal(f.SPS)
err = spsp.Unmarshal(sps)
if err != nil {
return fmt.Errorf("invalid SPS: %v", err)
continue
}
f.SPS = sps
f.PPS = pps
}
case "packetization-mode":