Commit Graph
100 Commits
Author SHA1 Message Date
Cameron Gutman daee5db7bc Use SleepEx() instead of WaitForSingleObjectEx() to implement PltSleepMs()
This was legacy cruft from back when Sleep() was forbidden in Metro apps in Win8.0.
2021-05-16 11:41:38 -05:00
Cameron Gutman c057075eac Set minRequiredFecPackets to better handle lossy links at low bitrates 2021-05-16 09:27:50 -05:00
Cameron Gutman ed9301f3f8 Join the input thread without interrupting first
Otherwise we'll kill it before it finishes draining
2021-05-15 22:56:44 -05:00
Cameron Gutman 431e188b07 Allow the input queue to drain before terminating the thread
This ensures any final input messages (like key ups) make it to the host
2021-05-15 22:01:50 -05:00
Cameron Gutman 71c9ff0d91 Elide the wait if the queue head is already non-null 2021-05-15 21:31:45 -05:00
Cameron Gutman edf1838708 Expose RTT information from ENet 2021-05-15 13:58:54 -05:00
Cameron Gutman 5feb3b6f90 Dynamically adjust wait time to hit the next RTO 2021-05-15 12:47:20 -05:00
Cameron Gutman 50c0648de2 Run a full enet_host_service() rather than just enet_host_flush() on send 2021-05-15 12:26:01 -05:00
Cameron Gutman 97216e1704 Wait for ENet socket readability rather than just sleeping 10 ms 2021-05-15 00:15:16 -05:00
Cameron Gutman 43eb36e17a Simplify and improve graceful disconnect logic 2021-05-14 22:36:13 -05:00
Cameron Gutman 387ff48a65 Perform a graceful disconnection if the termination was locally initiated 2021-05-14 22:06:07 -05:00
Cameron Gutman 1b3c14a792 Increase maximum input queue size 2021-05-14 21:07:14 -05:00
Cameron Gutman 132833deeb Limit RTO to 2x RTT and fix early peer timeout expiration 2021-05-14 20:44:19 -05:00
Cameron Gutman a1a150c300 Refactor IDR/RFI requests to simplify code and fix race conditions 2021-05-14 20:41:20 -05:00
Cameron Gutman cd62147cdf Print a warning when the input queue reaches the maximum size 2021-05-14 20:36:25 -05:00
Cameron Gutman 7743899251 Optimize LBQ to avoid unnecessary syscalls 2021-05-14 18:42:01 -05:00
Cameron Gutman 5d09d43b08 Disable RFI at 4K until the problems are understood 2021-05-06 22:17:04 -05:00
Cameron Gutman ccaca624f3 Attempt to fix audio latency issues on some PCs 2021-05-04 10:21:41 -05:00
Cameron Gutman 65047ac0e2 Switch to VS2019 build images for CI
Requires suppressing warning C5105 caused by Windows SDK headers
2021-04-29 17:59:38 -05:00
Cameron Gutman b0737b882d Adjust MSVC warning level 2021-04-29 17:51:20 -05:00
Cameron Gutman bc1b5a1b2f Fix Linux build 2021-04-29 17:40:13 -05:00
Cameron Gutman a000f9f8b8 Validate that claimed length doesn't exceed the actual length 2021-04-29 17:26:59 -05:00
Cameron Gutman 8f371343cd Consolidate includes 2021-04-29 17:22:15 -05:00
Cameron Gutman da68e64d9b Fix various MSVC warnings 2021-04-29 17:21:12 -05:00
Cameron Gutman 77ed77b93b Pull ENet changes from upstream 2021-04-29 09:44:32 -05:00
Cameron Gutman 252a50bb75 Disable WSAECONNRESET errors for UDP sockets on Windows 2021-04-28 20:37:20 -05:00
Cameron Gutman 7549243f40 Add the correct definition for ECONNREFUSED for Windows 2021-04-28 17:30:00 -05:00
Cameron Gutman 9c92c12fea Prevent errno.h from including incompatible error codes with Winsock codes 2021-04-28 17:29:33 -05:00
Cameron Gutman 3ae03998a2 Add retry logic for RTSP handshake connection refused error
This can happen due to a race condition between GFE completing the launch request and starting to listen on TCP 48010
2021-04-28 17:08:27 -05:00
Cameron Gutman 068f7aa9d9 Allow connection interruption during the RTSP handshake 2021-04-28 17:06:04 -05:00
Cameron Gutman bce9f82844 Fix strict aliasing violation (and save a byteswap on each packet) 2021-04-28 17:05:41 -05:00
Cameron Gutman fe205d838d Don't check for errors from sendto() in the ping threads 2021-04-28 17:04:44 -05:00
Cameron Gutman 83b1b17f87 Add specific logging for frames dropped completely 2021-04-27 17:39:00 -05:00
Cameron Gutman c1befbe2a8 Improve audio resync logic to use initial receive time rather send time 2021-04-26 22:43:49 -05:00
Cameron Gutman 33c4e98152 Adjust initial audio resync drop time based on connection handshake latency 2021-04-26 21:39:36 -05:00
Cameron Gutman 7174caf5f1 Implement support for multi-FEC frames 2021-04-26 20:36:07 -05:00
Cameron Gutman 9a5dbcf31c Create a second queue for completed FEC blocks 2021-04-26 20:26:16 -05:00
Cameron Gutman b33e9fbcde Fix list corruption on entry removal 2021-04-26 20:24:39 -05:00
Cameron Gutman ca4019c09f Refactor FEC queue in preparation for multi-block frame support 2021-04-26 17:09:50 -05:00
Cameron Gutman 8dab1ee300 Use stdint.h types for Video.h 2021-04-26 17:08:44 -05:00
Cameron Gutman ae92f15b0a Use SRW locks for our mutex on Windows
These avoid a kernel transition for uncontended cases
2021-04-25 15:04:12 -05:00
Cameron Gutman 13041e0323 Further optimization to avoid needless calls to EVP_aes_128_gcm() and EVP_aes_128_cbc() 2021-04-22 17:49:51 -05:00
Cameron Gutman 8354c403f4 Optimize OpenSSL backend to avoid redundant reinitialization
It is best to pass as few parameters to EVP_*Init_ex() as possible.
Passing a key, IV, or cipher will cause redundant work to happen behind
the scenes as OpenSSL doesn't check whether they have actually changed.

