63 Commits

Author SHA1 Message Date
jp9000
ebbe8d1bf9 libobs: Change service max res. to res. list
(This commit also modifies rtmp-services and UI)

Changes the maximum resolution size to a resolution list, and splits the
maximum FPS to its own function.

(Note: ABI has not been modified because the last changes still haven't
been released yet, so it's safe to modify this as long as the changes
haven't been officially released)
2020-11-13 18:22:53 -08:00
jp9000
fb7747c56e libobs: Implement obs_service func to get max bitrates
(This commit also modifies rtmp-services)

Implements obs_service_get_max_bitrate, which allows retrieving the
maximum audio/video bitrates directly rather than being forced to use
the apply method. Makes it a bit easier to get the bitrate values.
2020-11-11 09:42:26 -08:00
jpark37
0cf7af35fe rtmp-services: Add missing int cast 2020-11-04 04:45:07 -08:00
jp9000
000806fe81 rtmp-services: Add specifiable max cx/cy/fps in json 2020-10-30 00:28:44 -07:00
Maya Venkatraman
41f4a0b0b9 UI: Add support for "More Info" link from service
(Jim) Allows the ability to get a link from the service's settings about
a specific service selection the user chooses and display it as a "More
Info" button that the user can click to find out more information about
that particular service.
2020-10-13 13:29:17 -07:00
SCG82
0481873ef9 rtmp-services: Set actual integer value of bframes in services 2020-10-02 04:31:26 -07:00
Toasterapp
80547455ca rtmp-services: Add SHOWROOM 2020-09-08 15:29:03 -07:00
jp9000
af09057395 libobs: Deprecate service multitrack check
This isn't particularly needed, as a service with multiple tracks won't
be using multiple tracks to begin with anyway.  This might change later,
but for now just mark it deprecated.
2020-09-07 13:38:38 -07:00
jp9000
189fc7ab6a obs-outputs: Add support for metadata-based multitrack 2020-08-22 08:27:58 -07:00
dgeibi
238a44333b rtmp-services: Add Nimo TV auto server 2020-07-28 11:55:18 +08:00
Rodney
dc0af42f1b
Merge pull request #3091 from derrod/remove-mixer
UI/CI/rtmp-services: Remove Mixer
2020-07-24 20:17:38 +02:00
derrod
b8f91cc4c3 rtmp-services: Remove Mixer servers and checks 2020-07-22 07:47:12 +02:00
jp9000
ae29ec5239 rtmp-services: Fix memory leak 2020-07-19 22:06:34 -07:00
Jim
0f8472e8a8
Merge pull request #1914 from YouNow/master
rtmp-services: Add YouNow service and implement ingest lookup
2019-11-13 08:41:13 -08:00
Kurt Kartaltepe
d9470770a0 rtmp-services: Type check apply_encoder_settings
This fixes ovewritting hidden "profile" setting in ffmpeg vaapi which is
a number and not a string. It also shouldnt be overwritten as it is
required on some AMD hardware for the encoder to work.
2019-11-06 20:10:19 -08:00
Roman Sivriver
64d90c28c8 rtmp-services: Add YouNow service and implement ingest lookup 2019-10-30 13:16:13 -04:00
Richard Stanway
37d8cb3307
rtmp-services: Remove redundant null checks
The jansson json_ macros already include a null check.
2019-07-21 20:50:22 +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
d7e80f87e7 rtmp-services: Allow seamless service renaming
Allows the ability for services to specify alternate or old names that
they used to have in the json service list so they can safely be renamed
seamlessly and use the proper service settings.  This way, if a user is
using an older service in their configuration, it can still detect which
service it's supposed to be using and apply those service-specific
settings for that user.
2018-12-03 07:41:50 -08:00
jp9000
47d0423384 rtmp-services: Only do URL check for Facebook
Prevents services with special exception services from unintentionally
using the wrong server.  There's no real reason to be doing this on
anything but Facebook at the moment anyway.
2018-08-26 12:26:17 -07:00
jp9000
a69f72654e rtmp-services: Do not check for valid URL if using "auto"
"Auto" is sort of a special use-case for certain services
(Twitch/Mixer), and the code recently added in be8ddc06a would
unintentionally override it.  This would for example cause the "Auto"
setting on Twitch to set the user to use an Asia server unintentionally
because "auto" is not in the json file.
2018-08-14 13:12:39 -07:00
Richard Stanway
8fdbf60228
rtmp-services: Remove unnecessary null check 2018-08-11 02:54:50 +02:00
jp9000
be8ddc06a2 rtmp-services: Ensure set URL exists within server list
If the user had a valid service selected, but the server that the user
originally was using is now (for whatever reason) no longer listed, the
rtmp-common service would still use that server rather than any of the
newer servers, and the user would have to physically go in to their
settings to reconfigure to get it to use that new server.

Instead, make sure that the server the user has selected exists within
the server list, and if it doesn't, use the first server in the list
instead by default.
2018-08-05 18:50:13 -07:00
jp9000
48a5f0e51a rtmp-services: Don't show "service not found" if name empty
Fixes an issue where the log could have "Could not find service" with an
empty service name when opening properties.
2017-10-15 05:26:11 -07:00
jp9000
d768717b8c rtmp-services: Only update Twitch ingests when necessary
(This commit also modifies UI)

Instead of pinging Twitch every time the program starts up, only pings
for new servers when the ingests are actually being used, and when the
UI uses the auto-configuration dialog.

If ingests have not been cached when using the "Auto" server, it will
wait for 3 seconds max to query the Twitch ingest API.  If it takes
longer than 3 seconds or fails, it will defer to SF.  If ingests were
already cached, then it will use the existing cache immediately.
2017-10-09 10:10:59 -07:00
jp9000
9add73f656 rtmp-services: Remove Twtich "Auto" if API down and not cached
Prevents new users from having a poor user experience if the Twitch API
for getting the closest servers is currently down.
2017-08-02 15:13:09 -07:00
jp9000
2b2956ae98 rtmp-services: Add "Auto" server option for Twitch
Automatically selects the server closest to the user based upon the
Twitch ingest API.
2017-08-01 02:50:26 -07:00
jp9000
435e251809 rtmp-services: Add Twitch ingest update API
Updates ingests via Twitch's ingest API.  The servers are ordered by
closest to farthest from the user via the API.  It's probably still good
to keep the services.json Twitch ingests updated in case there are
issues with the Twitch ingest API, but otherwise the ingests will update
from Twitch itself every time the program is opened automatically.
2017-08-01 02:50:26 -07:00
Quinn Damerell
535f4a7fcf rtmp-services: Add Mixer FTL service
Adds "Mixer FTL" service and renames the original service with RTMP
servers to "Mixer RTMP".

Closes jp9000/obs-studio#980
2017-08-01 02:27:34 -07:00
jp9000
d68eff6bf6 rtmp-services: Fix incorrect RTMP output ID 2017-07-17 16:44:42 -07:00
jp9000
6b66630198 rmtp-services: Don't display warning for invalid file ver.
The invalid format version warning for service files is an unnecessary
warning which isn't necessary to display because it'll automatically
fall back to the distributed version over the cached remote version.
2017-07-14 12:44:12 -07:00
jp9000
4d1672719f rtmp-services: Allow services to override bframe count 2017-07-14 12:39:59 -07:00
jp9000
339a0686f6 rtmp-services: Add ability to specify different outputs
Allows the ability for services to specify a different output if needed.

NOTE: This should probably be considered temporary, and services within
this file that use this functionality should probably be moved out of
the file and in to a separate service.
2017-07-14 12:39:20 -07:00
jp9000
13c59ef18c rtmp-services: Preserve settings if service renamed
Due to the recent renaming of hitbox to smashcast, old settings for
hitbox would not be shown in the service UI.  This change preserves the
user's service settings even if the service name has been changed, shows
the setting and marks it as invalid to the user, and prevents the UI
from selecting a value that doesn't match the user's last selection.
2017-05-19 01:19:53 -07:00
jp9000
ba47bcafc8 Revert "rtmp-services: Add ability to specify tune param"
This reverts commit 4b0f22d05a41680c1406efcc4078eac23cf79ca4.

Services should not force tunes.
2016-09-19 17:57:59 -07:00
Andrei Nistor
4b0f22d05a rtmp-services: Add ability to specify tune param
Some services need to set up tune=zerolatency
for low-latency streaming
2016-09-19 07:04:41 -07:00
jp9000
2801cf0f37 rtmp-common: Use "rate_control" to set CBR mode
Instead of using "cbr" to set the rate control mode for encoders (which
is now considered deprecated for all encoders), set "rate_control" to
"CBR".
2016-05-11 13:12:32 -07:00
jp9000
87810bcf1a rtmp-services: Add the ability to specify custom x264 opts
Certain services may request certain x264-specific options (such as
scenecut=0 to prevent additional keyframes from being generated)
2016-04-09 23:34:16 -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
68d2dab6fd rtmp-services: Use cached services.json if present
This will use the services.json file present in the cache, or if it has
the wrong format version or is corrupted for whatever reason, uses the
local version instead.

Also a minor refactor, makes it so that you call the open_services_file
function to get the services array, rather than having to get the file
name each time.
2015-08-19 16:21:58 -07:00
jp9000
b5f1bbdd4c rtmp-services: Add format_version to services.json
The entire services file had to be restructured, but this allows us to
be able to change the format of the json file safely (if ever needed).
2015-08-19 16:19:03 -07:00
jp9000
d08701338f rtmp-services: Add get_int_val hepler function
This is just for accessing a json object.  I should be using obs_data_t
for this instead of json directly, but it doesn't really matter.
2015-08-19 15:46:28 -07:00
jp9000
f6f7388599 rtmp-services: Fix warning
The return value is supposed to be a boolean value; not NULL.
2015-08-16 10:37:40 -07:00
jp9000
1c5a071eb8 rtmp-services: Add "Show all services" option
I made the rather tough call of not showing all services by default; I
didn't want to have to do this, but too many services are asking to be
put in to the program, and any time I add a service in to the list, I
feel uncomfortable because I feel like I'm potentially advertising them,
and/or they're using our program to advertise as well.  Some of these
services are particularly bad at policing illegal/copyrighted content,
host content that I personally find distasteful or incredibly stupid
(what the heck is up with these "vaping" streams?), or are just fairly
terrible websites in general that I just feel uncomfortable with showing
by default.

However, I do not really want to reject anyone either, I want to let
their users be able to use our program with relative ease, but more than
anything I just simple don't want to be seen as "endorsing" some of
these websites (more than others in particular).  I know that a "show
all services" checkbox is probably pretty pointless/superfluous thing to
do, but I feel like it's at the very least a means of saying "hey, I
don't really endorse these guys," or "use at your own risk," or
"warning: this website is incredibly terrible."

Honestly, I couldn't really think of any better solution that would
 a.) still list all services without outright censoring them, and
 b.) prevent us from being seen as "endorsing" all services.

