From 1013e334e140991e0e041697202094a1e10b56a2 Mon Sep 17 00:00:00 2001 From: lishu Date: Wed, 5 Dec 2018 20:06:50 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=A0=E5=87=8F=E9=85=8D=E7=BD=AE=E6=96=87?= =?UTF-8?q?=E4=BB=B6=EF=BC=8CK=E9=A1=B9=E7=9B=AE=E7=9A=84main.conf?= =?UTF-8?q?=E5=8F=AF=E4=BD=BF=E7=94=A8main=5Fk.conf,frag=5Freassembly.conf?= =?UTF-8?q?=E4=BD=BF=E7=94=A8frag=5Freassembly=5Fk.conf?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bin/conf/frag_reassembly_k.conf | 33 ++++++++ bin/conf/main.conf | 2 +- bin/conf/main_k.conf | 134 ++++++++++++++++++++++++++++++++ frag_rssb安装使用手册.docx | Bin 79885 -> 79920 bytes src/main.c | 8 +- 5 files changed, 172 insertions(+), 5 deletions(-) create mode 100644 bin/conf/frag_reassembly_k.conf create mode 100644 bin/conf/main_k.conf diff --git a/bin/conf/frag_reassembly_k.conf b/bin/conf/frag_reassembly_k.conf new file mode 100644 index 0000000..40e7490 --- /dev/null +++ b/bin/conf/frag_reassembly_k.conf @@ -0,0 +1,33 @@ +[NETWORK] +RedisClusterSwitch=1 +RedisTimeout=5 + +#cluster mode +RedisBrokers=192.168.10.205:9012 + +[SYSTEM] +WaitQueueNum=1000000 + +ConvergeHashSize=65536 +ConvergeHashElemNum=1048576 +ConvergeHashExpireTime=120 + +[LOG] +#frag reassembly log ÕûÐÎÆ´½ÓµÄËùÓÐÈÕÖ¾ +FragReassemblyLogLevel=30 +FragReassemblyLogName=./frag_reassembly.log + +#media log +MediaLogLevel=30 +MediaLogName=./frag_reassembly_media.log + +#stat log +StatInterval=30 +StatFile=./frag_reassembly_stat.log +SysinfoInterval=30 +SysinfoFile=./frag_reassembly_sysinfo.log + +#Maat +MaatStatSwitch=0 +MaatPerfSwitch=0 +MaatStatFile=./maat_stat.log diff --git a/bin/conf/main.conf b/bin/conf/main.conf index 3f2ef7a..fc15fd8 100644 --- a/bin/conf/main.conf +++ b/bin/conf/main.conf @@ -232,4 +232,4 @@ capacity=32 cost=32 wlb_report_interval=10 -bfd_recv_port=33082 +bfd_recv_port=0 diff --git a/bin/conf/main_k.conf b/bin/conf/main_k.conf new file mode 100644 index 0000000..b0af249 --- /dev/null +++ b/bin/conf/main_k.conf @@ -0,0 +1,134 @@ +#--------------------------------------------------------------------NETWORK +[NETWORK] +LocalIP=ens33 +FwdIP=ens33 + +#recv bizman param, recv data from sapp +BizmanAckSmoothTime = 10 +BizmanAckAccumulateTime=10 +BizmanAckAccumulateNum=5 +BizmanPort=22082 + +#sapp recv resp msg port +BizmanAckPort=22084 + +#msg port:recv msg +MsgPort=22080 + +#udp socket:send frag +UdpSendIP=127.0.0.1;127.0.0.1; +UdpSendIPNum=2 +UdpSendPort=33082;33083 + +#--------------------------------------------------------------------SYSTEM +[SYSTEM] +#cpzÀàÐÍ 0:AV_PIC 1:voip +CPZTpye=0 + +ThreadNum=1 +BizmanQueueMode=0 +BizmanQueueMaxnum=2000000 + +AsmisSwitch=0 + +#Ïòǰ¶Ë·¢ËͽÚĿȷÈÏ +AckSwitch=0 + +#IVIÈ¥ÖØ¿ª¹Ø +IVISwitch=1 + +#indexµÚ¶þ´Î·´²éʱ¼ä +IndexQueryTime=10 +#Ë÷Òý²éѯ¶¨Ê±Æ÷»Øµ÷µÄ×î´ó´ÎÊý +IndexQueryTimerCbMaxNum=500 + +#media renew time +RenewTimeMax=7200 +RenewTimeMin=600 +RenewTimeStep=6 + +#½ÚÄ¿HASH±í +MediaHashSize=65536 +MediaHashElemNum=1048576 +MediaHashExpireTime=300 + +#ÔªÐÅϢѡÏîcapIPÊÇ·ñÐÞ¸Ä 1£º¸ÄΪ±¾µØcapIP, 0:Ñ¡ÏîΪǰ¶Ë»úCapIP +ModifyCapIPSwitch=1 + +#==============================================================VOIP +[VOIP] +VOIPFilterSwitch=0 + +#VOIP survey log ¼à²âÈÕÖ¾ +VOIPSurveyLogIP= +VOIPSurveyLogIPNum= +VOIPSurveyLogPort= + +#VOIP total log È«Á¿ÈÕÖ¾ +VOIPFullLogIP= +VOIPFullLogIPNum= +VOIPFullLogPort= + +#voip log +VOIPLogLevel= 20 +VOIPLogPath= ./log/voip.log + +#--------------------------------------------------------------------LOG +[LOG] +AppName=rssb +StatRemoteSwitch= +StatServerIP= +StatServerPort= + +#field_stat +StatCycle=30 +StatFile=./log/rssb_stat.log + +SysinfoCycle=30 +SysinfoFile=./log/rssb_sysinfo.log + +#log in general +LogLevel= 30 +LogPath= ./log/runtime.log + +#frag msg log +FragLogLevel= 30 +FragLogPath= ./log/frag.log + +#resp msg log +RespLogPath= ./log/survey.log + +#media create log +MediaCreateLogPath= ./log/media_create.log + +#media expire log +MediaExpireLogPath= ./log/media_expire.log + +#--------------------------------------------------------------------DEBUG +[DEBUG] +/*½ÚÄ¿½øÐб¾µØ´æ´¢*/ +FileStoreSwitch=0 +FileStorePath=./log/file/ + +#1: (reoffset-1)*content-length 0: accoffset +HlsAboffsetInMode=1 + +/*Ë鯬½¨ÒéÎÞЧ±êÖ¾*/ +FragSurveyInvalid=0 + +/*JSONÎļþд±¾µØ*/ +JSONLocalSwitch=0 + +[WLB] +wlb_on=0 +wlb_topic=AV +wlb_group_name=xx +user_tag=xx +health_check_port=52100 +health_check_interval=10 +data_port=30000 +capacity=32 +cost=32 +wlb_report_interval=10 + +bfd_recv_port=0 diff --git a/frag_rssb安装使用手册.docx b/frag_rssb安装使用手册.docx index 61f2cba9ca1d67e29108664d5c1db77081440d9d..459e18b7be3d1b3995d17c6c5f79b60683bcbdf2 100644 GIT binary patch delta 9348 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 delta 9298 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 DN