提交 43057038 编写于 作者: J jp9000

Add 'common' and 'custom' RTMP services

This plugin is just a generic service plugin for basic RTMP streaming
service stuff.

This just has a 'common' service that has a list of common/simple
streaming services that don't have their own custom service modules, and
then a 'custom' service that allows you to enter in the stream URL and
key manually, without a service/server list.

Also, copy the jansson VS projects file (don't modify the old one) so
that it's located in the vs/2013 directory, so that other libraries can
properly link with it without having to enter in extra information just
to include jansson
上级 506daa17
{
"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"
}
}
}
......@@ -14,3 +14,4 @@ endif()
add_subdirectory(obs-x264)
add_subdirectory(obs-ffmpeg)
add_subdirectory(obs-outputs)
add_subdirectory(rtmp-services)
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)
#include <util/platform.h>
#include <obs-module.h>
#include <jansson.h>
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
};
#include <obs-module.h>
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
};
#include <obs-module.h>
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;
}
......@@ -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]);
......
......@@ -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
......
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{15139C6C-8DD7-42A5-B907-7A1A9862FA39}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>rtmpservices</RootNamespace>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v120</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v120</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v120</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v120</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;RTMPSERVICES_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>../../../libobs;../../../deps/jansson/src</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalLibraryDirectories>$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>jansson.lib;libobs.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;RTMPSERVICES_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>../../../libobs;../../../deps/jansson/src</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalLibraryDirectories>$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>jansson.lib;libobs.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>
</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;RTMPSERVICES_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>../../../libobs;../../../deps/jansson/src</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalLibraryDirectories>$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>jansson.lib;libobs.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>
</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;RTMPSERVICES_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>../../../libobs;../../../deps/jansson/src</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalLibraryDirectories>$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>jansson.lib;libobs.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="..\..\..\plugins\rtmp-services\rtmp-common.c" />
<ClCompile Include="..\..\..\plugins\rtmp-services\rtmp-custom.c" />
<ClCompile Include="..\..\..\plugins\rtmp-services\rtmp-services-main.c" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
</Filter>
<Filter Include="Resource Files">
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\..\plugins\rtmp-services\rtmp-common.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\..\plugins\rtmp-services\rtmp-custom.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\..\plugins\rtmp-services\rtmp-services-main.c">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
</Project>
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册