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
Cameron Gutman
56ccd99cc7
Dynamically determine audio, video, and control ports from RTSP DESCRIBE response
2021-07-01 23:45:33 -05:00
Cameron Gutman
2660a05084
Fix GCC build
2021-07-01 22:28:17 -05:00
Cameron Gutman
1b642fec73
Fix control flow bugs in poll() error paths
2021-07-01 22:20:09 -05:00
Cameron Gutman
52250b4815
Use O_NONBLOCK for platforms without support for FIONBIO
2021-07-01 22:15:26 -05:00
Cameron Gutman
c00f4e15ae
Use poll() instead of SO_RCVTIMEO for RTSP timeout support
...
poll() is more portable than SO_RCVTIMEO
2021-07-01 22:10:46 -05:00
Cameron Gutman
7c346c3104
Fix handling of older GFE versions in surround sound mode
...
7.1 surround sound would usually behave like CBR content, which never
tripped the logic to detect this incompatibility. Now we will both
detect it via hardcoded version number check, but also detect when the
FEC base sequence number constraint is violated too.
2021-06-20 14:55:44 -05:00
Cameron Gutman
5e3aa93479
Add a recording mode for debugging purposes
2021-06-20 11:15:30 -05:00
Cameron Gutman
75999a6e07
Add Video/Audio prefix to ThreadProc names
...
It's easier to find them in stack traces that way.
2021-06-20 10:36:05 -05:00
Cameron Gutman
eff97414bf
Perform the initial audio resync even if we hit the polling timeout
2021-06-19 16:44:48 -05:00
Cameron Gutman
c680a60710
Disable audio FEC when using old GFE and Sunshine versions
2021-06-19 16:22:44 -05:00
Cameron Gutman
fed1a899aa
Add defines for RTP audio payload types
2021-06-19 16:08:18 -05:00
Cameron Gutman
b58930c687
Don't start the decoder thread in pull-mode
2021-06-13 15:30:37 -05:00
Cameron Gutman
68c784445c
Introduce optional pull-based API for video data
2021-06-13 15:14:38 -05:00
Cameron Gutman
b2d4b2c61f
Fix spurious exit of fast recovery mode when the stream starts
2021-06-12 18:33:20 -05:00
Cameron Gutman
9999156f26
Update ENet to avoid dependency on qwave.dll
2021-06-12 12:16:39 -05:00
Cameron Gutman
ac9c4e82ac
Introduce a list to cache freed input packet entries for reuse
2021-06-12 10:43:50 -05:00
Cameron Gutman
a13eeddacf
Fix Win32 release build
2021-06-09 20:38:22 -05:00
Cameron Gutman
f01103af23
Add a free FEC block cache to avoid memory allocations
2021-06-09 20:29:05 -05:00
Cameron Gutman
fb9aab0e57
Reimplement LBQ on condition variables
2021-06-09 19:59:52 -05:00
Cameron Gutman
71a267fd28
Change PltWaitForEvent to void return type
2021-06-09 19:37:06 -05:00
Cameron Gutman
61b4fc1fe7
Add condition variable support and reimplement PLT_EVENT with it for non-Win32 platforms
2021-06-09 19:29:31 -05:00
Cameron Gutman
ccec4e8475
Add thread naming on macOS and iOS
2021-06-09 03:00:25 -05:00
Cameron Gutman
b471edbb80
Add a fast path to drop the audio FEC block with in-order packets
...
If we have not seen any OOS audio data lately, we can assume that
seeing the next FEC block means the previous block has completed
transmission. If we don't have it all by then, just assume it was
lost and move on. This reduces the perception of audio loss by
reducing the change that we cause the audio device to underrun.
2021-06-09 02:31:55 -05:00
Cameron Gutman
c64ba99654
Fix build on GCC/Clang
2021-06-09 01:45:44 -05:00
Cameron Gutman
7b838dd692
Improve audio FEC queue timeout logic
2021-06-09 00:46:14 -05:00
Cameron Gutman
ca7a6e7bbe
Validate block size before writing data
2021-06-08 20:03:49 -05:00
Cameron Gutman
2228e4812d
Improve debugging for A/V data loss and recovery
2021-06-08 20:01:58 -05:00
Cameron Gutman
5a71a4c092
Use 10ms packets for slow Opus decoders
...
With the old 20ms packets, an FEC block was 80ms of audio data.
This is enough data that waiting for the FEC shards can cause
an audio data underflow. The burst of 80ms of audio data after
reassembly fails can then lead clients to drop samples due to
excessive queued data.
2021-06-07 23:20:40 -05:00