This avoids a malloc()/free() and redoing AES key expansion for every
message that is encrypted and decrypted.
2021-04-22 17:34:48 -05:00
Cameron Gutman 29d2cc6d5b Improve MbedTLS implementation of AES-CBC 2021-04-22 17:08:35 -05:00
Cameron Gutman d7549cd953 Use array initializers compatible with MSVC 2021-04-22 00:32:41 -05:00
Cameron Gutman db81f1e512 Add support for audio stream encryption
Clients must opt-in using the new encryptionFlags field
2021-04-22 00:20:17 -05:00
Cameron Gutman 55cf1f8d30 Remove unnecessary calls to EVP_CIPHER_CTX_reset()
EVP_EncryptInit_ex() and EVP_DecryptInit_ex() free the cipher state as required
2021-04-22 00:17:46 -05:00
Cameron Gutman 625ec431eb Improve AES-CBC code in preparation for audio encryption 2021-04-21 23:59:14 -05:00
Cameron Gutman 3abd3af4b2 Convert 'supportsHevc' and 'enableHdr' fields to bool type 2021-04-21 23:32:43 -05:00
Cameron Gutman b24a71ab0b Add explicit IDR frame request packet for GFE 3.22 2021-04-21 17:52:05 -05:00
Cameron Gutman 3adacb876d Fix incorrect checks for AF_INET6 2021-04-19 23:01:17 -05:00
Cameron Gutman 221af82950 Add workaround for false GCC warning in CI 2021-04-18 00:15:27 -05:00
Cameron Gutman 76bba517b8 AppVeyor build fixes 2021-04-17 23:59:47 -05:00
Cameron Gutman 23a86b0455 Build with OpenSSL and MbedTLS for CI 2021-04-17 23:56:15 -05:00
Cameron Gutman 3979dbd082 Allow compilation on OSes without IPv6 support 2021-04-17 23:40:36 -05:00
Cameron Gutman bced126fdb Fix MSVC builds 2021-04-17 22:44:47 -05:00
Cameron Gutman 873fc6f837 Build fixes 2021-04-17 22:00:53 -05:00
Cameron Gutman 4304e597d8 Add byteswapping macros for big-endian systems 2021-04-17 21:43:13 -05:00
Cameron Gutman efaeade7a6 Small cleanup and bugfix 2021-04-17 20:24:43 -05:00
Cameron Gutman 98d7ceecf7 Add native MbedTLS crypto backend 2021-04-17 19:00:26 -05:00
Cameron Gutman d62ee951a0 Refactor OpenSSL usage into a platform-specific file to allow other crypto backends 2021-04-17 17:47:53 -05:00
Cameron Gutman 5782246b30 Add hack to prevent video glitching on GFE 3.22 when packets per frame exceed 120 2021-04-09 19:30:38 -05:00
Cameron Gutman 31433fc5ee Minor cleanup and bugfix 2021-04-09 13:47:24 -05:00
Cameron Gutman 83431e557d Fix leak on each GFE 3.22 input packet 2021-04-09 13:47:00 -05:00
Cameron Gutman 0a00163f0b Fix audio stream init error check 2021-04-09 13:00:35 -05:00
Cameron Gutman cb11b76682 Fix GCC/Clang warning 2021-04-09 12:20:02 -05:00
Cameron Gutman 6dca9c6754 Add special termination error code for protected content 2021-04-09 11:53:03 -05:00
Cameron Gutman 9841a6e34d Fix parsing of termination message from GFE 3.22 2021-04-09 11:41:59 -05:00
Cameron Gutman 731d52d020 Return a packet length from the decryption process 2021-04-09 10:40:28 -05:00
Cameron Gutman 12f0f3d6d7 Add encrypted control stream support for GFE 3.22
Receive-side not yet fully working
2021-04-09 10:25:24 -05:00
Cameron Gutman f0dbee171b Consider UDP 48000 as part of RTSP for connection testing
GFE 3.22 requires UDP 48000 communication to complete RTSP handshake
2021-04-09 08:39:28 -05:00
Cameron Gutman d0c3513504 Reorder audio initialization and RTSP handshake to avoid RTSP PLAY failure on GFE 3.22 2021-04-09 08:39:28 -05:00
Cameron Gutman 2c13835f32 Increase first-start audio drop for upcoming GFE 3.22 changes 2021-04-09 08:39:28 -05:00
Cameron Gutman c0c200e72c Fix APP_VERSION_AT_LEAST macro definition 2021-04-09 07:51:05 -05:00
Cameron Gutman 9b194cc700 Adjust RTSP requests to conform to GFE 3.22 changes 2021-04-09 07:46:14 -05:00
Cameron Gutman 9a706fd78c Temporarily switch to control protocol 9 on GFE 3.22 2021-04-09 07:45:17 -05:00
Cameron Gutman 415d97aa4d Pass through input for full control stream encryption on GFE 3.22 2021-04-09 07:44:31 -05:00
Cameron Gutman a51cc972d3 Add APP_VERSION_AT_LEAST() macro for cleaner GFE version checks 2021-04-09 07:26:24 -05:00
Cameron Gutman b528867466 Change NAL type parsing to match the spec and add AUD removal for H.264 2021-03-29 19:27:19 -05:00
Cameron Gutman 8b1fbc770e Discard AUD NALs prepended to incoming frames 2021-03-28 10:34:01 -05:00
Cameron Gutman a64af8d8cf Fix unused variable warning on NaCl 2021-01-09 20:08:22 -06:00
Cameron Gutman 021fe902d9 Update ENet submodule to upstream 1.3.17 release 2021-01-09 18:46:13 -06:00
Cameron Gutman fd950b6452 Allow applications to reliably calculate decode unit queue delay 2020-12-31 16:08:00 -06:00
Cameron Gutman 3aa2463856 Add a special error code for early termination 2020-12-24 11:21:47 -06:00
Cameron Gutman 97ca7b099f Report frames to the control stream code before FEC reconstruction 2020-12-24 11:08:31 -06:00
Cameron Gutman cca2ba9aab Add LiStringifyPortFlags() helper function 2020-12-23 13:42:28 -06:00
Cameron Gutman ce546b12b0 Fix undefined behavior due to shifting an int by 31 2020-12-06 00:44:33 -06:00
Cameron Gutman 6dd3f9e7bc Treat GCC/Clang warnings as errors 2020-12-05 23:46:10 -06:00
Cameron Gutman 941ffef2ca Fix final GCC sign warnings 2020-12-05 23:45:49 -06:00
Cameron Gutman 8dc304bcd3 Fix more warnings 2020-12-05 23:30:25 -06:00
Cameron Gutman 3fddfc5557 Fix Clang warnings 2020-12-05 23:20:02 -06:00
Cameron Gutman ac6630ef59 Add AppVeyor CI builds 2020-12-05 20:12:14 -06:00
Cameron Gutman 0ead0df2a1 Remove usage of long types for LP64 and LLP64 consistency 2020-12-05 16:51:03 -06:00
Cameron Gutman 333382ae74 Use stdint types for ByteBuffer 2020-11-30 22:03:24 -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