diff --git a/build/data/.gitignore b/build/data/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..0521c5fb4caee50dfa398c7973674757a785d3de --- /dev/null +++ b/build/data/.gitignore @@ -0,0 +1 @@ +!*.json diff --git a/build/data/obs-plugins/rtmp-services/services.json b/build/data/obs-plugins/rtmp-services/services.json new file mode 100644 index 0000000000000000000000000000000000000000..7786d60462811afc1c50ae860ecdebab4562074b --- /dev/null +++ b/build/data/obs-plugins/rtmp-services/services.json @@ -0,0 +1,102 @@ +{ + "Twitch / Justin.tv": { + "servers": { + "US West: San Francisco, CA" : "rtmp://live.justin.tv/app", + "Asia: Singapore" : "rtmp://live-sin-backup.justin.tv/app", + "EU: Amsterdam, NL" : "rtmp://live-ams.justin.tv/app", + "EU: Frankfurt, DE" : "rtmp://live-fra.justin.tv/app", + "EU: London, UK" : "rtmp://live-lhr.justin.tv/app", + "EU: Paris, FR" : "rtmp://live-cdg.justin.tv/app", + "EU: Prague, CZ" : "rtmp://live-prg.justin.tv/app", + "EU: Stockholm, SE" : "rtmp://live-arn.justin.tv/app", + "US Central: Dallas, TX" : "rtmp://live-dfw.justin.tv/app", + "US East: Ashburn, VA" : "rtmp://live-iad.justin.tv/app", + "US East: Miami, FL" : "rtmp://live-mia.justin.tv/app", + "US East: New York, NY" : "rtmp://live-jfk.justin.tv/app", + "US Midwest: Chicago, IL" : "rtmp://live-ord.justin.tv/app", + "US West: Los Angeles, CA" : "rtmp://live-lax.justin.tv/app" + }, + "recommended": { + "keyint" : 2, + "cbr" : true, + "profile" : "main", + "max video bitrate" : 3500, + "max audio bitrate" : 160 + } + }, + "Youtube": { + "servers": { + "Primary Youtube ingest server" : "rtmp://a.rtmp.youtube.com/live2", + "Backup Youtube ingest server" : "rtmp://b.rtmp.youtube.com/live2?backup=1" + }, + "recommended": { + "keyint" : 2, + "cbr" : true, + "profile" : "main", + "max video bitrate" : 3500, + "max audio bitrate" : 160 + } + }, + "hitbox.tv": { + "servers": { + "Default" : "rtmp://live.hitbox.tv/push", + "EU-East" : "rtmp://live.vie.hitbox.tv/push", + "EU-Central" : "rtmp://live.nbg.hitbox.tv/push", + "EU-West" : "rtmp://live.fra.hitbox.tv/push", + "EU-North" : "rtmp://live.ams.hitbox.tv/push", + "US-East" : "rtmp://live.vgn.hitbox.tv/push", + "US-West" : "rtmp://live.lax.hitbox.tv/push", + "South America" : "rtmp://live.gru.hitbox.tv/push", + "Asia" : "rtmp://live.lax.hitbox.tv/push" + }, + "recommended": { + "keyint" : 2, + "cbr" : true, + "profile" : "main", + "max video bitrate" : 3500, + "max audio bitrate" : 160 + } + }, + "Vaughn Live / iNSTAGIB.tv": { + "servers": { + "US: Primary" : "rtmp://live.vaughnsoft.net:443/live", + "US: Virginia, USA" : "rtmp://live-iad.vaughnsoft.net:443/live", + "US: Chicago, IL" : "rtmp://live-ord.vaughnsoft.net:443/live", + "EU: Frankfurt, Germany" : "rtmp://live-de.vaughnsoft.net:443/live" + } + }, + "DailyMotion": { + "servers": { + "Primary" : "rtmp://publish.dailymotion.com/publish-dm" + } + }, + "connectcast.tv": { + "servers": { + "Default" : "rtmp://stream.connectcast.tv/live" + } + }, + "iNSTAGIB.tv": { + "servers": { + "US Chicago (Primary)" : "rtmp://live.instagib.tv:443/live" + } + }, + "GoodGame.ru": { + "servers": { + "Moscow M9" : "rtmp://stream.goodgame.ru:1940/live", + "Moscow M10" : "rtmp://stream2.goodgame.ru:1940/live", + "Saint-Petersburg" : "rtmp://spb1.goodgame.ru:1940/live" + } + }, + "CyberGame.TV": { + "servers": { + "RU Origin" : "rtmp://st.cybergame.tv:1953/live", + "RU Premium" : "rtmp://premium.cybergame.tv:1953/premium" + } + }, + "CashPlay.tv": { + "servers": { + "Primary, UK" : "rtmp://live.cashplay.tv/live", + "Low Priority, DE" : "rtmp://de.live.cashplay.tv/live" + } + } +} diff --git a/plugins/CMakeLists.txt b/plugins/CMakeLists.txt index b6942e58e161b8a1bb4553728d70cd91c1cc9950..37834fc49f03a9874a3e8c3ca771d2b2279b54a4 100644 --- a/plugins/CMakeLists.txt +++ b/plugins/CMakeLists.txt @@ -14,3 +14,4 @@ endif() add_subdirectory(obs-x264) add_subdirectory(obs-ffmpeg) add_subdirectory(obs-outputs) +add_subdirectory(rtmp-services) diff --git a/plugins/rtmp-services/CMakeLists.txt b/plugins/rtmp-services/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..f566dae6c070dc1f9ca94d9236ae56da04db496f --- /dev/null +++ b/plugins/rtmp-services/CMakeLists.txt @@ -0,0 +1,15 @@ +project(rtmp-services) + +set(rtmp-services_SOURCES + rtmp-common.c + rtmp-custom.c + rtmp-services-main.c) + +add_library(rtmp-services MODULE + ${rtmp-services_SOURCES}) +target_link_libraries(rtmp-services + libobs + jansson) + +install_obs_plugin(rtmp-services) +install_obs_plugin_data(rtmp-services ../../build/data/obs-plugins/rtmp-services) diff --git a/plugins/rtmp-services/rtmp-common.c b/plugins/rtmp-services/rtmp-common.c new file mode 100644 index 0000000000000000000000000000000000000000..25b500bff93280fc8a9438ee803563eb04c2c2da --- /dev/null +++ b/plugins/rtmp-services/rtmp-common.c @@ -0,0 +1,201 @@ +#include +#include +#include + +struct rtmp_common { + char *service; + char *server; + char *key; +}; + +static const char *rtmp_common_getname(const char *locale) +{ + UNUSED_PARAMETER(locale); + + /* TODO: locale */ + return "Other Streaming Services"; +} + +static void rtmp_common_update(void *data, obs_data_t settings) +{ + struct rtmp_common *service = data; + + bfree(service->service); + bfree(service->server); + bfree(service->key); + + service->service = bstrdup(obs_data_getstring(settings, "service")); + service->server = bstrdup(obs_data_getstring(settings, "server")); + service->key = bstrdup(obs_data_getstring(settings, "key")); +} + +static void rtmp_common_destroy(void *data) +{ + struct rtmp_common *service = data; + + bfree(service->service); + bfree(service->server); + bfree(service->key); + bfree(service); +} + +static void *rtmp_common_create(obs_data_t settings, obs_service_t service) +{ + struct rtmp_common *data = bzalloc(sizeof(struct rtmp_common)); + rtmp_common_update(data, settings); + + UNUSED_PARAMETER(service); + return data; +} + +static void add_service(obs_property_t list, const char *name, + json_t *service) +{ + json_t *servers; + + if (!json_is_object(service)) { + blog(LOG_WARNING, "rtmp-common.c: [add_service] service " + "'%s' is not an object", name); + return; + } + + servers = json_object_get(service, "servers"); + if (!servers) { + blog(LOG_WARNING, "rtmp-common.c: [add_service] service " + "'%s' has no servers", name); + return; + } + + obs_property_list_add_string(list, name, name); +} + +static void add_services(obs_property_t list, const char *file, json_t *root) +{ + json_t *service; + const char *name; + + if (!json_is_object(root)) { + blog(LOG_WARNING, "rtmp-common.c: [add_services] JSON file " + "'%s' root is not an object", file); + return; + } + + json_object_foreach (root, name, service) { + add_service(list, name, service); + } +} + +static json_t *build_service_list(obs_property_t list, const char *file) +{ + char *file_data = os_quick_read_utf8_file(file); + json_error_t error; + json_t *root; + + if (!file_data) + return NULL; + + root = json_loads(file_data, JSON_REJECT_DUPLICATES, &error); + bfree(file_data); + + if (!root) { + blog(LOG_WARNING, "rtmp-common.c: [build_service_list] " + "Error reading JSON file '%s' (%d): %s", + file, error.line, error.text); + return NULL; + } + + add_services(list, file, root); + return root; +} + +static void properties_data_destroy(void *data) +{ + json_t *root = data; + if (root) + json_decref(root); +} + +static void fill_servers(obs_property_t servers, json_t *service, + const char *name) +{ + json_t *server; + const char *server_name; + + obs_property_list_clear(servers); + + if (!json_is_object(service)) { + blog(LOG_WARNING, "rtmp-common.c: [fill_servers] " + "Servers for service '%s' not a valid object", + name); + return; + } + + json_object_foreach (service, server_name, server) { + if (json_is_string(server)) { + obs_property_list_add_string(servers, server_name, + json_string_value(server)); + } + } +} + +static bool service_selected(obs_properties_t props, obs_property_t p, + obs_data_t settings) +{ + const char *name = obs_data_getstring(settings, "service"); + json_t *root = obs_properties_get_param(props); + json_t *service = json_object_get(root, name); + + fill_servers(obs_properties_get(props, "server"), service, name); + + UNUSED_PARAMETER(p); + return true; +} + +static obs_properties_t rtmp_common_properties(const char *locale) +{ + obs_properties_t ppts = obs_properties_create(locale); + obs_property_t list; + char *file; + + /* TODO: locale */ + + list = obs_properties_add_list(ppts, "service", "Service", + OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_STRING); + + file = obs_find_plugin_file("rtmp-services/services.json"); + if (file) { + json_t *root = build_service_list(list, file); + obs_properties_set_param(ppts, root, properties_data_destroy); + obs_property_set_modified_callback(list, service_selected); + bfree(file); + } + + obs_properties_add_list(ppts, "server", "Server", + OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_STRING); + + obs_properties_add_text(ppts, "key", "Stream Key", OBS_TEXT_PASSWORD); + return ppts; +} + +static const char *rtmp_common_url(void *data) +{ + struct rtmp_common *service = data; + return service->server; +} + +static const char *rtmp_common_key(void *data) +{ + struct rtmp_common *service = data; + return service->key; +} + +struct obs_service_info rtmp_common_service = { + .id = "rtmp_common", + .getname = rtmp_common_getname, + .create = rtmp_common_create, + .destroy = rtmp_common_destroy, + .update = rtmp_common_update, + .properties = rtmp_common_properties, + .get_url = rtmp_common_url, + .get_key = rtmp_common_key +}; diff --git a/plugins/rtmp-services/rtmp-custom.c b/plugins/rtmp-services/rtmp-custom.c new file mode 100644 index 0000000000000000000000000000000000000000..bb09a10f8fb06bb8c8dd00538b44d2e084dd79a3 --- /dev/null +++ b/plugins/rtmp-services/rtmp-custom.c @@ -0,0 +1,76 @@ +#include + +struct rtmp_custom { + char *server, *key; +}; + +static const char *rtmp_custom_name(const char *locale) +{ + UNUSED_PARAMETER(locale); + + /* TODO: locale */ + return "Custom Streaming Server"; +} + +static void rtmp_custom_update(void *data, obs_data_t settings) +{ + struct rtmp_custom *service = data; + + bfree(service->server); + bfree(service->key); + + service->server = bstrdup(obs_data_getstring(settings, "server")); + service->key = bstrdup(obs_data_getstring(settings, "key")); +} + +static void rtmp_custom_destroy(void *data) +{ + struct rtmp_custom *service = data; + + bfree(service->server); + bfree(service->key); + bfree(service); +} + +static void *rtmp_custom_create(obs_data_t settings, obs_service_t service) +{ + struct rtmp_custom *data = bzalloc(sizeof(struct rtmp_custom)); + rtmp_custom_update(data, settings); + + UNUSED_PARAMETER(service); + return data; +} + +static obs_properties_t rtmp_custom_properties(const char *locale) +{ + obs_properties_t ppts = obs_properties_create(locale); + + /* TODO: locale */ + + obs_properties_add_text(ppts, "server", "URL", OBS_TEXT_DEFAULT); + obs_properties_add_text(ppts, "key", "Stream Key", OBS_TEXT_PASSWORD); + return ppts; +} + +static const char *rtmp_custom_url(void *data) +{ + struct rtmp_custom *service = data; + return service->server; +} + +static const char *rtmp_custom_key(void *data) +{ + struct rtmp_custom *service = data; + return service->key; +} + +struct obs_service_info rtmp_custom_service = { + .id = "rtmp_custom", + .getname = rtmp_custom_name, + .create = rtmp_custom_create, + .destroy = rtmp_custom_destroy, + .update = rtmp_custom_update, + .properties = rtmp_custom_properties, + .get_url = rtmp_custom_url, + .get_key = rtmp_custom_key +}; diff --git a/plugins/rtmp-services/rtmp-services-main.c b/plugins/rtmp-services/rtmp-services-main.c new file mode 100644 index 0000000000000000000000000000000000000000..bc79bfba01adeb46b6b7090797881fd19c8accfa --- /dev/null +++ b/plugins/rtmp-services/rtmp-services-main.c @@ -0,0 +1,13 @@ +#include + +extern struct obs_service_info rtmp_common_service; +extern struct obs_service_info rtmp_custom_service; + +bool obs_module_load(uint32_t libobs_ver) +{ + obs_register_service(&rtmp_common_service); + obs_register_service(&rtmp_custom_service); + + UNUSED_PARAMETER(libobs_ver); + return true; +} diff --git a/plugins/win-capture/window-capture.c b/plugins/win-capture/window-capture.c index 22e66e73a189f9fdf1a41ebfbd518841db4ba76a..39e18ec697627e1f9b7a8e9403b967eb696c894d 100644 --- a/plugins/win-capture/window-capture.c +++ b/plugins/win-capture/window-capture.c @@ -60,7 +60,7 @@ static void update_settings(struct window_capture *wc, obs_data_t s) if (window) { char **strlist = strlist_split(window, ':', true); - if (strlist[0] && strlist[1] && strlist[2]) { + if (strlist && strlist[0] && strlist[1] && strlist[2]) { wc->title = decode_str(strlist[0]); wc->class = decode_str(strlist[1]); wc->executable = decode_str(strlist[2]); diff --git a/vs/2013/OBS.sln b/vs/2013/OBS.sln index 7b53ac348b7c5cc1c13b3189539a0179792c81a2..ae81830c5721f2724f6408ee1c041e4ba42ecb0e 100644 --- a/vs/2013/OBS.sln +++ b/vs/2013/OBS.sln @@ -5,6 +5,7 @@ VisualStudioVersion = 12.0.21005.1 MinimumVisualStudioVersion = 10.0.40219.1 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libobs", "libobs\libobs.vcxproj", "{6F1AC2AE-6424-401A-AF9F-A771E6BEE026}" ProjectSection(ProjectDependencies) = postProject + {C7549517-7FAB-46A5-BB21-228984573265} = {C7549517-7FAB-46A5-BB21-228984573265} {E11367B7-20CC-4741-B8E0-C20E85302A40} = {E11367B7-20CC-4741-B8E0-C20E85302A40} EndProjectSection EndProject @@ -31,8 +32,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libobs-opengl", "libobs-ope {6F1AC2AE-6424-401A-AF9F-A771E6BEE026} = {6F1AC2AE-6424-401A-AF9F-A771E6BEE026} EndProjectSection EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "jansson", "..\..\deps\jansson\win32\vs2010\jansson.vcxproj", "{76226D20-1972-4789-A595-EDACC7A76DC3}" -EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "obs-ffmpeg", "obs-ffmpeg\obs-ffmpeg.vcxproj", "{36970254-B1E5-4BE6-A561-301B6E7CDCE3}" ProjectSection(ProjectDependencies) = postProject {6F1AC2AE-6424-401A-AF9F-A771E6BEE026} = {6F1AC2AE-6424-401A-AF9F-A771E6BEE026} @@ -65,6 +64,14 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "obs-outputs", "obs-outputs\ EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "glad", "glad\glad.vcxproj", "{B9F9CE2C-FAC8-4528-AAFF-0BC3753C7BDA}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "jansson", "jansson\jansson.vcxproj", "{C7549517-7FAB-46A5-BB21-228984573265}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "rtmp-services", "rtmp-services\rtmp-services.vcxproj", "{15139C6C-8DD7-42A5-B907-7A1A9862FA39}" + ProjectSection(ProjectDependencies) = postProject + {C7549517-7FAB-46A5-BB21-228984573265} = {C7549517-7FAB-46A5-BB21-228984573265} + {6F1AC2AE-6424-401A-AF9F-A771E6BEE026} = {6F1AC2AE-6424-401A-AF9F-A771E6BEE026} + EndProjectSection +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Mixed Platforms = Debug|Mixed Platforms @@ -147,18 +154,6 @@ Global {B6EAE19B-79BF-4F7C-9E66-976D14B9DC6C}.Release|Win32.Build.0 = Release|Win32 {B6EAE19B-79BF-4F7C-9E66-976D14B9DC6C}.Release|x64.ActiveCfg = Release|x64 {B6EAE19B-79BF-4F7C-9E66-976D14B9DC6C}.Release|x64.Build.0 = Release|x64 - {76226D20-1972-4789-A595-EDACC7A76DC3}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {76226D20-1972-4789-A595-EDACC7A76DC3}.Debug|Mixed Platforms.Build.0 = Debug|Win32 - {76226D20-1972-4789-A595-EDACC7A76DC3}.Debug|Win32.ActiveCfg = Debug|Win32 - {76226D20-1972-4789-A595-EDACC7A76DC3}.Debug|Win32.Build.0 = Debug|Win32 - {76226D20-1972-4789-A595-EDACC7A76DC3}.Debug|x64.ActiveCfg = Debug|Win32 - {76226D20-1972-4789-A595-EDACC7A76DC3}.Debug|x64.Build.0 = Debug|Win32 - {76226D20-1972-4789-A595-EDACC7A76DC3}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {76226D20-1972-4789-A595-EDACC7A76DC3}.Release|Mixed Platforms.Build.0 = Release|Win32 - {76226D20-1972-4789-A595-EDACC7A76DC3}.Release|Win32.ActiveCfg = Release|Win32 - {76226D20-1972-4789-A595-EDACC7A76DC3}.Release|Win32.Build.0 = Release|Win32 - {76226D20-1972-4789-A595-EDACC7A76DC3}.Release|x64.ActiveCfg = Release|Win32 - {76226D20-1972-4789-A595-EDACC7A76DC3}.Release|x64.Build.0 = Release|Win32 {36970254-B1E5-4BE6-A561-301B6E7CDCE3}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 {36970254-B1E5-4BE6-A561-301B6E7CDCE3}.Debug|Mixed Platforms.Build.0 = Debug|Win32 {36970254-B1E5-4BE6-A561-301B6E7CDCE3}.Debug|Win32.ActiveCfg = Debug|Win32 @@ -243,6 +238,30 @@ Global {B9F9CE2C-FAC8-4528-AAFF-0BC3753C7BDA}.Release|Win32.Build.0 = Release|Win32 {B9F9CE2C-FAC8-4528-AAFF-0BC3753C7BDA}.Release|x64.ActiveCfg = Release|x64 {B9F9CE2C-FAC8-4528-AAFF-0BC3753C7BDA}.Release|x64.Build.0 = Release|x64 + {C7549517-7FAB-46A5-BB21-228984573265}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {C7549517-7FAB-46A5-BB21-228984573265}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {C7549517-7FAB-46A5-BB21-228984573265}.Debug|Win32.ActiveCfg = Debug|Win32 + {C7549517-7FAB-46A5-BB21-228984573265}.Debug|Win32.Build.0 = Debug|Win32 + {C7549517-7FAB-46A5-BB21-228984573265}.Debug|x64.ActiveCfg = Debug|x64 + {C7549517-7FAB-46A5-BB21-228984573265}.Debug|x64.Build.0 = Debug|x64 + {C7549517-7FAB-46A5-BB21-228984573265}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {C7549517-7FAB-46A5-BB21-228984573265}.Release|Mixed Platforms.Build.0 = Release|Win32 + {C7549517-7FAB-46A5-BB21-228984573265}.Release|Win32.ActiveCfg = Release|Win32 + {C7549517-7FAB-46A5-BB21-228984573265}.Release|Win32.Build.0 = Release|Win32 + {C7549517-7FAB-46A5-BB21-228984573265}.Release|x64.ActiveCfg = Release|x64 + {C7549517-7FAB-46A5-BB21-228984573265}.Release|x64.Build.0 = Release|x64 + {15139C6C-8DD7-42A5-B907-7A1A9862FA39}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {15139C6C-8DD7-42A5-B907-7A1A9862FA39}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {15139C6C-8DD7-42A5-B907-7A1A9862FA39}.Debug|Win32.ActiveCfg = Debug|Win32 + {15139C6C-8DD7-42A5-B907-7A1A9862FA39}.Debug|Win32.Build.0 = Debug|Win32 + {15139C6C-8DD7-42A5-B907-7A1A9862FA39}.Debug|x64.ActiveCfg = Debug|x64 + {15139C6C-8DD7-42A5-B907-7A1A9862FA39}.Debug|x64.Build.0 = Debug|x64 + {15139C6C-8DD7-42A5-B907-7A1A9862FA39}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {15139C6C-8DD7-42A5-B907-7A1A9862FA39}.Release|Mixed Platforms.Build.0 = Release|Win32 + {15139C6C-8DD7-42A5-B907-7A1A9862FA39}.Release|Win32.ActiveCfg = Release|Win32 + {15139C6C-8DD7-42A5-B907-7A1A9862FA39}.Release|Win32.Build.0 = Release|Win32 + {15139C6C-8DD7-42A5-B907-7A1A9862FA39}.Release|x64.ActiveCfg = Release|x64 + {15139C6C-8DD7-42A5-B907-7A1A9862FA39}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/vs/2013/rtmp-services/rtmp-services.vcxproj b/vs/2013/rtmp-services/rtmp-services.vcxproj new file mode 100644 index 0000000000000000000000000000000000000000..3262d627f1934ff7200866e01b8c2b3fe39b6a73 --- /dev/null +++ b/vs/2013/rtmp-services/rtmp-services.vcxproj @@ -0,0 +1,161 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {15139C6C-8DD7-42A5-B907-7A1A9862FA39} + Win32Proj + rtmpservices + + + + DynamicLibrary + true + v120 + Unicode + + + DynamicLibrary + true + v120 + Unicode + + + DynamicLibrary + false + v120 + true + Unicode + + + DynamicLibrary + false + v120 + true + Unicode + + + + + + + + + + + + + + + + + + + true + + + true + + + false + + + false + + + + + + Level3 + Disabled + WIN32;_DEBUG;_WINDOWS;_USRDLL;RTMPSERVICES_EXPORTS;%(PreprocessorDefinitions) + ../../../libobs;../../../deps/jansson/src + + + Windows + true + $(OutDir);%(AdditionalLibraryDirectories) + jansson.lib;libobs.lib;%(AdditionalDependencies) + + + + + + + Level3 + Disabled + WIN32;_DEBUG;_WINDOWS;_USRDLL;RTMPSERVICES_EXPORTS;%(PreprocessorDefinitions) + ../../../libobs;../../../deps/jansson/src + + + Windows + true + $(OutDir);%(AdditionalLibraryDirectories) + jansson.lib;libobs.lib;%(AdditionalDependencies) + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_WINDOWS;_USRDLL;RTMPSERVICES_EXPORTS;%(PreprocessorDefinitions) + ../../../libobs;../../../deps/jansson/src + + + Windows + true + true + true + $(OutDir);%(AdditionalLibraryDirectories) + jansson.lib;libobs.lib;%(AdditionalDependencies) + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_WINDOWS;_USRDLL;RTMPSERVICES_EXPORTS;%(PreprocessorDefinitions) + ../../../libobs;../../../deps/jansson/src + + + Windows + true + true + true + $(OutDir);%(AdditionalLibraryDirectories) + jansson.lib;libobs.lib;%(AdditionalDependencies) + + + + + + + + + + + \ No newline at end of file diff --git a/vs/2013/rtmp-services/rtmp-services.vcxproj.filters b/vs/2013/rtmp-services/rtmp-services.vcxproj.filters new file mode 100644 index 0000000000000000000000000000000000000000..649a900a817914d1d50baea86e22818ab1cdc86f --- /dev/null +++ b/vs/2013/rtmp-services/rtmp-services.vcxproj.filters @@ -0,0 +1,28 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Source Files + + + Source Files + + + Source Files + + + \ No newline at end of file