mirror of
https://github.com/firestar5683/StarPilot.git
synced 2026-11-09 22:13:43 +08:00
22a8575199
Keep official openpilot ancestry and dependency licenses. Store resources directly in Git, remove LFS setup requirements, and leave the downloadable big model outside the source tree.
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
|