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==",
|
"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 h265",
|
||||||
"video",
|
"video",
|
||||||
|
@@ -34,28 +34,30 @@ func (f *H264) unmarshal(ctx *unmarshalContext) error {
|
|||||||
case "sprop-parameter-sets":
|
case "sprop-parameter-sets":
|
||||||
tmp := strings.Split(val, ",")
|
tmp := strings.Split(val, ",")
|
||||||
if len(tmp) >= 2 {
|
if len(tmp) >= 2 {
|
||||||
var err error
|
sps, err := base64.StdEncoding.DecodeString(tmp[0])
|
||||||
f.SPS, err = base64.StdEncoding.DecodeString(tmp[0])
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("invalid sprop-parameter-sets (%v)", val)
|
return fmt.Errorf("invalid sprop-parameter-sets (%v)", val)
|
||||||
}
|
}
|
||||||
|
|
||||||
// some cameras ship parameters with Annex-B prefix
|
// 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 {
|
if err != nil {
|
||||||
return fmt.Errorf("invalid sprop-parameter-sets (%v)", val)
|
return fmt.Errorf("invalid sprop-parameter-sets (%v)", val)
|
||||||
}
|
}
|
||||||
|
|
||||||
// some cameras ship parameters with Annex-B prefix
|
// 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
|
var spsp h264.SPS
|
||||||
err = spsp.Unmarshal(f.SPS)
|
err = spsp.Unmarshal(sps)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("invalid SPS: %v", err)
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
f.SPS = sps
|
||||||
|
f.PPS = pps
|
||||||
}
|
}
|
||||||
|
|
||||||
case "packetization-mode":
|
case "packetization-mode":
|
||||||
|
Reference in New Issue
Block a user