mirror of
https://github.com/aler9/gortsplib
synced 2025-10-04 23:02:45 +08:00
discard invalid H264 parameters (#431)
(https://github.com/bluenviron/mediamtx/issues/2348)
This commit is contained in:
@@ -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",
|
||||
|
@@ -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":
|
||||
|
Reference in New Issue
Block a user