diff --git a/track.go b/track.go index dc4b210e..171b4298 100644 --- a/track.go +++ b/track.go @@ -76,8 +76,8 @@ func (t *Track) URL(baseURL *base.URL) (*base.URL, error) { // ClockRate returns the clock rate of the track. func (t *Track) ClockRate() (int, error) { - if len(t.Media.MediaName.Formats) != 1 { - return 0, fmt.Errorf("invalid format (%v)", t.Media.MediaName.Formats) + if len(t.Media.MediaName.Formats) < 1 { + return 0, fmt.Errorf("no formats provided") } // get clock rate from payload type diff --git a/track_test.go b/track_test.go index 223b9a4c..a47cd9a4 100644 --- a/track_test.go +++ b/track_test.go @@ -180,6 +180,27 @@ func TestTrackClockRate(t *testing.T) { "a=sendrecv\r\n"), 8000, }, + { + "multiple formats", + []byte("v=0\r\n" + + "o=RTSP 1853326073 627916868 IN IP4 0.0.0.0\r\n" + + "s=RTSP server\r\n" + + "c=IN IP4 0.0.0.0\r\n" + + "t=0 0\r\n" + + "a=control:*\r\n" + + "a=etag:1234567890\r\n" + + "a=range:npt=0-\r\n" + + "a=control:*\r\n" + + "m=video 0 RTP/AVP 98 96\r\n" + + "a=control:trackID=1\r\n" + + "b=AS:0\r\n" + + "a=rtpmap:98 H265/90000\r\n" + + "a=fmtp:98 profile-id=1; sprop-vps=QAEMAf//AWAAAAMAAAMAAAMAAAMAlqwJ; sprop-sps=QgEBAWAAAAMAAAMAAAMAAAMAlqADwIAQ5Za5JMmuWcBSSgAAB9AAAHUwgkA=; sprop-pps=RAHgdrAwxmQ=\r\n" + + "m=application 0 RTP/AVP 107\r\n" + + "a=control:trackID=3\r\n" + + "a=rtpmap:107 vnd.onvif.metadata/90000"), + 90000, + }, } { t.Run(ca.name, func(t *testing.T) { tracks, err := ReadTracks(ca.sdp)