293 Commits

Author SHA1 Message Date
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
jp9000
50d7cc8ae6 obs-outputs: Allow forced stop even when stopping 2016-09-09 17:39:20 -07:00
Richard Stanway
eca0ca8424
obs-outputs: Prefer IPv4 addresses for RTMP connections 2016-08-15 17:58:01 +02:00
jp9000
34590b4b6a obs-outputs: Allow p-frames to be dropped
Previously, for an unknown reason p-frames were marked as highest
priority along with i-frames (keyframes), which means they could not be
dropped.  This would cause a problem where if for whatever reason
there's too much congestion, data would continually buffer.  This fixes
the issue by dropping p-frames at a separate (higher) threshold than
b-frames.
2016-08-13 16:35:05 -07:00
jp9000
630207d590 obs-outputs: Improve frame drop testing
Measures packet data rate and sleeps to prevent data from going above
the set data rate.  Uncomment the TEST_FRAMEDROPS macro, then set
DROPTEST_MAX_KBPS to the desired kb/s (for example 3000 for 3000
kilobits per second), and then it will limit the data rate to that
specified amount, forcing the thread to sleep to ensure it can only
output the desired data rate.
2016-08-13 01:24:32 -07:00
jp9000
27ac2cf940 obs-outputs: Remove custom version from FMLE string
Causes issues with certain servers that don't parse it properly and only
expect a specific string.

Use the RTMP onMetaData to get the OBS version instead when possible.
2016-08-12 15:47:57 -07:00
Gol-D-Ace
cb036b2713 Update translations from Crowdin 2016-08-08 16:21:48 +02:00
jp9000
4f3fc21a20 obs-outputs: Fix author for net-if.* files
These files were heavily modified but originally written by:
B. Lee <bl4@postpile.net>
2016-07-31 05:45:36 -07:00
jp9000
289ccee447 obs-outputs: Add ability to bind to an IP address for RTMP 2016-07-29 15:47:30 -07:00
jp9000
9ebe5349fa obs-outputs: Add Bind-To-IP wrapper functions
Allows enumerating IP addresses so you can select the adapter/IP from
which to stream from.
2016-07-29 15:47:28 -07:00
Gol-D-Ace
81adb13f59 Update translations from Crowdin 2016-07-06 01:18:27 +02:00
jp9000
d7db0b8b01 (API Change) libobs: Fix output data cutoff on stop
(Note: This commit also modifies obs-ffmpeg and obs-outputs)

API Changed:
obs_output_info::void (*stop)(void *data);

To:
obs_output_info::void (*stop)(void *data, uint64_t ts);

This fixes the long-time design flaw where obs_output_stop and the
output 'stop' callback would just shut down the output without
considering the timing of when obs_output_stop was used, discarding any
possible buffering and causing the output to get cut off at an
unexpected timing.

The 'stop' callback of obs_output_info now takes a timestamp with the
expectation that the output will use that timestamp to stop output data
in accordance to that timing.  obs_output_stop now records the timestamp
at the time that the function is called and calls the 'stop' callback
with that timestamp.  If needed, obs_output_force_stop will still stop
the output immediately without buffering.
2016-06-22 14:10:39 -07:00
jp9000
605590606f obs-outputs: Remove send_remaining_packets
Because output stop timing has been fixed, there is no need to send the
remaining packets in the queue because it now just waits for the stop
timing anyway.
2016-06-20 02:56:33 -07:00
jp9000
e77e87007c obs-outputs: Remove unused variable 2016-05-26 09:10:21 -07:00
Gol-D-Ace
fe56a12867 Update translations from Crowdin 2016-05-14 00:27:59 +02:00
jp9000
b16557371c obs-outputs: Improve error handling when sending headers
There was no error checking when sending headers/metadata, so what would
happen is that if a header/metadata send failed (meaning the socket was
disconnected), it would continue to act as if it was still connected,
and it would block and lock up on the next send/recv call.
2016-04-26 20:14:31 -07:00
Gol-D-Ace
5ed7081213 Update translations from Crowdin 2016-04-23 10:29:21 +02:00
Richard Stanway
c42f666b02
obs-outputs: Fix assign instead of compare on socket address type
Detected by Coverity Scan (CID 92187, 92170)
2016-04-13 02:23:23 +02:00
jp9000
2f2cb138bb obs-outputs: Remove trailing/leading whitespace from key/url 2016-03-24 13:42:54 -07:00
jp9000
69da1151e0 Update translations from Crowdin 2016-03-19 12:08:48 -07:00
yogpstop
4b4ddbb33e obs-outputs: Add USE_SSL option (disabled by default)
Closes jp9000/obs-studio#487
2016-02-07 15:47:18 -08:00
jp9000
77c538bd33 obs-outputs: Disabled OpenSSL deprecated warnings on apple
Apple wants to get people to move over to their own crypto APIs instead
of using OpenSSL, so disable the warning in the files where OpenSSL is
used for the time being.
2016-02-07 15:33:10 -08:00
jp9000
867c58472e obs-outputs: Fix a few warnings in librtmp 2016-02-07 15:33:10 -08:00
dodgepong
ea9db8249b Add latest translations from CrowdIn 2016-01-31 18:28:35 -05:00
jp9000
d510b629c9 obs-outputs: Fix "sometimes uninitialized" warning
Fixes warning (clang):

