libobs: Add func to get supported service codecs

Allows a service to return a list of codecs that are currently supported
master
jp9000 2022-07-23 20:45:44 -07:00 committed by Jim
parent cc242ada58
commit 8a698e863d
8 changed files with 597 additions and 4 deletions

View File

@ -139,6 +139,15 @@ Service Definition Structure
:return: The output type that should be used with this service
.. member:: const char **(*get_supported_video_codecs)(void *data)
(Optional)
:return: A string pointer array of the supported video codecs, should
be stored by the plugin so the caller does not need to free
the data manually (typically best to use strlist_split to
generate this)
General Service Functions
-------------------------
@ -286,6 +295,14 @@ General Service Functions
:param video_encoder_settings: Video encoder settings. Can be *NULL*
:param audio_encoder_settings: Audio encoder settings. Can be *NULL*
---------------------
.. function:: const char **obs_service_get_supported_video_codecs(const obs_service_t *service)
:return: An array of string pointers containing the supported codecs
for the service, terminated with a *NULL* pointer. Does not
need to be freed
.. ---------------------------------------------------------------------------
.. _libobs/obs-service.h: https://github.com/obsproject/obs-studio/blob/master/libobs/obs-service.h

View File

@ -467,3 +467,12 @@ void obs_service_get_max_bitrate(const obs_service_t *service,
service->info.get_max_bitrate(service->context.data,
video_bitrate, audio_bitrate);
}
const char **
obs_service_get_supported_video_codecs(const obs_service_t *service)
{
if (service->info.get_supported_video_codecs)
return service->info.get_supported_video_codecs(
service->context.data);
return NULL;
}

View File

@ -86,6 +86,8 @@ struct obs_service_info {
void (*get_max_bitrate)(void *data, int *video_bitrate,
int *audio_bitrate);
const char **(*get_supported_video_codecs)(void *data);
};
EXPORT void obs_register_service_s(const struct obs_service_info *info,

View File

@ -2474,6 +2474,9 @@ EXPORT void obs_service_get_max_fps(const obs_service_t *service, int *fps);
EXPORT void obs_service_get_max_bitrate(const obs_service_t *service,
int *video_bitrate, int *audio_bitrate);
EXPORT const char **
obs_service_get_supported_video_codecs(const obs_service_t *service);
/* NOTE: This function is temporary and should be removed/replaced at a later
* date. */
EXPORT const char *obs_service_get_output_type(const obs_service_t *service);

View File

@ -1,11 +1,11 @@
{
"$schema": "schema/package-schema.json",
"url": "https://obsproject.com/obs2_update/rtmp-services",
"version": 201,
"version": 202,
"files": [
{
"name": "services.json",
"version": 201
"version": 202
}
]
}

View File

@ -25,6 +25,32 @@
"$ref": "#/definitions/saneUrl",
"description": "Link where a logged-in user can find the 'stream key', presented as a button alongside the stream key field."
},
"supported video codecs": {
"type": "array",
"description": "Video codecs that are supported by the service.",
"items": {
"type": "string",
"description": "Short-form codec names.",
"minLength": 1,
"enum": [
"h264",
"hevc"
]
}
},
"supported audio codecs": {
"type": "array",
"description": "Audio codecs that are supported by the service.",
"items": {
"type": "string",
"description": "Short-form codec names.",
"minLength": 1,
"enum": [
"aac",
"opus"
]
}
},
"servers": {
"type": "array",
"description": "List of servers.",
@ -209,4 +235,4 @@
]
}
}
}
}

View File

