0
0
mirror of https://github.com/obsproject/obs-studio.git synced 2024-09-20 21:13:04 +02:00
Commit Graph

128 Commits

Author SHA1 Message Date
jp9000
e8b2b2092b obs-outputs: Clear RTMP data before initiating connect
Sometimes when reconnecting the internal RTMP data is not cleared
(particularly the TLS data). This can cause TLS data to carry over from
one connection to another, causing issues with the secondary connection.
2022-06-06 10:12:50 -07:00
tytan652
16e19d2e9c obs-output: Fix compiler warnings
* obs-output: Fix unused-parameter warning

* obs-output: Fix pointer type mismatch warning
2022-05-04 01:37:10 -07:00
Richard Stanway
a39d174100 obs-outputs: Set a fixed size socket buffer on Windows 7
Auto tuning apparently doesn't work very well on this version and
af6844f5c2 caused throughput
regressions.
2022-02-20 16:16:17 -08:00
Richard Stanway
af6844f5c2 obs-outputs: Only log SO_SNDBUF on RTMP socket
From Windows 7 onwards, dynamic send buffering is enabled. By setting
SO_SNDBUF explicitly, we actually disabled the dynamic send buffering
feature which results in reduced throughput. Thankfully this did not
affect the majority of users since the default send buffer is usually
already 64k.

This commit replaces the setting of SO_SNDBUF with log output showing
the current value of SO_SNDBUF at stream start and end. This will aid in
debugging throughput issues caused by a buffer that isn't big enough,
perhaps as a result of the user disabling dynamic send buffering
system-wide.
2021-12-27 14:29:43 -08:00
jp9000
a593fe6755 obs-outputs: Add support for "RTMP Go Away" feature 2021-12-21 09:44:21 -08:00
jp9000
6a72cd64e7 obs-outputs: Add support for reading RTMP packets
Instead of ignoring RTMP packets, allow the ability to read incoming
RTMP packets
2021-12-21 09:44:21 -08:00
liu.haibin
1883b774e8 obs-outputs: Reset dbr bitrate before end_data_capture_thread start 2021-12-17 04:31:16 -08:00
jpark37
e581802812 obs-outputs: Remove WIN32_LEAN_AND_MEAN define
It should already be defined near the Windows.h include.
2021-10-10 19:12:45 -07:00
Tommy Vercetti
e075ad5bca obs-outputs: Add WIN32_LEAN_AND_MEAN to avoid symbol clash 2021-09-11 15:50:06 -07:00
Richard Stanway
9411c548d3 obs-outputs: Disable Windows socket loop when using RTMPS
Since this is activated after starting the output, it assumes there is
no need to read anything from the connection as RTMP is send-only from
that point on. However with TLS, reading protocol messages is required
for proper operation, causing it to immediately fail on RTMPS
connections. This is a complex fix due to the way it interacts with
librtmp and mbedTLS so let's just disable it for now to avoid breaking
things for users.
2021-09-03 18:15:17 +02:00
Thulinma
244b6c92e6 obs-outputs: Fix RTMP restart not always working
Bug is caused by the internal connection variables not being reset on
reconnect, leading OBS to both be unable to parse valid packets from and
send valid packets to the remote end.  This commit splits RTMP_Init off
into a new RTMP_Reset function, which resets these internal variables
without re-initing the rest of the library.  The original RTMP_Init
calls the new function, perfectly preserving the old behaviour while
adding a new reset function to address the issue with.

Fixes obsproject/obs-studio#2865
2021-01-31 18:44:11 -08:00
Shaolin
420823bfaa plugins: Clear compile warnings on Linux 2020-08-26 01:34:03 -03:00
jp9000
d310f1532b obs-outputs: Remove legacy multitrack code 2020-08-24 13:07:55 -07:00
jp9000
189fc7ab6a obs-outputs: Add support for metadata-based multitrack 2020-08-22 08:27:58 -07:00
Richard Stanway
452a4b5085 obs-outputs: Fix RTMP authentication
RTMP authentication requires the curStreamIdx and nStreams be set
between the disconnect / reconnect that occurs in PublisherAuth. Now
that there's no good place to clean them up, zero the whole rtmp->Link
before starting a new stream.
2020-03-06 22:52:50 +01:00
Richard Stanway
ee4cbb1199 obs-outputs: Properly reset stream count on RTMP_Close
Every addStream call would increment this counter. After merging the
mbedTLS fixes, we no longer have extraneous RTMP_Init calls which were
masking the prescence of this bug. This caused every stream after the
first stream to have the wrong channel index, and eventually OBS would
crash due to an out of bounds write if the counter reached
RTMP_MAX_STREAMS.
2020-02-23 01:04:14 +01:00
Richard Stanway
476b727fea obs-outputs: Show UI error if the root certs don't load
Though this should now be very rare, it's more helpful than "Failed to
connect to server". Other TLS error codes are now also stored for future
use instead of copying them on a case by case basis.
2020-01-25 17:35:07 +01:00
Richard Stanway
7a4c5e5df2 obs-outputs: Enable logging before calling RTMP_Init
Errors or warnings in RTMP_Init were not copied to the OBS log file
if they occured before the callback was set.
2020-01-25 17:01:14 +01:00
Richard Stanway
2b131d212f obs-outputs: Fix librtmp mbedtls thread safety
Per mbedtls documentation, "If you share a context between threads, you
need to call these functions only from the main thread, at the beginning
and end of the context's lifetime.". OBS violated this since librtmp
uses a global context and it was allocated and freed in different
threads such as the auto config test.