variable 'added_packet' is used uninitialized whenever 'if' condition is
false [-Wsometimes-uninitialized]
2015-11-18 14:12:54 -08:00
jp9000
f0cf699c50 obs-outputs: Remove stop thread (unnecessary)
Since the RTMP_Close was moved to the send thread (where it should have
been) the stop thread now has no real purpose.
2015-11-18 14:00:28 -08:00
jp9000
f05f0592e0 obs-outputs: Don't allow new data if disconnected 2015-11-18 12:42:14 -08:00
jp9000
6a27da9bd7 obs-outputs: Use atomic load functions 2015-11-18 12:42:14 -08:00
jp9000
ba7b53f330 obs-outputs: Close stream in send thread 2015-11-18 07:49:51 -08:00
jp9000
ee55dafe24 obs-outputs: Atomically update 'active' variable 2015-11-18 07:48:27 -08:00
jp9000
07254d0390 obs-outputs: Call free_packets in init_connect
This may end up being a bit redundant, but it's just to ensure that the
packet buffer is free before connecting.
2015-11-17 07:51:46 -08:00
jp9000
d4df6c191f obs-outputs: Only log packets remaining if above 0 2015-11-17 07:49:05 -08:00
jp9000
226337a6ca obs-outputs: Check for recv error 2015-11-16 13:57:06 -08:00
Gol-D-Ace
2ee1d82860 Add latest translations from Crowdin 2015-11-16 21:04:55 +01:00
jp9000
ea69f9cf61 obs-outputs: Call recv when data received
Not calling recv when data is received will accumulate data in the
internal recveive buffer until it's full, in which case is will stop
acknowledging.  This can lead to unjustified disconnections.
2015-11-11 17:45:02 -08:00
jp9000
a6b69a0704 obs-outputs: Log network interface information (win32) 2015-11-11 16:52:48 -08:00
jp9000
b7f64c7482 obs-outputs: Use atomic bool functions 2015-11-03 15:03:40 -08:00
jp9000
40250a62f0 obs-outputs: Remove unnecessary variable
The 'stopping' variable is superfluous due to the fact that 'stop_event'
accomplishes essentially the same exact thing.
2015-11-02 18:36:09 -08:00
jp9000
730132853a obs-outputs: Join with correct thread on destroy
If there was an attempt to destroy the rtmp-stream output while it was
already connecting and stopping at the same time, it would try to join
with the stop thread rather than with the connect thread.  The connect
thread would then continue past destruction.
2015-11-02 15:53:12 -08:00
jp9000
3dab1ebb0a obs-outputs: Send stop signal if no service assigned
The code assumed that the service was valid when that may not be the
case by the time it gets to the code.
2015-11-02 15:52:05 -08:00
jp9000
247c6526cf obs-outputs: Assign names to RTMP threads 2015-11-02 14:52:43 -08:00
jp9000
e350eb5a4c obs-outputs: Stop in thread to prevent locking UI
Sometimes stopping a connection can lock up due to data that still
remains to be sent, and this would lock up the thread requesting the
stop (typically the UI thread).  So instead of locking up the calling
thread, spawn a new thread specifically for stopping so the calling
thread can continue uninterrupted.  If the user attempts to reconnect,
it will wait for the stop thread to complete in the connect thread
before attempting to connect.
2015-11-02 14:50:34 -08:00
jp9000
a0e112ffd9 obs-outputs: Remove unused thread return variable 2015-11-02 14:02:27 -08:00
jp9000
a2a372c141 obs-outputs: Log remaining packets 2015-11-02 13:55:52 -08:00
jp9000
8756115f67 obs-outputs: Have a timeout for backed up packets
If packets get backed up for too long of a time, just disconnect instead
of trying to output them all.
2015-11-01 15:13:37 -08:00
jp9000
071222029b obs-outputs: Stop packet input if disconnected 2015-11-01 14:57:55 -08:00
jp9000
3b48817a7b obs-outputs: Fix race condition
It's possible that packets would still be coming in while the packets
were being freed.
2015-11-01 14:52:49 -08:00
jp9000
c107181b9f obs-outputs: Stop output after joining send thread
The encoders were stopping before processing was completed, which could
cause the output to access data that's potentially invalidated.
2015-09-17 14:17:41 -07:00
jp9000
6285a47726 (API Change) libobs: Pass type data to get_name callbacks
API changed from:
obs_source_info::get_name(void)
obs_output_info::get_name(void)
obs_encoder_info::get_name(void)
obs_service_info::get_name(void)

API changed to:
obs_source_info::get_name(void *type_data)
obs_output_info::get_name(void *type_data)
obs_encoder_info::get_name(void *type_data)
obs_service_info::get_name(void *type_data)

This allows the type data to be used when getting the name of the
object (useful for plugin wrappers primarily).

NOTE: Though a parameter was added, this is backward-compatible with
older plugins due to calling convention.  The new parameter will simply
be ignored by older plugins, and the stack (if used) will be cleaned up
by the caller.
2015-09-16 09:21:12 -07:00
jp9000
1ca065b0f2 obs-outputs: Use name and version for encoder
My fault; should have realized that this would be better to do.  Uses
"obs-studio" as the name, and includes the version (same format as the
others)
2015-08-14 17:49:21 -07:00