fix parsing of H264 tracks with empty sprop-parameter-sets

This commit is contained in:
aler9
2022-12-13 19:02:01 +01:00
parent b9a15679b3
commit 60596c32d1
2 changed files with 35 additions and 13 deletions

View File

@@ -443,6 +443,30 @@ func TestNewFromMediaDescription(t *testing.T) {
PacketizationMode: 1,
},
},
{
"h264 empty sprop-parameter-sets",
&psdp.MediaDescription{
MediaName: psdp.MediaName{
Media: "video",
Protos: []string{"RTP", "AVP"},
Formats: []string{"96"},
},
Attributes: []psdp.Attribute{
{
Key: "rtpmap",
Value: "96 H264/90000",
},
{
Key: "fmtp",
Value: "96 packetization-mode=1; sprop-parameter-sets=",
},
},
},
&H264{
PayloadTyp: 96,
PacketizationMode: 1,
},
},
{
"video h265",
&psdp.MediaDescription{

View File

@@ -117,23 +117,21 @@ func (t *H264) unmarshal(payloadType uint8, clock string, codec string, rtpmap s
switch tmp[0] {
case "sprop-parameter-sets":
tmp := strings.Split(tmp[1], ",")
if len(tmp) < 2 {
return fmt.Errorf("invalid sprop-parameter-sets (%v)", fmtp)
}
if len(tmp) >= 2 {
sps, err := base64.StdEncoding.DecodeString(tmp[0])
if err != nil {
return fmt.Errorf("invalid sprop-parameter-sets (%v)", fmtp)
}
sps, err := base64.StdEncoding.DecodeString(tmp[0])
if err != nil {
return fmt.Errorf("invalid sprop-parameter-sets (%v)", fmtp)
}
pps, err := base64.StdEncoding.DecodeString(tmp[1])
if err != nil {
return fmt.Errorf("invalid sprop-parameter-sets (%v)", fmtp)
}
pps, err := base64.StdEncoding.DecodeString(tmp[1])
if err != nil {
return fmt.Errorf("invalid sprop-parameter-sets (%v)", fmtp)
t.SPS = sps
t.PPS = pps
}
t.SPS = sps
t.PPS = pps
case "packetization-mode":
tmp, err := strconv.ParseInt(tmp[1], 10, 64)
if err != nil {