This commit attaches the mbedtls context to an RTMP structure so there
is no more global state. It also fixes a rare double-free crash that
could occur if RTMP_TLS_Free was called twice (this happened in rare
situations such as the auto config running followed by a mode change
from Advanced to Simple).
2020-01-23 00:11:23 +01:00
Clayton Groeneveld
350969a206 rtmp-stream: Fix comparison between signed and unsigned ints 2019-10-11 22:34:49 -05:00
jp9000
aa4d1d0cd1 obs-outputs: Add dynamic bitrate to RTMP output
The dynamic bitrate operates based upon estimating the current bitrate
output, and then adjusting the bitrate on the fly as necessary when
congestion is detected as a replacement for dropping frames.

This may still need adjustment, as it is difficult to accurately emulate
real-world frame drop scenarios.  This does not currently drop frames at
all, and because of that, very high congestion may cause additional
stream delay to viewers (because data will be buffered), but from
limited testing, most congestion will not cause that and it can safely
recover pretty quickly without adding significant delay.
2019-08-18 03:14:38 -07:00
jp9000
91ce2349db obs-outputs: Allow changing bitrate test limit on the fly
When doing the bitrate limit test, it can be useful to have the ability
to change the current maximum bitrate limit.  This adds the ability to
press keys on windows (numpad 0-6) to change between bitrates.  Numpad 0
being no limit, 1 being 1000, 2 being 2000, etc.
2019-08-18 03:14:38 -07:00
Richard Stanway
0e77a2c75b obs-outputs: Minor pointer fixes 2019-06-29 01:28:16 +02:00
jp9000
f53df7da64 clang-format: Apply formatting
Code submissions have continually suffered from formatting
inconsistencies that constantly have to be addressed.  Using
clang-format simplifies this by making code formatting more consistent,
and allows automation of the code formatting so that maintainers can
focus more on the code itself instead of code formatting.
2019-06-23 23:49:10 -07:00
jp9000
973d31b8c2 libobs: Fix lockup when an encode call fails
(This commit also modifies the UI, obs-ffmpeg, and obs-output modules)

Fixes a long-time regression where the program would lock up if an
encode call fails.  Shuts down all outputs associated with the failing
encoder and displays an error message to the user.

Ideally, it would be best if a more detailed error could be displayed to
the user about the nature of the error, though the primary problem is
the encoder errors are typically not something the user would be able to
understand.  The current message is a bit of a generic error message;
improvement is welcome.

Another suggestion is to try to have the encoder restart seamlessly,
though it would take a significant amount of work to be able to make it
do something like that properly, and it sort of assumes that encoder
failures are sporadic, which may not necessarily be the case with some
hardware encoders on some systems.  It may be better just to use another
encoder in that case.  For now, seamless restart is ruled out.
2019-05-17 01:51:12 -07:00
pkv
a5b837518e obs-outputs: Fix leak with certs for rtmp 2019-04-21 23:54:27 +02:00
Michael Goulet
e67e2e12e6 obs-outputs: Add support for and use mbedTLS for SSL
This diff adds mbedTLS support to the obs-outputs plugin.  PolarSSL and
mbedTLS have grown so different between 2015-or-so when libRTMP was
written, and now it's no longer feasible to just use the USE_POLARSSL
flag.

This commit adds a WITH_RTMPS tri-state CMake variable (auto/on/off),
set to "Auto" by default.  "Auto" will use RTMPS if mbedTLS is found,
otherwise will disable RTMPS.  "On" will make it require mbedTLS,
otherwise fails configuration, and "Off" disables RTMPS support
altogether.

Closes obsproject/obs-studio#1360
2018-08-05 18:40:49 -07:00
jp9000
5cfefce55e obs-outputs: Only set stop events if still active
The new code in 3032535f56 would signal that the output has stopped to
the back-end and front-end, but the event used in the outputs themselves
to shut down the send thread would still be signaled, causing the next
connection to immediately stop as soon as it had started.  This fixes it
so that the event does not get signaled unless the thread is active.
2017-10-12 09:56:47 -07:00
jp9000
3032535f56 obs-outputs: Signal stop if stop called when not active
Fixes a bug with reconnecting where the reconnecting would get stuck in
the "stopping" state.
2017-10-12 08:20:50 -07:00
jp9000
4a5ac39749 libobs: Fix starting video packet offset in outputs
(This commit also modifies the obs-outputs module)