(Although maybe this whole thing feels a bit.. passive aggressive.  I
feel like I'm tipping over someone's garden gnome in the middle of the
night while they're sleeping.  Still, it's something.)

NOTE: This code is backward compatible; i.e., if you previously had a
service selected that's not common but don't have the "show all"
checkbox checked, it'll still show that service for convenience.
2015-08-16 08:08:13 -07:00
jp9000
61d86d938a rtmp-services: Always use CBR for all services
Services almost always recommend this be enabled, and I generally want
to make configuration easier for users; with CBR they don't have to set
things like the CRF value.
2015-08-16 06:43:43 -07:00
jp9000
b03eae57c6 (API Change) Fix "apply service settings" functions
API changed from:
------------------------
EXPORT void obs_service_apply_encoder_settings(obs_service_t *service,
		obs_encoder_t *video_encoder,
		obs_encoder_t *audio_encoder);

void obs_service_info::apply_encoder_settings(void *data
			obs_encoder_t *video_encoder,
			obs_encoder_t *audio_encoder);

To:
------------------------
EXPORT void obs_service_apply_encoder_settings(obs_service_t *service,
		obs_data_t *video_encoder_settings,
		obs_data_t *audio_encoder_settings);

void obs_service_info::apply_encoder_settings(void *data
			obs_data_t *video_encoder_settings,
			obs_data_t *audio_encoder_settings);

