mirror of https://github.com/commaai/teleoprtc.git
147 lines
4.4 KiB
Python
Executable File
147 lines
4.4 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
from teleoprtc.info import parse_info_from_offer
|
|
|
|
|
|
def lf2crlf(x):
|
|
return x.replace("\n", "\r\n")
|
|
|
|
|
|
class TestStream:
|
|
def test_double_video_tracks(self):
|
|
sdp = """v=0
|
|
o=- 3910210993 3910210993 IN IP4 0.0.0.0
|
|
s=-
|
|
t=0 0
|
|
a=group:BUNDLE 0 1
|
|
a=msid-semantic:WMS *
|
|
m=video 9 UDP/TLS/RTP/SAVPF 97 98 99 100 101 102
|
|
c=IN IP4 0.0.0.0
|
|
a=recvonly
|
|
a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:mid
|
|
a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
|
|
a=mid:0
|
|
a=msid:e123f852-010c-4b7b-8761-71b72fbfd013 2b75cb0e-6b34-48d6-8bf9-21b809f2e08e
|
|
a=rtcp:9 IN IP4 0.0.0.0
|
|
a=rtcp-mux
|
|
a=ssrc-group:FID 1048118556 4149054509
|
|
a=ssrc:1048118556 cname:61992fce-bab5-42a0-ab8c-7112adfb1857
|
|
a=ssrc:4149054509 cname:61992fce-bab5-42a0-ab8c-7112adfb1857
|
|
a=rtpmap:97 VP8/90000
|
|
a=rtcp-fb:97 nack
|
|
a=rtcp-fb:97 nack pli
|
|
a=rtcp-fb:97 goog-remb
|
|
a=rtpmap:98 rtx/90000
|
|
a=fmtp:98 apt=97
|
|
a=rtpmap:99 H264/90000
|
|
a=rtcp-fb:99 nack
|
|
a=rtcp-fb:99 nack pli
|
|
a=rtcp-fb:99 goog-remb
|
|
a=fmtp:99 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f
|
|
a=rtpmap:100 rtx/90000
|
|
a=fmtp:100 apt=99
|
|
a=rtpmap:101 H264/90000
|
|
a=rtcp-fb:101 nack
|
|
a=rtcp-fb:101 nack pli
|
|
a=rtcp-fb:101 goog-remb
|
|
a=fmtp:101 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f
|
|
a=rtpmap:102 rtx/90000
|
|
a=fmtp:102 apt=101
|
|
a=ice-ufrag:jxQW
|
|
a=ice-pwd:KpJ0tfaY2RxnIYpTHqPSSv
|
|
a=fingerprint:sha-256 70:3A:2D:37:3C:52:96:0E:10:F6:4D:7A:EB:18:38:1B:FD:CA:A5:90:D7:6C:DA:A9:39:76:C9:2F:FB:FF:56:0C
|
|
a=setup:actpass
|
|
m=video 9 UDP/TLS/RTP/SAVPF 97 98 99 100 101 102
|
|
c=IN IP4 0.0.0.0
|
|
a=recvonly
|
|
a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:mid
|
|
a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
|
|
a=mid:1
|
|
a=msid:e123f852-010c-4b7b-8761-71b72fbfd013 311db759-8d51-479c-a5b4-5c8d055c43ec
|
|
a=rtcp:9 IN IP4 0.0.0.0
|
|
a=rtcp-mux
|
|
a=ssrc-group:FID 4096183284 2713379498
|
|
a=ssrc:4096183284 cname:61992fce-bab5-42a0-ab8c-7112adfb1857
|
|
a=ssrc:2713379498 cname:61992fce-bab5-42a0-ab8c-7112adfb1857
|
|
a=rtpmap:97 VP8/90000
|
|
a=rtcp-fb:97 nack
|
|
a=rtcp-fb:97 nack pli
|
|
a=rtcp-fb:97 goog-remb
|
|
a=rtpmap:98 rtx/90000
|
|
a=fmtp:98 apt=97
|
|
a=rtpmap:99 H264/90000
|
|
a=rtcp-fb:99 nack
|
|
a=rtcp-fb:99 nack pli
|
|
a=rtcp-fb:99 goog-remb
|
|
a=fmtp:99 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f
|
|
a=rtpmap:100 rtx/90000
|
|
a=fmtp:100 apt=99
|
|
a=rtpmap:101 H264/90000
|
|
a=rtcp-fb:101 nack
|
|
a=rtcp-fb:101 nack pli
|
|
a=rtcp-fb:101 goog-remb
|
|
a=fmtp:101 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f
|
|
a=rtpmap:102 rtx/90000
|
|
a=fmtp:102 apt=101
|
|
a=ice-ufrag:1234
|
|
a=ice-pwd:1234
|
|
a=fingerprint:sha-256 70:3A:2D:37:3C:52:96:0E:10:F6:4D:7A:EB:18:38:1B:FD:CA:A5:90:D7:6C:DA:A9:39:76:C9:2F:FB:FF:56:0C
|
|
a=setup:actpass"""
|
|
info = parse_info_from_offer(lf2crlf(sdp))
|
|
assert info.n_expected_camera_tracks == 2
|
|
assert not info.expected_audio_track
|
|
assert not info.incoming_audio_track
|
|
assert not info.incoming_datachannel
|
|
|
|
def test_recvonly_audio(self):
|
|
sdp = """v=0
|
|
o=- 3910210904 3910210904 IN IP4 0.0.0.0
|
|
s=-
|
|
t=0 0
|
|
a=group:BUNDLE 0
|
|
a=msid-semantic:WMS *
|
|
m=audio 9 UDP/TLS/RTP/SAVPF 96 0 8
|
|
c=IN IP4 0.0.0.0
|
|
a=recvonly
|
|
a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:mid
|
|
a=extmap:2 urn:ietf:params:rtp-hdrext:ssrc-audio-level
|
|
a=mid:0
|
|
a=msid:eb1d3f1a-569a-465f-b419-319477bfded6 e44eecb2-1a04-4547-97d8-481389f50d5b
|
|
a=rtcp:9 IN IP4 0.0.0.0
|
|
a=rtcp-mux
|
|
a=ssrc:1233332626 cname:ca4dede8-4994-4a6d-9ae3-923b28177ca5
|
|
a=rtpmap:96 opus/48000/2
|
|
a=rtpmap:0 PCMU/8000
|
|
a=rtpmap:8 PCMA/8000
|
|
a=ice-ufrag:1234
|
|
a=ice-pwd:1234
|
|
a=fingerprint:sha-256 40:4B:14:CF:70:B8:67:E1:B1:FF:7E:F9:22:6E:60:7D:73:B5:1E:38:4B:10:20:9C:CD:1C:47:02:52:ED:45:25
|
|
a=setup:actpass"""
|
|
info = parse_info_from_offer(lf2crlf(sdp))
|
|
assert info.n_expected_camera_tracks == 0
|
|
assert info.expected_audio_track
|
|
assert not info.incoming_audio_track
|
|
assert not info.incoming_datachannel
|
|
|
|
def test_incoming_datachanel(self):
|
|
sdp = """v=0
|
|
o=- 3910211092 3910211092 IN IP4 0.0.0.0
|
|
s=-
|
|
t=0 0
|
|
a=group:BUNDLE 0
|
|
a=msid-semantic:WMS *
|
|
m=application 9 DTLS/SCTP 5000
|
|
c=IN IP4 0.0.0.0
|
|
a=mid:0
|
|
a=sctpmap:5000 webrtc-datachannel 65535
|
|
a=max-message-size:65536
|
|
a=ice-ufrag:1234
|
|
a=ice-pwd:1234
|
|
a=fingerprint:sha-256 9B:C0:F3:35:8E:05:A1:15:DB:F8:39:0E:B0:E0:0C:EB:82:E4:B9:26:18:A6:43:2D:B9:9A:23:96:0A:59:B6:58
|
|
a=setup:actpass"""
|
|
info = parse_info_from_offer(lf2crlf(sdp))
|
|
assert info.n_expected_camera_tracks == 0
|
|
assert not info.expected_audio_track
|
|
assert not info.incoming_audio_track
|
|
assert info.incoming_datachannel
|