mirror of
https://github.com/aler9/gortsplib
synced 2025-10-05 07:06:58 +08:00
format: fix compatibility with some TP-Link cameras (#174)
https://github.com/aler9/rtsp-simple-server/issues/1267
This commit is contained in:
@@ -54,6 +54,16 @@ type Format interface {
|
|||||||
|
|
||||||
// Unmarshal decodes a format from a media description.
|
// Unmarshal decodes a format from a media description.
|
||||||
func Unmarshal(md *psdp.MediaDescription, payloadTypeStr string) (Format, error) {
|
func Unmarshal(md *psdp.MediaDescription, payloadTypeStr string) (Format, error) {
|
||||||
|
if payloadTypeStr == "smart/1/90000" {
|
||||||
|
attr, ok := md.Attribute("rtpmap")
|
||||||
|
if ok {
|
||||||
|
i := strings.Index(attr, " TP-LINK/90000")
|
||||||
|
if i >= 0 {
|
||||||
|
payloadTypeStr = attr[:i]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
tmp, err := strconv.ParseInt(payloadTypeStr, 10, 8)
|
tmp, err := strconv.ParseInt(payloadTypeStr, 10, 8)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@@ -613,7 +613,7 @@ func TestNewFromMediaDescription(t *testing.T) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"generic invalid rtpmap",
|
"application invalid rtpmap",
|
||||||
&psdp.MediaDescription{
|
&psdp.MediaDescription{
|
||||||
MediaName: psdp.MediaName{
|
MediaName: psdp.MediaName{
|
||||||
Media: "application",
|
Media: "application",
|
||||||
@@ -633,7 +633,7 @@ func TestNewFromMediaDescription(t *testing.T) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"generic invalid rtpmap 2",
|
"application invalid rtpmap 2",
|
||||||
&psdp.MediaDescription{
|
&psdp.MediaDescription{
|
||||||
MediaName: psdp.MediaName{
|
MediaName: psdp.MediaName{
|
||||||
Media: "application",
|
Media: "application",
|
||||||
@@ -652,6 +652,27 @@ func TestNewFromMediaDescription(t *testing.T) {
|
|||||||
RTPMap: "custom/aaa",
|
RTPMap: "custom/aaa",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"application tp-link",
|
||||||
|
&psdp.MediaDescription{
|
||||||
|
MediaName: psdp.MediaName{
|
||||||
|
Media: "application",
|
||||||
|
Protos: []string{"RTP", "AVP"},
|
||||||
|
Formats: []string{"smart/1/90000"},
|
||||||
|
},
|
||||||
|
Attributes: []psdp.Attribute{
|
||||||
|
{
|
||||||
|
Key: "rtpmap",
|
||||||
|
Value: "95 TP-LINK/90000",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
&Generic{
|
||||||
|
PayloadTyp: 95,
|
||||||
|
RTPMap: "TP-LINK/90000",
|
||||||
|
ClockRat: 90000,
|
||||||
|
},
|
||||||
|
},
|
||||||
} {
|
} {
|
||||||
t.Run(ca.name, func(t *testing.T) {
|
t.Run(ca.name, func(t *testing.T) {
|
||||||
format, err := Unmarshal(ca.md, ca.md.MediaName.Formats[0])
|
format, err := Unmarshal(ca.md, ca.md.MediaName.Formats[0])
|
||||||
|
Reference in New Issue
Block a user