These changes make it so that instead of an encoder potentially being
updated more than once with different settings, that these functions
will be called for the specific settings being used, and the settings
will be updated according to what's required by the service.

This fixes that design flaw and ensures that there's no case where
obs_encoder_update is called where the settings might not have
service-specific settings applied.
2015-03-07 16:32:00 -08:00
jp9000
5a4a9befd2 rtmp-services: Add encoder settings callback
Swaps out the old initialize callback code that applied encoder settings
to the new apply_encoder_settings callback
2015-02-10 19:27:37 -08:00
jp9000
84e1f47ced (API Change) Add support for multiple audio mixers
API changed:
--------------------------

void obs_output_set_audio_encoder(
		obs_output_t *output,
		obs_encoder_t *encoder);

obs_encoder_t *obs_output_get_audio_encoder(
		const obs_output_t *output);

obs_encoder_t *obs_audio_encoder_create(
		const char *id,
		const char *name,
		obs_data_t *settings);

Changed to:
--------------------------

/* 'idx' specifies the track index of the output */
void obs_output_set_audio_encoder(
		obs_output_t *output,
		obs_encoder_t *encoder,
		size_t idx);

/* 'idx' specifies the track index of the output */
obs_encoder_t *obs_output_get_audio_encoder(
		const obs_output_t *output,
		size_t idx);

