Cameron Gutman
d4e22bb4a6
Update ENet to fix inaccurate RTT values under 8 ms
2021-05-16 14:42:15 -05:00
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