Commit Graph
100 Commits
Author SHA1 Message Date
Cameron Gutman 02f12e4448 Update enet to fix NO_MSGAPI build 2023-03-05 14:32:34 -06:00
Cameron Gutman b77072d399 Don't use GFE modifier workaround with Sunshine 2023-02-25 13:11:54 -06:00
Cameron Gutman d3cb8131d1 Revert "Send TCP FIN after completion of our RTSP request"
Existing servers already know how to parse our messages without this,
so we just risk breaking things with middleboxes that don't do half-closed
connections properly. We'll handle this better with encrypted RTSP.

This reverts commit 95e3e26d12.
2023-02-20 16:58:21 -06:00
Cameron Gutman 7e089435c7 Reduce max number of frame status reports per second 2023-02-20 16:48:12 -06:00
Cameron Gutman 55a6d58225 Fix leak 2023-02-20 16:42:23 -06:00
Cameron Gutman 207f981fd0 Send final FEC frame status info to Sunshine
This info will be used for dynamic FEC and dynamic video packet batch size.
2023-02-20 16:24:48 -06:00
Cameron Gutman 82105f2f8f Declare packetFreed as volatile 2023-02-15 01:42:48 -06:00
Cameron Gutman c88b1bcf8e Fix integer truncation warning on MSVC 2023-02-15 01:33:32 -06:00
Cameron Gutman 54d46ca80f Put backpressure on control stream sender when the window fills up
Without any backpressure, ENet will just let packets accumulate forever.
2023-02-14 23:02:18 -06:00
Cameron Gutman 830187e4da Throttle mouse/controller message rate in the input send thread
This avoids clients from all having to handle this themselves independently.
2023-02-14 21:24:13 -06:00
Cameron Gutman 95e3e26d12 Send TCP FIN after completion of our RTSP request
This allows servers to read until a FIN, just like we do on the client.
2023-02-13 21:47:22 -06:00
Cameron Gutman 8186687093 Fix video header parsing assert with GFE 3.27 2023-02-13 21:26:47 -06:00
Cameron Gutman be1a48e856 Treat WSA_IO_PENDING as a receive timeout 2023-02-13 20:20:44 -06:00
Cameron Gutman fb12361b3f Fixed ENet to support hosts with multiple possible source addresses 2023-02-12 15:39:58 -06:00
Cameron Gutman dc186082a7 Add protocol extension for multi-client-compatible ping support 2023-02-12 01:23:25 -06:00
Cameron Gutman 07beb0f0a5 Accept any negative version as Sunshine 2023-01-16 21:38:36 -06:00
Cameron Gutman 08bb69ff7c Fix HScroll packet typedef 2023-01-16 21:24:09 -06:00
Cameron Gutman 4dbb445f8b Suppress Opus header assert with Sunshine 2023-01-16 21:13:18 -06:00
Cameron Gutman e1a7fe84e0 Add missing return 2023-01-16 21:12:24 -06:00
Cameron Gutman 79b5ef0e1e Add Sunshine protocol extension for passing HDR metadata 2023-01-16 21:06:33 -06:00
Cameron Gutman c9a5cea93e Add Sunshine protocol extension to support non-normalized key codes 2023-01-16 21:05:11 -06:00
Cameron Gutman 22adeb3902 Enable high resolution scroll events on Sunshine 2023-01-16 20:58:03 -06:00
Cameron Gutman 071e595766 Implement horizontal scrolling protocol extension for Sunshine 2023-01-16 20:56:51 -06:00
Cameron Gutman ef9ad529a4 Skip PPS NALUs prepended to P-frames 2023-01-02 23:48:16 -06:00
Cameron Gutman 9da6329496 Fix integer truncation warning on MSVC 2022-12-06 17:33:43 -06:00
Cameron Gutman 5c7a5ce129 Remove overzealous assert 2022-12-06 17:23:11 -06:00
Cameron Gutman bc00d957d3 Synthesize a PTS for hosts that don't send one 2022-12-06 17:22:02 -06:00
Cameron Gutman 8169a31ecc Fix incorrect PNV_INPUT_HEADER typedef 2022-11-22 21:30:17 -06:00
Cameron Gutman 0a87fd023d Add magic values for keyboard/mouse up/down 2022-11-22 18:27:27 -06:00
Cameron Gutman 4840e431f4 Call notifyKeyFrameReceived() before the decoder processes the frame
We don't care if the decoder processes it successfully.
2022-11-21 02:22:26 -06:00
Cameron Gutman 1e582e3e58 Improve decode unit validation 2022-11-21 02:17:47 -06:00
Cameron Gutman 549058d9d1 Assert that P-frames are not processed before IDR frames 2022-11-12 19:42:51 -06:00
Cameron Gutman 56d6b7ff5a Ensure RFI is not used when an IDR frame is needed 2022-11-12 19:22:13 -06:00
Cameron Gutman 50c0a51b10 Improve high quality audio support
High quality audio now works on IPv6 and remote connections
2022-11-04 21:44:07 -05:00
Cameron Gutman 6418c631ba Further improve audio FEC recovery logic when dealing with completely missing FEC blocks 2022-10-25 22:31:18 -05:00
Cameron Gutman 21998586d1 Improve audio recovery when a prior FEC block was completely lost
We now start playing the latest FEC block immediately, instead of needlessly
waiting for a second FEC block to realize we've lost a full block and need
to skip forward.
2022-10-24 23:38:23 -05:00
Cameron Gutman 7ba4eea417 Don't print misleading audio FEC log messages 2022-10-23 22:09:01 -05:00
Cameron Gutman a2f68835f9 Fix signed comparison warning on GCC 2022-10-22 15:08:55 -05:00
Cameron Gutman af1dbfe505 Use APP_VERSION_AT_LEAST in a couple other places 2022-10-22 14:45:19 -05:00
Cameron Gutman b282c7e603 Ensure UNIX implementations of PltGetMillis() are not limited to 32 bits 2022-10-22 14:45:19 -05:00
Cameron Gutman 6d767a8494 Assume the platform supports clock_gettime() if CLOCK_MONOTONIC is defined 2022-10-22 14:45:19 -05:00
Cameron Gutman 9e52b70edf Fix handling of a drop pattern where OOS packets are late but in contiguous order from the previous point 2022-10-22 14:45:19 -05:00
Cameron Gutman 05a925b801 Simplify speculative RFI tracking by looking at missing shards of any type 2022-10-22 14:45:19 -05:00
Cameron Gutman 5f92ecafe7 Avoid triggering RFI wait code for decode unit queue overflow 2022-10-06 21:25:48 -05:00
Cameron Gutman 44668bd256 Distinguish speculative RFIs from normal FEC-initiated RFIs 2022-10-06 21:21:00 -05:00
Cameron Gutman 73f1ec64a8 Suppress speculative RFI for 5 minutes after OOS data is detected 2022-10-06 21:20:44 -05:00
Cameron Gutman 947d1b5aef Predictive RFI -> Speculative RFI 2022-10-06 21:20:44 -05:00
Cameron Gutman 9d25ebec40 Immediately report a lost frame if we find a discontinuity in the frame indices 2022-10-06 21:20:41 -05:00
Cameron Gutman 7d1a081fd0 Fix signature of notifyFrameLost() and add additional assert 2022-10-06 20:38:55 -05:00
Cameron Gutman f2dd7888f7 Immediately request an IDR frame on corrupt frame 2022-10-06 20:36:53 -05:00
Cameron Gutman e951302927 Disable RFI when streaming from a server that doesn't support it 2022-10-06 20:01:40 -05:00
Cameron Gutman 9091238861 Add another predictive RFI detection technique 2022-10-06 01:17:37 -05:00
Cameron Gutman 5e1be51b84 Implement predictive RFI to recover more quickly from frame loss
With predictive RFI, we can recover from a lost frame as soon as the next frame
by predicting whether we will have enough FEC data to be be able to recover a
frame based on the sequence numbers of the received packets.
2022-10-05 22:04:22 -05:00
Cameron Gutman 9240090983 Add LiRequestIdrFrame() API for requesting an IDR frame on demand 2022-10-05 00:46:56 -05:00
Cameron Gutman 502f799a73 Add ML_ERROR_FRAME_CONVERSION error constant 2022-10-04 19:37:35 -05:00
Cameron Gutman bfade1d795 Add workaround for nvstreamer.exe crash on GFE 3.26 when streaming below 720x540 2022-10-04 18:33:12 -05:00
Cameron Gutman 72f4f9e7b1 Disable BLL-FEC on GFE 3.26
The effective FEC percentage is much lower which negatively impacts performance on lossy networks
2022-10-04 17:51:01 -05:00
Cameron Gutman dbfbc91971 Explicitly request an IDR frame in the IDR frame wait path 2022-10-03 18:27:57 -05:00
Cameron Gutman a4870f619b Frame type fields are present all the way back to GFE 3.2 (and probably further) 2022-10-03 18:26:24 -05:00
Cameron Gutman 4c62b5d23a Fix fallback handling of RFI on older servers 2022-10-03 18:25:08 -05:00
Cameron Gutman 3593dea585 Rework RFI to work reliably with HEVC 2022-10-02 22:19:48 -05:00
Cameron Gutman 795e3f644a Ensure the next frame after a DU drop is always an IDR frame
On RFI-capable decoders, this would sometimes be a P-frame
2022-10-02 21:12:01 -05:00
Cameron Gutman 3ae777f973 Try to recover if the frame header parsing fails 2022-09-24 13:43:32 -05:00
Cameron Gutman 54825845e7 Fix large frame header size for GFE 3.26 2022-09-22 21:51:11 -05:00
Cameron Gutman 50603ac16e Fix mishandling of IDR frames with a VUI or AUD NAL 2022-09-11 23:34:38 -05:00
Cameron Gutman e453a4d548 Add 3 byte Annex B start sequence test mode for debugging clients 2022-09-05 17:41:37 -05:00
Cameron Gutman 5a2911ffe4 Rework NALU parsing to be more robust handling 3 byte prefixes 2022-09-05 16:45:14 -05:00
Cameron Gutman ec420615a1 Fix GCC build 2022-08-10 00:18:56 -05:00
Cameron Gutman ef9c5a65cf Return a better error code when the control stream connection fails 2022-08-09 23:26:33 -05:00
Cameron Gutman c72f30da2e Improve logging for control stream connection failure 2022-08-09 23:12:31 -05:00
Cameron Gutman bf22101c7d Add video format mask for 10-bit color 2022-06-26 16:19:44 -05:00
Cameron Gutman d247873ade Add LiSendMouseMoveAsMousePositionEvent() function
This is a useful option for Android and iOS where mouse acceleration
is always enabled and mouse capture is the only feasible way to get
mouse input. It can avoid double-acceleration when being used for
remote desktop mouse mode.
2022-05-28 14:58:34 -05:00
Cameron Gutman e62dc56047 Update notes regarding enableHdr option 2022-02-07 20:16:19 -06:00
Cameron Gutman bc458b8848 Use 15 second timeout for RTSP replies
GFE has an internal 10 second timeout for bringing up the streamer,
so we can end up timing out right as GFE is trying to reply to us.
2022-02-06 20:59:18 -06:00
Cameron Gutman abc7acb5e4 Add HDR mode APIs 2022-01-28 21:29:14 -06:00
Cameron Gutman cfe75eb569 Add workaround for keyboard and UTF-8 events interfering with each other 2022-01-17 21:56:06 -06:00
Cameron Gutman 921b59c467 Add API to wake a waiting thread in LiWaitForNextVideoFrame() 2022-01-17 14:12:11 -06:00
Cameron Gutman 6001ece0b8 Fix uninitialized variable 2021-12-12 16:04:58 -06:00
Cameron Gutman ac1355b922 Fix excessive high-res scroll speed on newer GFE versions 2021-12-12 12:05:20 -06:00
Cameron Gutman 257029f80d Remove redundant packet length field 2021-12-10 02:00:42 -06:00
Cameron Gutman 94d439e5c3 Fix memory corruption with UTF-8 strings over 32 bytes 2021-11-30 19:05:32 +03:00
Cameron Gutman 6a6328a355 Send each Unicode code point individually to avoid straddling packet boundaries 2021-11-30 18:28:09 +03:00
Cameron Gutman 8c55c086d5 Update enet submodule 2021-09-16 01:31:47 -05:00
Cameron Gutman 5b2cf1b8f7 Fix handling of hostname with multiple candidate IP addresses when using alternate ports 2021-08-14 12:30:04 -05:00
Cameron Gutman a290ec032b Fix relative mouse and controller batching after 74377a06 2021-08-05 22:14:35 -05:00
Cameron Gutman 8cac195fcf Fix compilation warnings 2021-07-30 01:32:43 -05:00
Cameron Gutman f3e37944fc Split UTF-8 strings into chunks small enough to fit in an NV_UNICODE_PACKET 2021-07-30 01:23:53 -05:00
Cameron Gutman 74377a061b Rework input packets based on new header knowledge 2021-07-30 01:02:35 -05:00
Cameron Gutman ceafe7897c Refactor input packet sending logic into a separate function 2021-07-29 23:49:58 -05:00
Cameron Gutman 8abc371fb4 Print warning when audio decryption fails 2021-07-17 22:57:50 -05:00
Cameron Gutman b2c39883bf Fix incorrect IV for encrypted control stream packets on big-endian machines 2021-07-17 22:29:30 -05:00
Cameron Gutman d14f62c26a Fix crash when client provides no video decoder callbacks 2021-07-17 21:55:39 -05:00
Cameron Gutman fa892c5334 Remove SEI prefix NAL units before returning data to clients 2021-07-09 17:37:30 -05:00
Cameron Gutman 5820cc2048 Fix double-free if unencrypted packet is received on encrypted stream 2021-07-08 20:50:09 -05:00
Cameron Gutman 3b9d8a3176 Assert that the port numbers are set prior to being used 2021-07-02 01:44:11 -05:00
Cameron Gutman cdda221d64 Log the parsed ports 2021-07-02 01:30:33 -05:00
Cameron Gutman 5ec8ee7cbf Parse the RTSP port out of the RTSP session URL 2021-07-02 01:17:34 -05:00
Cameron Gutman 0cd3fcf1be Fix off-by-one in port number validation 2021-07-02 01:16:20 -05:00
Cameron Gutman 46887c0447 Parse the ports from RTSP SETUP instead of RTSP DESCRIBE
RTSP SETUP is better because it can provide multiple IP+port candidates
2021-07-02 00:28:48 -05:00
Cameron Gutman f05be47ed8 Replace other hardcoded ports 2021-07-02 00:27:35 -05:00