The first video packet video offset (the value used to set the starting
point of video data) would be set to the DTS value of the first video
packet.  However, when b-frames are used, the first DTS value will be
negative.  This was originally done because FLV muxing requires that the
first packet's DTS start from 0.  Unfortunately, this would also
effectively cause the first packet's PTS/DTS value to be shifted forward
by the negative amount, which would cause video sync to be off by a
video frame or two.

This fixes it to start at the PTS value instead and preserve any
negative offsets.  Additionally, the FLV muxing code has been fixed to
ensure that it adjusts the starting video DTS to 0, and now correctly
adjusts the first audio packet's timestamp according to that DTS as well
(which it didn't do before).
2017-10-02 07:36:02 -07:00
Richard Stanway
41a1b09988
obs-outputs: Improve new netcode if encoder reports 0 bitrate
Some encoders such as the AMD AMF encoder don't set their bitrate
property, so it gets returned as 0. This causes the new network code to
allocate a tiny buffer, resulting in output starvation and throttling
to the point of uselessness if low latency mode is also enabled.
2017-08-30 00:09:05 +02:00
jp9000
d839c77824 libobs: Add API to specify codec support on encoded outputs
(This commit also modifies obs-outputs)
2017-07-14 08:15:16 -07:00
Shaolin
e5756a922a libobs/plugins/UI: Suppress unused variables warnings
Closes jp9000/obs-studio#937
2017-06-27 21:55:37 -07:00
Richard Stanway
92a258690e
obs-outputs: Add output error messages for RTMP 2017-05-15 12:05:44 +02:00
jp9000
d1329d1798 obs-outputs: Fix frame dropping when using ultrafast
x264 on ultrafast won't drop any b-frames, so it might buffer packets a
bit too much in that case.

The frame drop duration calculation now searches for the first valid
video frame within the packets buffer.  Additionally, it no longer
prevents frame dropping for a specific time after dropping frames,
because the first case eliminates the need for that.
2017-05-06 11:29:36 -07:00
jp9000
585b3ed945 obs-outputs: Add connect time callback for rtmp output 2017-05-06 11:29:35 -07:00
SoraYuki
0ea0b99aa0 obs-outputs: Always call RTMP_Init before connecting
Clears/reinitializes RTMP structure to defaults, preventing data from
potentially persisting between different connections.

Closes jp9000/obs-studio#878
2017-04-30 06:05:58 -07:00
Richard Stanway
48df41b5b7
obs-outputs: Improve shutdown behavior of new socket loop 2017-03-06 20:54:35 +01:00
Richard Stanway
7c7307df88
obs-outputs: Various fixes to new network code
Fixes another 100% CPU spin bug, improves low latency mode, fixes some
crashes on stopping stream due to race conditions.
2017-03-04 02:59:02 +01:00
Richard Stanway
8b640fae24
Fix various null pointer issues detected by Coverity 2017-02-25 16:45:45 +01:00
Richard Stanway
f8617bd359 librtmp: Clean up our extra RTMP fields on close 2017-02-25 06:16:19 -08:00
Richard Stanway
935223be34 obs-outputs: Port windows socket loop from OBS Classic 2017-02-25 06:16:18 -08:00
jp9000
d1b78edbf3 obs-outputs: Increase default drop threshold
500ms is a bit unnecessarily low.
2017-01-24 15:54:25 -08:00
jp9000
5c27ab8d87 obs-output: Add ability to get congestion to rtmp output 2017-01-24 15:52:22 -08:00
jp9000
afe37773bc obs-outputs: Free encoder packet data manually
These aren't referenced encoder packets, so they must be freed manually.
2016-12-24 03:01:52 -08:00
jp9000
7d6e6eee79 libobs: Use reference counting for encoder packets
Prevents reallocation of encoded packet data.

Deprecates:
obs_duplicate_encoder_packet
obs_free_encoder_packet

Replaces those functions with:
obs_encoder_packet_ref
obs_encoder_packet_release
2016-12-08 03:27:39 -08:00
Richard Stanway
7df46d4a8e
obs-outputs: Fix librtmp IP bind / resolve behavior
Fixes a case where OBS would prefer trying to connect
to an IPv4 address even though you had bound it to an
IPv6 interface for example.
2016-11-30 22:11:17 +01:00
jp9000
c5706d726b obs-outputs: Use correct variable for drop priority
There are two variables used for 'priority', the general marked frame
priority, and the drop priority.  They can sometimes be different
because some encoders don't always use the correct frame priority.
2016-11-13 16:29:23 -08:00
Warren Turkal
40a5436549 obs-ffmpeg: Fix a couple printf compiler warnings. 2016-10-30 19:56:08 -07:00
jp9000
108a4aa40e obs-outputs: Add max shutdown timeout (30 seconds)
The maximum shutdown timeout value was added as a setting, but never
actually fully implemented.  This implements it properly, and sets its
default timeout value to 30 seconds.
2016-09-21 21:51:22 -07:00