/* 'mixer_idx' specifies the mixer index to capture audio from */
obs_encoder_t *obs_audio_encoder_create(
		const char *id,
		const char *name,
		obs_data_t *settings,
		size_t mixer_idx);

Overview
--------------------------
This feature allows multiple audio mixers to be used at a time.  This
capability was able to be added with surprisingly very little extra
overhead.  Audio will not be mixed unless it's assigned to a specific
mixer, and mixers will not mix unless they have an active mix
connection.

Mostly this will be useful for being able to separate out specific audio
for recording versus streaming, but will also be useful for certain
streaming services that support multiple audio streams via RTMP.

I didn't want to use a variable amount of mixers due to the desire to
reduce heap allocations, so currently I set the limit to 4 simultaneous
mixers; this number can be increased later if needed, but honestly I
feel like it's just the right number to use.

Sources:

Sources can now specify which audio mixers their audio is mixed to; this
can be a single mixer or multiple mixers at a time.  The
obs_source_set_audio_mixers function sets the audio mixer which an audio
source applies to.  For example, 0xF would mean that the source applies
to all four mixers.

Audio Encoders:

Audio encoders now must specify which specific audio mixer they use when
they encode audio data.

Outputs:

Outputs that use encoders can now support multiple audio tracks at once
if they have the OBS_OUTPUT_MULTI_TRACK capability flag set.  This is
mostly only useful for certain types of RTMP transmissions, though may
be useful for file formats that support multiple audio tracks as well
later on.
2015-02-04 16:51:29 -08:00
jp9000
ccfae7e287 rtmp-services: Fix setting of custom x264 profile
Profile was being set as a bool rather than a string, resulting in an
embarrassing situation where the profile was being set to 'true' rather
than the actual profile name.  ..There really needs to be a compiler
warning for using non-bools as bools.  This is one of the reason I
started using !! to change non-bools to bools.
2015-01-07 03:16:02 -08:00
Palana
94a93abb2b (API Change) Pass data to get_properties when possible 2014-10-01 15:39:57 +02:00