Cameron Gutman
04dc3c52f6
Use safe string functions in C11
2020-11-30 21:45:57 -06:00
Cameron Gutman
4b4162c1a1
Fix redefinition warning for errno.h constants on Windows
2020-11-30 20:44:46 -06:00
Cameron Gutman
5f9f7ce407
Code cleanup: use stdbool.h
2020-11-30 20:38:13 -06:00
Cameron Gutman
e9ee868da4
Don't enable QoS for IPv6/NAT64 either
2020-10-31 17:08:29 -05:00
Cameron Gutman
dbf81dcb63
Don't enable QoS for remote IPv4 streams
...
Some broken routers/CPE will drop all QoS tagged packets
2020-10-28 20:35:45 -05:00
Cameron Gutman
edf08d0a60
Merge pull request #51 from d3m3vilurr/fix-vita-compile
...
vita: Restore select call on the VITA system
2020-10-22 21:39:53 -05:00
Cameron Gutman
f15582a090
Update pollSockets() fallback for Vita compatibility
2020-10-22 17:20:07 -05:00
Cameron Gutman
4f42188c1f
Test for UDP MTU issues
2020-10-10 13:03:05 -05:00
Cameron Gutman
327917683a
Fix platform cleanup on resolveHostName() failure
2020-10-10 12:51:31 -05:00
Cameron Gutman
dbedf938d4
Don't require linking to wlanapi.dll
...
This is not always available on Windows Server
2020-09-08 18:26:36 -07:00
Cameron Gutman
128c1503f2
Don't perform the connection test in resolveHostName() for single addresses unless required
2020-09-06 17:11:14 -07:00
Cameron Gutman
6ca0b93809
Ignore ICMP Port Unreachable messages on our UDP sockets
...
These messages can falsely indicate failure in cases where the UDP socket
for audio or video hasn't opened yet when we start to send our PING packets.
It is also problematic when sending STUN requests to multiple IP addresses.
If one returns an ICMP Port Unreachable, it can cause us to fail the entire set
of requests even when other IP addresses do respond.
2020-09-06 14:04:57 -07:00
Cameron Gutman
7b024c967e
Try TCP 47989 and TCP 48010 as fallbacks if 47984 doesn't work
2020-09-06 11:55:25 -07:00
Cameron Gutman
9e4651e460
Fix implicit function declaration warnings
2020-08-29 21:13:54 -07:00
Cameron Gutman
38fe65f8bd
Remove unused variable
2020-08-29 21:09:35 -07:00
Cameron Gutman
1b022a0d05
Terminate the connection if we can't receive a key frame in 10 seconds
2020-08-29 21:00:05 -07:00
Cameron Gutman
a89fcb8a46
Always use the test port
2020-08-29 19:14:53 -07:00
Cameron Gutman
9064d4931f
Add createSocket() helper to reduce code duplication
2020-08-29 18:54:11 -07:00
Cameron Gutman
feaca5b5b0
Use resolveHostName() instead of getaddrinfo() and connectTcpSocket() directly
2020-08-29 18:27:02 -07:00
Cameron Gutman
e74fe2b016
Fix socket errors being clobbered by closeSocket()
2020-08-28 18:48:15 -07:00
Cameron Gutman
5ddd53e17f
Enable media streaming mode for 802.11 WLAN interfaces on Windows
2020-08-11 22:12:58 -07:00
Cameron Gutman
f2c1d03d8e
Don't bother doing any connection testing if no ports were specified
2020-08-09 12:08:16 -07:00
Cameron Gutman
b59007cdea
Fix server-side log spam caused by sending unused command 0x0201
2020-08-09 11:46:49 -07:00
Cameron Gutman
ae00c09cb6
Restore the 500 ms ping logic to prevent warnings in the server-side logs
2020-08-08 23:16:55 -07:00
Cameron Gutman
2fdcfb9429
Accept IPv6 addresses for network testing to support NAT64
2020-08-06 21:59:17 -07:00
Cameron Gutman
453c722fa8
Add LiGetPortFlagsFromTerminationErrorCode()
2020-08-06 21:43:18 -07:00
Cameron Gutman
6010367637
Only allow input packets to be queued between start and stop
2020-08-06 19:12:29 -07:00
Cameron Gutman
f6927475cf
Enable poll() in ENet for Linux/BSD
2020-07-27 00:03:22 -07:00
Cameron Gutman
6351749039
Fix TCP connection tests on Linux and BSD
2020-07-26 20:56:39 -07:00
Cameron Gutman
117a7c637f
Switch to poll() to be safe against stack corruption from exceeding FD_SETSIZE
...
Fortunately, the fd_set definition is not prone to stack corruption on Windows,
because FD_SETSIZE is the maximum number of sockets in a fd_set, not
the maximum value socket file descriptor that can be stored in a fd_set.
https://beesbuzz.biz/code/5739-The-problem-with-select-vs-poll
2020-07-26 20:27:58 -07:00
Cameron Gutman
84f2421fbf
Add support for client-side connectivity testing
2020-07-19 14:39:42 -07:00
Cameron Gutman
5c9935e11b
Temporarily comment out validation of reserved field
...
FEC doesn't recover this field correctly with GFE 3.20.4.
2020-07-01 11:50:23 -05:00
Cameron Gutman
407d57a50a
Update ENet submodule to fix QoS-related connection issues
2020-06-12 21:59:16 -07:00
Cameron Gutman
bea625a13d
Work around rounding error in GFE's mouse position scaling
2020-05-26 18:19:53 -07:00
Cameron Gutman
0df24c76c0
Fix incorrect behavior of modifier keys on the right side of the keyboard
2020-05-26 17:33:57 -07:00
Cameron Gutman
f8ffb30e1f
Don't send no-op mouse move and scroll events
2020-05-26 17:13:22 -07:00
Cameron Gutman
7b56ab755d
Add batching for mouse position packets
2020-05-20 18:56:30 -07:00
Cameron Gutman
b44cad6598
Fix freeing uninitialized pointer on allocation failure
2020-05-20 18:38:58 -07:00
Cameron Gutman
c8faf3539b
Replace version check with note for LiSendMousePosition()
2020-05-03 15:56:39 -07:00
Cameron Gutman
495b269a10
Disable FEC on Gen 4 and earlier and assert that FLAG_EXTENSION is present
2020-05-03 15:51:49 -07:00
Cameron Gutman
f911d974c9
Enable FEC validation mode on debug builds
2020-05-02 16:56:13 -07:00
Cameron Gutman
719f690e56
Add an assert to catch incorrectly sized video packets
2020-05-02 16:49:51 -07:00
Cameron Gutman
5ba94e0282
Add FEC validation mode to diagnose FEC recovery failures
2020-05-02 14:24:24 -07:00
Cameron Gutman
f596e80575
Improve logging of video/audio delay and errors
2020-05-01 20:23:44 -07:00
Cameron Gutman
b46e06fcf1
Terminate the connection if video isn't received for 10 seconds
2020-05-01 19:25:24 -07:00
Cameron Gutman
413ea9bc8e
Minor RTSP code cleanup
2020-05-01 18:32:26 -07:00
Cameron Gutman
9ffdc79b6f
Add log messages to troubleshoot problems with missing video/audio
2020-04-29 20:17:55 -07:00
Cameron Gutman
fcabfc37ad
Dynamically allocate session ID string
2020-04-29 20:12:19 -07:00
Cameron Gutman
7d0458a16b
Dynamically allocate the RTSP response buffer
2020-04-29 19:58:50 -07:00
Cameron Gutman
247b1fe0e3
Provide reference dimensions for mouse position data
2020-04-11 20:51:17 -07:00
Cameron Gutman
bbbf4336cc
Add additional documentation for LiSendMousePositionEvent()
2020-04-11 15:59:12 -07:00
Cameron Gutman
ef7de27727
Add absolute mouse motion support
2020-04-11 15:40:50 -07:00
Cameron Gutman
f0c3b57d11
Enable QoS for ENet traffic on Windows
2020-04-09 17:42:49 -07:00
Cameron Gutman
2a02569c5c
Avoid 10 second delay on graceful termination with GFE 3.20.3.63
2020-04-09 17:28:34 -07:00
Cameron Gutman
0cda408d3c
Warn when streaming above 4K with H.264 or 8K with HEVC
2020-04-04 12:36:09 -07:00
Cameron Gutman
4f9d45fbb5
Round down odd height values to avoid NVENC initialization failure
2020-04-04 11:51:55 -07:00
Cameron Gutman
86751d9162
Move ConnectionListener initialization prior to possible Limelog() usage
2020-04-04 11:51:20 -07:00
Cameron Gutman
c2471157c0
Use EF instead of CS7 for DSCP on ENet traffic
2020-04-03 17:01:45 -07:00
Cameron Gutman
85de16b41b
Add 7.1 surround sound support
2020-04-03 00:11:41 -07:00
Cameron Gutman
d9d2668473
Fix audio problems caused by stale HighQualitySurroundSupported and HighQualitySurroundEnabled values
2020-04-02 18:44:13 -07:00
Cameron Gutman
99f22fa7e9
Undeprecate AUDIO_CONFIGURATION values and add a new macro for converting AUDIO_CONFIGURATION into launch/resume parameters
2020-04-02 18:41:32 -07:00
Cameron Gutman
607aaca93f
Replace AUDIO_CONFIGURATION constants with MAKE_AUDIO_CONFIGURATION() macro
2020-03-31 21:33:34 -07:00
Cameron Gutman
fb60ae6a4d
Parse Opus parameters from RTSP DESCRIBE response
2020-03-31 20:52:38 -07:00
Cameron Gutman
f489c9d725
Enable QoS marking on macOS and Linux
...
Using SO_NET_SERVICE_TYPE on macOS seems to make a noticeable difference
to packet latency and loss rate for some users.
2020-03-29 15:45:36 -07:00
Cameron Gutman
c3ab74b8af
Reduce ENet retransmission delay by sleeping for shorter periods between polls
2020-03-29 14:35:24 -07:00
Cameron Gutman
c1b8aa266f
Use 10 ms audio packets on low bitrate streams to balance latency and bandwidth
2020-03-18 20:03:56 -07:00
Cameron Gutman
67390dfb94
Remove deprecated listener callbacks
2020-02-24 23:57:06 -08:00
Cameron Gutman
2fc278da00
Change errorCode to int for consistency between 32-bit and 64-bit platforms
...
Unfortunately this requires updating all client code that uses these callbacks.
2020-02-24 23:01:22 -08:00
Cameron Gutman
cfeb0ffd90
Add MODIFIER_META constant
2020-01-15 17:48:36 -08:00
Cameron Gutman
3ccacdd3be
Merge pull request #48 from loki-47-6F-64/master
...
Correct payload-length when parsing RTSP Messages
2020-01-11 11:50:55 -08:00
Cameron Gutman
e60a7ef75f
Add color space and color range options
2019-12-14 14:32:47 -08:00
Cameron Gutman
b0213d06a7
Always use DSCP marking for our AV traffic
2019-12-12 18:43:57 -08:00
Cameron Gutman
3dd9a9f1b1
Use RAND_bytes() instead of rand() for STUN transaction IDs
2019-12-08 14:49:28 -08:00
Cameron Gutman
f5ae5df5d0
Fix logic error in low bitrate audio duration selection
2019-12-01 19:22:16 -08:00
Cameron Gutman
e938d84cdb
Use TCP_NOOPT to restrict MSS on BSD-based OSes
2019-12-01 15:22:18 -08:00
Cameron Gutman
ceab64c46b
Use IP_PMTUDISC_DONT to clamp MSS on Windows
2019-12-01 15:00:21 -08:00
Cameron Gutman
e5b6a2b7a9
Bump RTSP_MAX_RESP_SIZE to 48 KB
2019-12-01 13:59:09 -08:00
Cameron Gutman
c1a26618d4
Increase audio packet duration for low bandwidth connections
2019-11-30 21:59:34 -06:00
Cameron Gutman
6b42954b47
Add LiGetPendingAudioDuration() function
2019-11-30 21:31:50 -06:00
Cameron Gutman
52f489bc46
Fix RTSP handshake errors on networks with broken PMTUD
2019-11-30 21:19:56 -06:00
Cameron Gutman
f4dad9ae8b
Add presentation timestamp to video frame metadata
2019-11-10 18:07:11 -08:00
Cameron Gutman
eceb7d3a2b
Merge pull request #46 from d3m3vilurr/vita-nonblock-socket
...
vita: Enable nonblock TCP socket
2019-11-03 21:22:20 -08:00
Cameron Gutman
49fd1bed3f
Return correct error code when RTSP receive times out
2019-11-02 21:42:08 -07:00
Cameron Gutman
25528671d2
Fix error value on control stream and RTSP handshake failure
2019-11-02 21:28:05 -07:00
Cameron Gutman
dca2205ac8
Fix assert failure on control stream establishment failure
2019-11-02 21:27:35 -07:00
Cameron Gutman
197594f38c
Add platform helper function to set socket non-blocking mode
2019-11-02 19:16:46 -07:00
Cameron Gutman
9bd301897a
Remove unnecessary field in QDU struct
2019-10-21 17:03:01 -07:00
Cameron Gutman
f988a154a3
Fix Linux build
2019-10-12 19:42:49 -07:00
Cameron Gutman
ea135be05a
Only test TCP ports if the hostname resolves to multiple addresses
2019-10-12 19:09:28 -07:00
Cameron Gutman
93ce13e43f
Update enet submodule to 93b080b053
2019-10-12 15:14:30 -07:00
Cameron Gutman
0cc66748ea
Merge pull request #45 from d3m3vilurr/vita-newlib
...
vita: Apply newlib changes
2019-10-05 10:51:26 -07:00
Cameron Gutman
7de68207f0
Fix control stream connection error on multi-homed hosts
2019-09-14 14:06:34 -07:00
Cameron Gutman
438b4f87d3
Rewrite STUN code to avoid requiring TCP and use multiple servers in parallel
2019-08-13 17:51:11 -07:00
Cameron Gutman
4daf496bb4
Merge pull request #42 from d3m3vilurr/vita-getaddrinfo
...
vita: Apply getaddrinfo
2019-08-13 17:47:03 -07:00
Cameron Gutman
6750cde2ab
Test STUN server via TCP to allow fallback if it's unreachable
2019-08-07 23:13:27 -07:00
Cameron Gutman
a9780361a3
Fix high-quality surround sound breaking audio when streaming over the Internet or IPv6
2019-08-04 15:05:40 -07:00
Cameron Gutman
c322ed9437
Terminate with the given error code if the disconnect timeout expires instead of -1
2019-07-23 23:41:48 -04:00
Cameron Gutman
25dfbcfd41
Implement isPrivateNetworkAddress() for IPv6
2019-07-15 00:16:17 -07:00
Cameron Gutman
6245934462
Fix streaming from Gen 3 servers
2019-07-05 21:01:14 -07:00
Cameron Gutman
801aaf43d6
Fix video on GFE 3.19
2019-05-27 01:27:50 -07:00