mirror of
https://github.com/aler9/gortsplib
synced 2025-10-05 15:16:51 +08:00
client: allow to publish tracks with pre-existing control attribute (#48)
This commit is contained in:
154
track_test.go
154
track_test.go
@@ -9,83 +9,6 @@ import (
|
||||
"github.com/aler9/gortsplib/pkg/base"
|
||||
)
|
||||
|
||||
func TestTrackClockRate(t *testing.T) {
|
||||
for _, ca := range []struct {
|
||||
name string
|
||||
sdp []byte
|
||||
clockRate int
|
||||
}{
|
||||
{
|
||||
"empty encoding parameters",
|
||||
[]byte("v=0\r\n" +
|
||||
"o=- 38990265062388 38990265062388 IN IP4 192.168.1.142\r\n" +
|
||||
"s=RTSP Session\r\n" +
|
||||
"c=IN IP4 192.168.1.142\r\n" +
|
||||
"t=0 0\r\n" +
|
||||
"a=control:*\r\n" +
|
||||
"a=range:npt=0-\r\n" +
|
||||
"m=video 0 RTP/AVP 96\r\n" +
|
||||
"a=rtpmap:96 H264/90000 \r\n" +
|
||||
"a=range:npt=0-\r\n" +
|
||||
"a=framerate:0S\r\n" +
|
||||
"a=fmtp:96 profile-level-id=64000c; packetization-mode=1; sprop-parameter-sets=Z2QADKw7ULBLQgAAAwACAAADAD0I,aO48gA==\r\n" +
|
||||
"a=framerate:25\r\n" +
|
||||
"a=control:trackID=3\r\n"),
|
||||
90000,
|
||||
},
|
||||
{
|
||||
"static payload type 1",
|
||||
[]byte("v=0\r\n" +
|
||||
"o=- 38990265062388 38990265062388 IN IP4 192.168.1.142\r\n" +
|
||||
"s=RTSP Session\r\n" +
|
||||
"c=IN IP4 192.168.1.142\r\n" +
|
||||
"t=0 0\r\n" +
|
||||
"a=control:*\r\n" +
|
||||
"a=range:npt=0-\r\n" +
|
||||
"m=audio 0 RTP/AVP 8\r\n" +
|
||||
"a=control:trackID=4"),
|
||||
8000,
|
||||
},
|
||||
{
|
||||
"static payload type 2",
|
||||
[]byte("v=0\r\n" +
|
||||
"o=jdoe 2890844526 2890842807 IN IP4 10.47.16.5\r\n" +
|
||||
"s=SDP Seminar\r\n" +
|
||||
"i=A Seminar on the session description protocol\r\n" +
|
||||
"u=http://www.example.com/seminars/sdp.pdf\r\n" +
|
||||
"e=j.doe@example.com (Jane Doe)\r\n" +
|
||||
"p=+1 617 555-6011\r\n" +
|
||||
"c=IN IP4 224.2.17.12/127\r\n" +
|
||||
"b=X-YZ:128\r\n" +
|
||||
"b=AS:12345\r\n" +
|
||||
"t=2873397496 2873404696\r\n" +
|
||||
"t=3034423619 3042462419\r\n" +
|
||||
"r=604800 3600 0 90000\r\n" +
|
||||
"z=2882844526 -3600 2898848070 0\r\n" +
|
||||
"k=prompt\r\n" +
|
||||
"a=candidate:0 1 UDP 2113667327 203.0.113.1 54400 typ host\r\n" +
|
||||
"a=recvonly\r\n" +
|
||||
"m=audio 49170 RTP/AVP 0\r\n" +
|
||||
"i=Vivamus a posuere nisl\r\n" +
|
||||
"c=IN IP4 203.0.113.1\r\n" +
|
||||
"b=X-YZ:128\r\n" +
|
||||
"k=prompt\r\n" +
|
||||
"a=sendrecv\r\n"),
|
||||
8000,
|
||||
},
|
||||
} {
|
||||
t.Run(ca.name, func(t *testing.T) {
|
||||
tracks, err := ReadTracks(ca.sdp, nil)
|
||||
require.NoError(t, err)
|
||||
|
||||
clockRate, err := tracks[0].ClockRate()
|
||||
require.NoError(t, err)
|
||||
|
||||
require.Equal(t, clockRate, ca.clockRate)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestTrackURL(t *testing.T) {
|
||||
for _, ca := range []struct {
|
||||
name string
|
||||
@@ -194,6 +117,83 @@ func TestTrackURL(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestTrackClockRate(t *testing.T) {
|
||||
for _, ca := range []struct {
|
||||
name string
|
||||
sdp []byte
|
||||
clockRate int
|
||||
}{
|
||||
{
|
||||
"empty encoding parameters",
|
||||
[]byte("v=0\r\n" +
|
||||
"o=- 38990265062388 38990265062388 IN IP4 192.168.1.142\r\n" +
|
||||
"s=RTSP Session\r\n" +
|
||||
"c=IN IP4 192.168.1.142\r\n" +
|
||||
"t=0 0\r\n" +
|
||||
"a=control:*\r\n" +
|
||||
"a=range:npt=0-\r\n" +
|
||||
"m=video 0 RTP/AVP 96\r\n" +
|
||||
"a=rtpmap:96 H264/90000 \r\n" +
|
||||
"a=range:npt=0-\r\n" +
|
||||
"a=framerate:0S\r\n" +
|
||||
"a=fmtp:96 profile-level-id=64000c; packetization-mode=1; sprop-parameter-sets=Z2QADKw7ULBLQgAAAwACAAADAD0I,aO48gA==\r\n" +
|
||||
"a=framerate:25\r\n" +
|
||||
"a=control:trackID=3\r\n"),
|
||||
90000,
|
||||
},
|
||||
{
|
||||
"static payload type 1",
|
||||
[]byte("v=0\r\n" +
|
||||
"o=- 38990265062388 38990265062388 IN IP4 192.168.1.142\r\n" +
|
||||
"s=RTSP Session\r\n" +
|
||||
"c=IN IP4 192.168.1.142\r\n" +
|
||||
"t=0 0\r\n" +
|
||||
"a=control:*\r\n" +
|
||||
"a=range:npt=0-\r\n" +
|
||||
"m=audio 0 RTP/AVP 8\r\n" +
|
||||
"a=control:trackID=4"),
|
||||
8000,
|
||||
},
|
||||
{
|
||||
"static payload type 2",
|
||||
[]byte("v=0\r\n" +
|
||||
"o=jdoe 2890844526 2890842807 IN IP4 10.47.16.5\r\n" +
|
||||
"s=SDP Seminar\r\n" +
|
||||
"i=A Seminar on the session description protocol\r\n" +
|
||||
"u=http://www.example.com/seminars/sdp.pdf\r\n" +
|
||||
"e=j.doe@example.com (Jane Doe)\r\n" +
|
||||
"p=+1 617 555-6011\r\n" +
|
||||
"c=IN IP4 224.2.17.12/127\r\n" +
|
||||
"b=X-YZ:128\r\n" +
|
||||
"b=AS:12345\r\n" +
|
||||
"t=2873397496 2873404696\r\n" +
|
||||
"t=3034423619 3042462419\r\n" +
|
||||
"r=604800 3600 0 90000\r\n" +
|
||||
"z=2882844526 -3600 2898848070 0\r\n" +
|
||||
"k=prompt\r\n" +
|
||||
"a=candidate:0 1 UDP 2113667327 203.0.113.1 54400 typ host\r\n" +
|
||||
"a=recvonly\r\n" +
|
||||
"m=audio 49170 RTP/AVP 0\r\n" +
|
||||
"i=Vivamus a posuere nisl\r\n" +
|
||||
"c=IN IP4 203.0.113.1\r\n" +
|
||||
"b=X-YZ:128\r\n" +
|
||||
"k=prompt\r\n" +
|
||||
"a=sendrecv\r\n"),
|
||||
8000,
|
||||
},
|
||||
} {
|
||||
t.Run(ca.name, func(t *testing.T) {
|
||||
tracks, err := ReadTracks(ca.sdp, nil)
|
||||
require.NoError(t, err)
|
||||
|
||||
clockRate, err := tracks[0].ClockRate()
|
||||
require.NoError(t, err)
|
||||
|
||||
require.Equal(t, clockRate, ca.clockRate)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestTrackH264New(t *testing.T) {
|
||||
sps := []byte{
|
||||
0x67, 0x64, 0x00, 0x0c, 0xac, 0x3b, 0x50, 0xb0,
|
||||
|
Reference in New Issue
Block a user