一.系统环境要求;
流媒体数据流接续主要占用CPU资源,在服务器选型,选择高性能CUP;
本环境部署在windows serves 2008 r2 datacenter。详细信息如下;
二.环境补丁
C++2017 https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads
Net Framework 4-6-1 https://www.microsoft.com/en-us/download/details.aspx?id=49982
SP1 https://www.microsoft.com/zh-cn/download/details.aspx?id=5842
详见如下截图;
三.流媒体文件服务器
Nginx提供负载 videoserver-new流媒体
1,进入nginx 目录,右击nginx以管理员权限运行Nginx。
2,进入videoserver-new 找到
3,右键编辑Dao_mysql文件,修改IP地址指向数据库,内容如下;
</object>
<db:provider id="DbProvider" provider="OracleClient-2.0" connectionString="Data Source=X.X.X.X;Port=3306;User Id=ascs;Password=96bcnJ6ifCz7NBHpjhB1ZA45;database=subiaodb;Character Set=utf8"/>
4.右键编辑GPSNET。VideoServer.exe 文件类型config。内容如下;
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<!-- 数据库的配置参数节 -->
<section name="dataSettings" type="System.Configuration.NameValueSectionHandler" />
<sectionGroup name="spring">
<section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core" />
<section name="parsers" type="Spring.Context.Support.NamespaceParsersSectionHandler, Spring.Core" />
</sectionGroup>
<sectionGroup name="common">
<section name="logging" type="Common.Logging.ConfigurationSectionHandler, Common.Logging" />
</sectionGroup>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section name="GpsNET.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
</sectionGroup>
</configSections>
<!-- 数据库的配置参数 -->
<dataSettings>
<add key="db.datasource" value="127.0.0.1" />
<add key="db.user" value="sa" />
<add key="db.password" value="abc168." />
<!--主数据库名称-->
<add key="db.database" value="gpstest" />
</dataSettings>
<spring>
<parsers>
<parser type="Spring.Data.Config.DatabaseNamespaceParser, Spring.Data" />
</parsers>
<context>
<!-- using embedded assembly configuration file
<resource uri="assembly://Spring.IocQuickStart.MovieFinder/Spring.IocQuickStart.MovieFinder/AppContext.xml"/>
<resource uri="config://spring/objects"/>
<resource uri="file://~//Quartz.xml"/>
<resource uri="file://~//service.xml"/>
-->
<!-- using section in App.config -->
<resource uri="file://~//Dao_mysql.xml" />
<resource uri="file://~//service.xml" />
<resource uri="assembly://GpsNET.Service/GpsNET.Config/QueryService.xml" />
</context>
</spring>
<log4net>
<root>
<!--如果只需要看看Sql设置INFO就够了,如果你要调试可以设置为DEBUG或ALL-->
<level value="Info" />
<appender-ref ref="ConsoleAppender" />
<appender-ref ref="ClientLogFileAppender" />
</root>
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
<appender name="ClientLogFileAppender" type="log4net.Appender.RollingFileAppender">
<param name="File" value="log\server.log" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="30" />
<maximumFileSize value="2MB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
<logger name="SocketAsyncServer.AsyncTcpServer">
<level value="DEBUG" />
<appender-ref ref="ClientLogFileAppender" />
</logger>
<appender name="ServerLogFileAppender" type="log4net.Appender.RollingFileAppender">
<param name="File" value="log\t808.log" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="3" />
<maximumFileSize value="2MB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="记录时间:%date 日志:%message%newline" />
</layout>
</appender>
<logger name="SocketAsyncServer.AsyncSocketConnection">
<level value="DEBUG" />
<appender-ref ref="ServerLogFileAppender" />
</logger>
<appender name="StaticFileAppender" type="log4net.Appender.RollingFileAppender">
<param name="File" value="log\service.log" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="3" />
<maximumFileSize value="2MB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
<logger name="GpsNET.Service.FuelStatisticService">
<level value="INFO" />
<appender-ref ref="ServerLogFileAppender" />
</logger>
<logger name="Spring">
<level value="ERROR" />
</logger>
<logger name="NHibernate">
<level value="ERROR" />
</logger>
</log4net>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
</startup>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="WcfServerBehavior">
<!-- 为避免泄漏元数据信息,请在部署前将以下值设置为 false 并删除上面的元数据终结点-->
<serviceMetadata httpGetEnabled="false" />
<!-- 要接收故障异常详细信息以进行调试,请将以下值设置为 true。在部署前设置为 false 以避免泄漏异常信息-->
<serviceDebug includeExceptionDetailInFaults="true" />
<dataContractSerializer maxItemsInObjectGraph="65536000" />
<serviceThrottling maxConcurrentCalls="1000" maxConcurrentSessions="1000" maxConcurrentInstances="1000" />
</behavior>
<behavior name="ExposeMexAndThrottleBehavior">
<serviceMetadata httpGetEnabled="true" httpGetUrl="http://localhost:1111/EventService/Mex" />
<serviceThrottling maxConcurrentCalls="3" maxConcurrentInstances="100" maxConcurrentSessions="100" />
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="WcfServerBehavior">
<dataContractSerializer maxItemsInObjectGraph="65536000" />
</behavior>
</endpointBehaviors>
</behaviors>
<services>
<!-- GPS数据服务,端口:11300 -->
<service name="RealDataService" behaviorConfiguration="WcfServerBehavior">
<endpoint binding="netTcpBinding" contract="GpsNET.Service.IRealDataService" bindingConfiguration="hServerBinding" address="net.tcp://localhost:11300/realDataService/" />
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="http://localhost:11301/realDataService/" />
</baseAddresses>
</host>
</service>
</services>
<client>
<!-- 809GPS数据转发服务,端口:10300 -->
<endpoint address="net.tcp://127.0.0.1:19300/JT809TransferService" binding="netTcpBinding" bindingConfiguration="NetTcpBinding_IJT809TransferService" contract="GpsNET.Service.IJT809TransferService" name="NetTcpBinding_IJT809TransferService" behaviorConfiguration="WcfServerBehavior" />
</client>
<bindings>
<netTcpBinding>
<binding name="hServerBinding" closeTimeout="00:01:00" openTimeout="00:2:00" receiveTimeout="01:10:00" sendTimeout="00:10:00" transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions" hostNameComparisonMode="StrongWildcard" listenBacklog="100" maxBufferPoolSize="21474836470" maxBufferSize="2147483647" maxConnections="200" maxReceivedMessageSize="2147483647">
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
<!--<reliableSession ordered="true" inactivityTimeout="10:10:00" enabled="true" />-->
<security mode="None">
<transport clientCredentialType="None" />
<message clientCredentialType="None" />
</security>
</binding>
<binding name="NetTcpBinding_IJT809TransferService" closeTimeout="00:15:00" openTimeout="00:01:00" receiveTimeout="10:10:40" sendTimeout="00:01:40" transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions" hostNameComparisonMode="StrongWildcard" listenBacklog="10" maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxConnections="100" maxReceivedMessageSize="2147483647">
<readerQuotas maxDepth="32" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
<!--<reliableSession ordered="true" inactivityTimeout="10:20:00" enabled="true" /> -->
<security mode="None">
<transport clientCredentialType="Windows" protectionLevel="EncryptAndSign" />
<message clientCredentialType="Windows" />
</security>
</binding>
</netTcpBinding>
</bindings>
</system.serviceModel>
<userSettings>
<GpsNET.Properties.Settings>
<setting name="ListenPort" serializeAs="String">
<value>6001</value>
</setting>
<setting name="Console" serializeAs="String">
<value>True</value>
</setting>
<setting name="ProcessDataInterval" serializeAs="String">
<value>10</value>
</setting>
<setting name="BufferSize" serializeAs="String">
<value>2048</value>
</setting>
<setting name="AllNeedResponse" serializeAs="String">
<value>True</value>
</setting>
<setting name="LogPacket" serializeAs="String">
<value>False</value>
</setting>
<setting name="IsNew808" serializeAs="String">
<value>True</value>
</setting>
<setting name="DisplayLogo" serializeAs="String">
<value>False</value>
</setting>
<setting name="Backlog" serializeAs="String">
<value>100</value>
</setting>
<setting name="MaxConnections" serializeAs="String">
<value>2000</value>
</setting>
<setting name="MaxAcceptNum" serializeAs="String">
<value>500</value>
</setting>
<setting name="IdleTime" serializeAs="String">
<value>120</value>
</setting>
<setting name="PlaySound" serializeAs="String">
<value>False</value>
</setting>
<setting name="RtmpLocation" serializeAs="String">
<value>rtmp://127.0.0.1:19350/live/</value>
</setting>
<setting name="JMSServerIp" serializeAs="String">
<value>10.223.47.171</value>
</setting>
<setting name="JMSServerPort" serializeAs="String">
<value>61616</value>
</setting>
<setting name="MaxOnlineTime" serializeAs="String">
<value>30</value>
</setting>
<setting name="JMSEnabled" serializeAs="String">
<value>True</value>
</setting>
<setting name="RecordVideo" serializeAs="String">
<value>False</value>
</setting>
<setting name="Title" serializeAs="String">
<value>JT1078流媒体转发服务器</value>
</setting>
<setting name="SimNoLength" serializeAs="String">
<value>12</value>
</setting>
<setting name="BroadcastAudioWithoutHISI" serializeAs="String">
<value>False</value>
</setting>
<setting name="Rtmp809TimeCode" serializeAs="String">
<value>201901010001</value>
</setting>
<setting name="RedisConnectionString" serializeAs="String">
<value>10.223.47.171:6379,password=46qUdp1mH1AM8RNS3TVsfNkQ</value>
</setting>
<setting name="RedisPullInfo" serializeAs="String">
<value>1</value>
</setting>
<setting name="ServerTag" serializeAs="String">
<value>0</value>
</setting>
</GpsNET.Properties.Settings>
</userSettings>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Common.Logging" publicKeyToken="af08829b84f0328e" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Spring.Aop" publicKeyToken="65e474d141e25e07" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.0.1.40000" newVersion="2.0.1.40000" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Spring.Core" publicKeyToken="65e474d141e25e07" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.0.1.45000" newVersion="2.0.1.45000" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Spring.Data" publicKeyToken="65e474d141e25e07" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.0.1.45000" newVersion="2.0.1.45000" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="NHibernate" publicKeyToken="aa95f207798dfdb4" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-3.3.0.4000" newVersion="3.3.0.4000" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Quartz" publicKeyToken="f6b8c98a402cc8a4" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.2.1.400" newVersion="2.2.1.400" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.4.1" newVersion="4.0.4.1" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
5.右击 GpsNET.VideoServer 运行;信息如下;