@ -6,6 +6,12 @@
"name": "Twitch",
"common": true,
"stream_key_link": "https://dashboard.twitch.tv/settings/stream",
"supported video codecs": [
"h264"
],
"supported audio codecs": [
"aac"
],
"servers": [
{
"name": "Asia: Hong Kong",
@ -204,6 +210,13 @@
"common": false,
"more_info_link": "https://developers.google.com/youtube/v3/live/guides/ingestion-protocol-comparison",
"stream_key_link": "https://www.youtube.com/live_dashboard",
"supported video codecs": [
"h264",
"hevc"
],
"supported audio codecs": [
"aac"
],
"servers": [
{
"name": "Primary YouTube ingest server",
@ -230,6 +243,12 @@
"YouTube - RTMP",
"YouTube - RTMPS (Beta)"
],
"supported video codecs": [
"h264"
],
"supported audio codecs": [
"aac"
],
"servers": [
{
"name": "Primary YouTube ingest server",
@ -257,6 +276,12 @@
{
"name": "Loola.tv",
"common": false,
"supported video codecs": [
"h264"
],
"supported audio codecs": [
"aac"
],
"servers": [
{
"name": "US East: Virginia",
@ -290,6 +315,12 @@
},
{
"name": "Lovecast",
"supported video codecs": [
"h264"
],
"supported audio codecs": [
"aac"
],
"servers": [
{
"name": "Default",
@ -311,6 +342,12 @@
{
"name": "Luzento.com - RTMP",
"stream_key_link": "https://cms.luzento.com/dashboard/stream-key?from=OBS",
"supported video codecs": [
"h264"
],
"supported audio codecs": [
"aac"
],
"servers": [
{
"name": "Primary",
@ -331,6 +368,12 @@
},
{
"name": "VIMM",
"supported video codecs": [
"h264"
],
"supported audio codecs": [
"aac"
],
"servers": [
{
"name": "Europe: Frankfurt",
@ -350,6 +393,12 @@
},
{
"name": "Mobcrush",
"supported video codecs": [
"h264"
],
"supported audio codecs": [
"aac"
],
"servers": [
{
"name": "Primary",
@ -365,6 +414,12 @@
},
{
"name": "Web.TV",
"supported video codecs": [
"h264"
],
"supported audio codecs": [
"aac"
],
"servers": [
{
"name": "Primary",
@ -380,6 +435,12 @@
},
{
"name": "GoodGame.ru",
"supported video codecs": [
"h264"
],
"supported audio codecs": [
"aac"
],
"servers": [
{
"name": "Моscow",
@ -390,6 +451,12 @@
{
"name": "YouStreamer",
"stream_key_link": "https://www.app.youstreamer.com/stream/",
"supported video codecs": [
"h264"
],
"supported audio codecs": [
"aac"
],
"servers": [
{
"name": "Moscow",
@ -399,6 +466,12 @@
},
{
"name": "Vaughn Live / iNSTAGIB",
"supported video codecs": [
"h264"
],
"supported audio codecs": [
"aac"
],
"servers": [
{
"name": "US: Chicago, IL",
@ -441,6 +514,12 @@
},
{
"name": "Breakers.TV",
"supported video codecs": [
"h264"
],
"supported audio codecs": [
"aac"
],
"servers": [
{
"name": "US: Chicago, IL",
@ -485,6 +564,12 @@
"name": "Facebook Live",
"common": true,
"stream_key_link": "https://www.facebook.com/live/producer?ref=OBS",
"supported video codecs": [
"h264"
],
"supported audio codecs": [
"aac"
],
"servers": [
{
"name": "Default",
@ -555,6 +640,12 @@
],
"common": true,
"stream_key_link": "https://restream.io/settings/streaming-setup?from=OBS",
"supported video codecs": [
"h264"
],
"supported audio codecs": [
"aac"
],
"servers": [
{
"name": "Autodetect",
@ -667,6 +758,12 @@
},
{
"name": "Castr.io",
"supported video codecs": [
"h264"
],
"supported audio codecs": [
"aac"
],
"servers": [
{
"name": "US-East (Chicago, IL)",
@ -759,6 +856,12 @@
},
{
"name": "Boomstream",
"supported video codecs": [
"h264"
],
"supported audio codecs": [
"aac"
],
"servers": [
{
"name": "Default",
@ -768,6 +871,12 @@
},
{
"name": "Meridix Live Sports Platform",
"supported video codecs": [
"h264"
],
"supported audio codecs": [
"aac"
],
"servers": [
{
"name": "Primary",
@ -784,6 +893,12 @@
"아프리카TV",
"Afreeca.TV"
],
"supported video codecs": [
"h264"
],
"supported audio codecs": [
"aac"
],
"servers": [
{
"name": "Asia : Korea",
@ -819,6 +934,12 @@
},
{
"name": "CAM4",
"supported video codecs": [
"h264"
],
"supported audio codecs": [
"aac"
],
"servers": [
{
"name": "CAM4",
@ -834,6 +955,12 @@
},
{
"name": "ePlay",
"supported video codecs": [
"h264"
],
"supported audio codecs": [
"aac"
],
"servers": [
{
"name": "ePlay Primary",
@ -849,6 +976,12 @@
},
{
"name": "Picarto",
"supported video codecs": [
"h264"
],
"supported audio codecs": [
"aac"
],
"servers": [
{
"name": "Autoselect closest server",
@ -883,6 +1016,12 @@
},
{
"name": "Livestream",
"supported video codecs": [
"h264"
],
"supported audio codecs": [
"aac"
],
"servers": [
{
"name": "Primary",
@ -892,6 +1031,12 @@
},
{
"name": "Uscreen",
"supported video codecs": [
"h264"
],
"supported audio codecs": [
"aac"
],
"servers": [
{
"name": "Default",
@ -906,6 +1051,12 @@
},
{
"name": "Stripchat",
"supported video codecs": [
"h264"
],
"supported audio codecs": [
"aac"
],
"servers": [
{
"name": "Auto",
@ -923,6 +1074,12 @@
},
{
"name": "CamSoda",
"supported video codecs": [
"h264"
],
"supported audio codecs": [
"aac"
],
"servers": [
{
"name": "North America",
@ -960,6 +1117,12 @@
},
{
"name": "Chaturbate",
"supported video codecs": [
"h264"
],
"supported audio codecs": [
"aac"
],
"servers": [
{
"name": "Global Main Fastest - Recommended",
@ -1039,6 +1202,12 @@
"alt_names": [
"Twitter / Periscope"
],
"supported video codecs": [
"h264"
],
"supported audio codecs": [
"aac"
],
"servers": [
{
"name": "US West: California",
@ -1101,6 +1270,12 @@
"alt_names": [
"Switchboard Live (Joicaster)"
],
"supported video codecs": [
"h264"
],
"supported audio codecs": [
"aac"
],
"servers": [
{
"name": "Global Zone (geo based)",
@ -1168,6 +1343,12 @@
{
"name": "Looch",
"common": false,
"supported video codecs": [
"h264"
],
"supported audio codecs": [
"aac"
],
"servers": [
{
"name": "Primary Looch ingest server",
@ -1183,6 +1364,12 @@
},
{
"name": "Eventials",
"supported video codecs": [
"h264"
],
"supported audio codecs": [
"aac"
],
"servers": [
{
"name": "Default",
@ -1198,6 +1385,12 @@
},
{
"name": "EventLive.pro",
"supported video codecs": [
"h264"
],
"supported audio codecs": [
"aac"
],
"servers": [
{
"name": "Default",
@ -1217,6 +1410,12 @@
},
{
"name": "Lahzenegar - StreamG | لحظه‌نگار - استریمجی",
"supported video codecs": [
"h264"
],
"supported audio codecs": [
"aac"
],
"servers": [
{
"name": "Primary",
@ -1236,6 +1435,12 @@
},
{
"name": "MyLive",
"supported video codecs": [
"h264"
],
"supported audio codecs": [
"aac"
],
"servers": [
{
"name": "Default",
@ -1255,6 +1460,12 @@
"Madcat"
],
"stream_key_link": "https://studio.trovo.live/mychannel/stream",
"supported video codecs": [
"h264"
],
"supported audio codecs": [
"aac"
],
"servers": [
{
"name": "Default",
@ -1270,6 +1481,12 @@
},
{
"name": "Mixcloud",
"supported video codecs": [
"h264"
],
"supported audio codecs": [
"aac"
],
"servers": [
{
"name": "Default",
@ -1294,6 +1511,12 @@
"alt_names": [
"SermonAudio.com"
],
"supported video codecs": [
"h264"
],
"supported audio codecs": [
"aac"
],
"servers": [
{
"name": "Primary",
@ -1307,6 +1530,12 @@
},
{
"name": "Vimeo",
"supported video codecs": [
"h264"
],
"supported audio codecs": [
"aac"
],
"servers": [
{
"name": "Default",
@ -1316,6 +1545,12 @@
},
{
"name": "Aparat",
"supported video codecs": [
"h264"
],
"supported audio codecs": [
"aac"
],
"servers": [
{
"name": "Default",
@ -1331,6 +1566,12 @@
},
{
"name": "KakaoTV",
"supported video codecs": [
"h264"
],
"supported audio codecs": [
"aac"
],
"servers": [
{
"name": "Default",
@ -1344,6 +1585,12 @@
},
{
"name": "Piczel.tv",
"supported video codecs": [
"h264"
],
"supported audio codecs": [
"aac"
],
"servers": [
{
"name": "Default",
@ -1359,6 +1606,12 @@
},
{
"name": "STAGE TEN",
"supported video codecs": [
"h264"
],
"supported audio codecs": [
"aac"
],
"servers": [
{
"name": "STAGE TEN",
@ -1374,6 +1627,12 @@
},
{
"name": "DLive",
"supported video codecs": [
"h264"
],
"supported audio codecs": [
"aac"
],
"servers": [
{
"name": "Default",
@ -1388,6 +1647,12 @@
},
{
"name": "Lightcast.com",
"supported video codecs": [
"h264"
],
"supported audio codecs": [
"aac"
],
"servers": [
{
"name": "North America / East",
@ -1426,6 +1691,12 @@
},
{
"name": "Bongacams",
"supported video codecs": [
"h264"
],
"supported audio codecs": [
"aac"
],
"servers": [
{
"name": "Automatic / Default",
@ -1454,6 +1725,12 @@
},
{
"name": "Chathostess",
"supported video codecs": [
"h264"
],
"supported audio codecs": [
"aac"
],
"servers": [
{
"name": "Chathostess - Backup",
@ -1468,6 +1745,12 @@
},
{
"name": "OnlyFans.com",
"supported video codecs": [
"h264"
],
"supported audio codecs": [
"aac"
],
"servers": [
{
"name": "USA",
@ -1490,6 +1773,12 @@
{
"name": "YouNow",
"common": false,
"supported video codecs": [
"h264"
],
"supported audio codecs": [
"opus"
],
"servers": [
{
"name": "younow.com",
@ -1508,6 +1797,12 @@
{
"name": "Steam",
"common": false,
"supported video codecs": [
"h264"
],
"supported audio codecs": [
"aac"
],
"servers": [
{
"name": "Default",
@ -1523,6 +1818,12 @@
},
{
"name": "Konduit.live",
"supported video codecs": [
"h264"
],
"supported audio codecs": [
"aac"
],
"servers": [
{
"name": "Default",
@ -1536,6 +1837,12 @@
},
{
"name": "LOCO",
"supported video codecs": [
"h264"
],
"supported audio codecs": [
"aac"
],
"servers": [
{
"name": "Default",
@ -1548,6 +1855,12 @@
},
{
"name": "niconico, premium member (ニコニコ生放送 プレミアム会員)",
"supported video codecs": [
"h264"
],
"supported audio codecs": [
"aac"
],
"servers": [
{
"name": "Default",
@ -1564,6 +1877,12 @@
},
{
"name": "niconico, free member (ニコニコ生放送 一般会員)",
"supported video codecs": [
"h264"
],
"supported audio codecs": [
"aac"
],
"servers": [
{
"name": "Default",
@ -1580,6 +1899,12 @@
},
{
"name": "WASD.TV",
"supported video codecs": [
"h264"
],
"supported audio codecs": [
"aac"
],
"servers": [
{
"name": "Automatic",
@ -1606,6 +1931,12 @@
},
{
"name": "Nimo TV",
"supported video codecs": [
"h264"
],
"supported audio codecs": [
"aac"
],
"servers": [
{
"name": "Global:1",
@ -1628,6 +1959,12 @@
},
{
"name": "XLoveCam.com",
"supported video codecs": [
"h264"
],
"supported audio codecs": [
"aac"
],
"servers": [
{
"name": "Europe(main)",
@ -1668,6 +2005,12 @@
},
{
"name": "AngelThump",
"supported video codecs": [
"h264"
],
"supported audio codecs": [
"aac"
],
"servers": [
{
"name": "Auto",
@ -1715,6 +2058,12 @@
},
{
"name": "api.video",
"supported video codecs": [
"h264"
],
"supported audio codecs": [
"aac"
],
"servers": [
{
"name": "Default",
@ -1729,6 +2078,12 @@
},
{
"name": "SHOWROOM",
"supported video codecs": [
"h264"
],
"supported audio codecs": [
"aac"
],
"servers": [
{
"name": "Default",
@ -1745,6 +2100,12 @@
},
{
"name": "Mux",
"supported video codecs": [
"h264"
],
"supported audio codecs": [
"aac"
],
"servers": [
{
"name": "Global (RTMPS)",
@ -1763,6 +2124,12 @@
},
{
"name": "Viloud",
"supported video codecs": [
"h264"
],
"supported audio codecs": [
"aac"
],
"servers": [
{
"name": "Default",
@ -1777,6 +2144,12 @@
},
{
"name": "MyFreeCams",
"supported video codecs": [
"h264"
],
"supported audio codecs": [
"aac"
],
"servers": [
{
"name": "Automatic",
@ -1822,6 +2195,12 @@
},
{
"name": "PolyStreamer.com",
"supported video codecs": [
"h264"
],
"supported audio codecs": [
"aac"
],
"servers": [
{
"name": "Auto-select closest server",
@ -1863,6 +2242,12 @@
{
"name": "Glimesh",
"stream_key_link": "https://glimesh.tv/users/settings/stream",
"supported video codecs": [
"h264"
],
"supported audio codecs": [
"opus"
],
"servers": [
{
"name": "North America - Chicago, United States",
@ -1913,6 +2298,12 @@
{
"name": "OPENREC.tv - Premium member (プレミアム会員)",
"stream_key_link": "https://www.openrec.tv/login?keep_login=true&url=https://www.openrec.tv/dashboard/live?from=obs",
"supported video codecs": [
"h264"
],
"supported audio codecs": [
"aac"
],
"servers": [
{
"name": "Default",
@ -1929,6 +2320,12 @@
"name": "nanoStream Cloud / bintu",
"more_info_link": "https://www.nanocosmos.de/obs",
"stream_key_link": "https://bintu-cloud-frontend.nanocosmos.de/organisation",
"supported video codecs": [
"h264"
],
"supported audio codecs": [
"aac"
],
"servers": [
{
"name": "bintu-stream global ingest (rtmp)",
@ -1998,6 +2395,12 @@
},
{
"name": "Dacast",
"supported video codecs": [
"h264"
],
"supported audio codecs": [
"aac"
],
"servers": [
{
"name": "Default",
@ -2014,6 +2417,12 @@
{
"name": "Brime Live",
"stream_key_link": "https://brime.tv/studio",
"supported video codecs": [
"h264"
],
"supported audio codecs": [
"aac"
],
"servers": [
{
"name": "North America - Ashburn, VA",
@ -2041,6 +2450,12 @@
"alt_names": [
"Bilibili Live"
],
"supported video codecs": [
"h264"
],
"supported audio codecs": [
"aac"
],
"servers": [
{
"name": "Default | 默认",
@ -2051,6 +2466,12 @@
{
"name": "Volume.com",
"stream_key_link": "https://volume.com/b?show_key=1&webrtc=0",
"supported video codecs": [
"h264"
],
"supported audio codecs": [
"aac"
],
"servers": [
{
"name": "Default - Recommended",
@ -2074,6 +2495,12 @@
{
"name": "BoxCast",
"stream_key_link": "https://dashboard.boxcast.com/#/sources",
"supported video codecs": [
"h264"
],
"supported audio codecs": [
"aac"
],
"servers": [
{
"name": "BoxCast",
@ -2083,6 +2510,12 @@
},
{
"name": "Disciple Media",
"supported video codecs": [
"h264"
],
"supported audio codecs": [
"aac"
],
"servers": [
{
"name": "Default",
@ -2092,6 +2525,12 @@
},
{
"name": "Jio Games",
"supported video codecs": [
"h264"
],
"supported audio codecs": [
"aac"
],
"servers": [
{
"name": "Primary",
@ -2111,6 +2550,12 @@
{
"name": "Kuaishou Live",
"stream_key_link": "https://studio.kuaishou.com/live/list",
"supported video codecs": [
"h264"
],
"supported audio codecs": [
"aac"
],
"servers": [
{
"name": "Default",
@ -2124,6 +2569,12 @@
},
{
"name": "Utreon",
"supported video codecs": [
"h264"
],
"supported audio codecs": [
"aac"
],
"servers": [
{
"name": "Default",
@ -2138,6 +2589,12 @@
},
{
"name": "Autistici.org Live",
"supported video codecs": [
"h264"
],
"supported audio codecs": [
"aac"
],
"servers": [
{
"name": "Default",
@ -2153,6 +2610,12 @@
{
"name": "PhoneLiveStreaming",
"stream_key_link": "https://app.phonelivestreaming.com/media/rtmp",
"supported video codecs": [
"h264"
],
"supported audio codecs": [
"aac"
],
"servers": [
{
"name": "PhoneLiveStreaming",
@ -2167,6 +2630,12 @@
},
{
"name": "ManyVids",
"supported video codecs": [
"h264"
],
"supported audio codecs": [
"aac"
],
"servers": [
{
"name": "Default",
@ -2199,6 +2668,12 @@
"name": "Fantasy.Club",
"stream_key_link": "https://fantasy.club/app/create-content/stream-now",
"more_info_link": "https://help.fantasy.club/",
"supported video codecs": [
"h264"
],
"supported audio codecs": [
"aac"
],
"servers": [
{
"name": "US: East",
@ -2262,6 +2737,12 @@
{
"name": "Shareplay",
"more_info_link": "https://shareplay.tv",
"supported video codecs": [
"h264"
],
"supported audio codecs": [
"aac"
],
"servers": [
{
"name": "Default",
@ -2326,6 +2807,12 @@
},
{
"name": "Sympla",
"supported video codecs": [
"h264"
],
"supported audio codecs": [
"aac"
],
"servers": [
{
"name": "Sympla RTMP",

View File

@ -21,6 +21,8 @@ struct rtmp_common {
size_t supported_resolutions_count;
int max_fps;
char **video_codecs;
bool supports_additional_audio_track;
};
@ -113,17 +115,19 @@ static void rtmp_common_update(void *data, obs_data_t *settings)
{
struct rtmp_common *service = data;
bfree(service->supported_resolutions);
bfree(service->video_codecs);
bfree(service->service);
bfree(service->server);
bfree(service->output);
bfree(service->key);
bfree(service->supported_resolutions);
service->service = bstrdup(obs_data_get_string(settings, "service"));
service->server = bstrdup(obs_data_get_string(settings, "server"));
service->key = bstrdup(obs_data_get_string(settings, "key"));
service->supports_additional_audio_track = false;
service->output = NULL;
service->video_codecs = NULL;
service->supported_resolutions = NULL;
service->supported_resolutions_count = 0;
service->max_fps = 0;
@ -160,6 +164,7 @@ static void rtmp_common_destroy(void *data)
struct rtmp_common *service = data;
bfree(service->supported_resolutions);
bfree(service->video_codecs);
bfree(service->service);
bfree(service->server);
bfree(service->output);
@ -850,6 +855,49 @@ fail:
json_decref(root);
}
static const char **rtmp_common_get_supported_video_codecs(void *data)
{
struct rtmp_common *service = data;
if (service->video_codecs)
return service->video_codecs;
struct dstr codecs = {0};
json_t *root = open_services_file();
if (!root)
return NULL;
json_t *json_service = find_service(root, service->service, NULL);
if (!json_service) {
goto fail;
}
json_t *json_video_codecs =
json_object_get(json_service, "supported video codecs");
if (!json_is_array(json_video_codecs)) {
goto fail;
}
size_t index;
json_t *item;
json_array_foreach (json_video_codecs, index, item) {
char codec[16];
snprintf(codec, sizeof(codec), "%s", json_string_value(item));
if (codecs.len)
dstr_cat(&codecs, ";");
dstr_cat(&codecs, codec);
}
service->video_codecs = strlist_split(codecs.array, ';', false);
dstr_free(&codecs);
fail:
json_decref(root);
return service->video_codecs;
}
static const char *rtmp_common_username(void *data)
{
struct rtmp_common *service = data;
@ -892,4 +940,5 @@ struct obs_service_info rtmp_common_service = {
.get_supported_resolutions = rtmp_common_get_supported_resolutions,
.get_max_fps = rtmp_common_get_max_fps,
.get_max_bitrate = rtmp_common_get_max_bitrate,
.get_supported_video_codecs = rtmp_common_get_supported_video_codecs,
};