关于FreeSWITCH_1.6视频 10C

我想在FS里面将传输的视频数据截取保存至本地,将本地raw通过FS发送出去,对于视频源的处理这部分应该在哪里操作,我在这纠结了两天了,望大神拯救。
PS:我的FS用的是1.6版本的

2个回答

我是用两个SIP话机+一个软电话,通过FS呼叫3000的方式进入视频会议室

如果说在一个终端刚进入会议室,就将其rtp数据转发到别的地方去,我查资料说是在mod_conference里面修改,但是本人水平有限,不知道该如何转发到别的地方去,希望能够得到各位的帮助

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
关于 freeSwitch 的端口转发问题?
![如图](https://img-ask.csdn.net/upload/201709/12/1505212387_631218.png) 在这样的环境下,FreeSwitch需要如何配置?
freeswitch callcenter无法打通分机
freeswitch callcenter无法打通分机,calcenter号码设置为了7000,通过voip打到7000,有响铃,但是无法通过配置的规则打到1001或者1002分机。下面是我的配置文件: ![图片说明](https://img-ask.csdn.net/upload/201908/29/1567073009_744136.png)![图片说明](https://img-ask.csdn.net/upload/201908/29/1567073021_624763.png) ,call_center的module也安装了,求大佬解答
64位win7操作系统,安装freeswitch后启动报错,求解决方法
Cannot open pid file C:/Program Files/FreeSWITCH/run/freeswitch.pid.
请问哪位大神有sip.js的学习资料和demo
是这样的,公司现在需要搭建一个网页语音通话系统,用freeswitch+sip.js来做, 但是sip.js学习资料好少,有哪位大神有学习资料哥demo吗?有的话跪求给一份,感激不尽, 官网的话,我已经知道了,就不用给了
freeswitch对接mrcp,想用lua脚本把结果取出来然后判断结果
也是从网上找的例子,但是我想解析这个xml,判断如果是yes,播放1.mp3,no播放2.MP3,该怎么做呢,有大神知道吗,我不会lua 代码如下: ``` tryagain = 1 while (tryagain == 1) do session:execute("play_and_detect_speech",welcome .. "detect:unimrcp {start-input-timers=false,no-input-timeout=" .. no_input_timeout .. ",recognition-timeout=" .. recognition_timeout .. "}" .. grammar) xl = session:getVariable('detect_speech_result') if (xl == nil) then freeswitch.consoleLog("CRIT","电话挂断\n") tryagain = 0 else freeswitch.consoleLog("CRIT","Result is '" .. xl .. "'\n") 这里取结果,判断 session:execute("playback", huifu2) tryagain = 0 end end ``` 得到的xml如下 ``` <result> <interpretation grammar="" confidence="1.0"> <instance> <callId>hostname-4418_35629.1554048033766857898-841227</callId> <logId>EDC18579-98CC-4649-9E60-6D5A1C71FEE0_-1</logId> <rolecategory>CLIENT</rolecategory> <extJson> <snStartTime>00:06.559</snStartTime> <snStopTime>00:07.519</snStopTime> <speed>1.04</speed></extJson> <categotyId>TXT</categotyId> </instance> <input mode="speech">yes,</input> </interpretation> </result> ```
freeswitch对话分段录音问题
问题描述: 使用X-Litet通过freeSwitch中的ESL对用户1000进行语音呼叫,在1000接通后播放预先设定的录音。 此时有两个地方小弟不明白: 1.1000分机接听后 通过什么事件得知1000正在说话的状态? 2.如何在1000分机说话的时候开始录音,1000分机停止说话的时候终止录音? 相关测试代码: 1.SpringBoot 2.ESL-Java ``` package iven.FreeSwitch.bean; import org.freeswitch.esl.client.IEslEventListener; import org.freeswitch.esl.client.inbound.Client; import org.freeswitch.esl.client.inbound.InboundConnectionFailure; import org.freeswitch.esl.client.transport.event.EslEvent; import org.freeswitch.esl.client.transport.message.EslMessage; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.Serializable; import java.text.SimpleDateFormat; import java.util.Date; public class EventEslInboundTest implements Serializable { private static final Logger log = LoggerFactory.getLogger(EventEslInboundTest.class); private static String host = "192.168.108.193"; private static int port = 8021; private static String password = "ClueCon"; private static Client client = null; private static boolean bConnected = false; private static EventEslInboundTest eventEslInboundTest = null; private static SimpleDateFormat formatter = new SimpleDateFormat("dd-MMM-yyyy HH:mm:ss:SSS"); public static void ConsoleLog(String strInfo){ System.out.println( formatter.format(new Date(System.currentTimeMillis()))+"["+strInfo+"]" ); } public static EventEslInboundTest getInstance( ) { if(eventEslInboundTest == null) { eventEslInboundTest = new EventEslInboundTest(); } return eventEslInboundTest; } private static void initSocket(){ if( client==null ) { client = new Client(); } if( bConnected ) return ; try { client.connect( host, port, password, 10 ); bConnected = true; } catch ( InboundConnectionFailure e ) { log.error("Connect failed",e); return; } } public static void inBand() { initSocket(); System.out.println("event_socket_test".toUpperCase()); client.setEventSubscriptions("plain", "ALL");//"all" //注册事件处理程序 client.addEventListener( new IEslEventListener() { public void eventReceived( EslEvent event ) { if(event.getEventName().equals("CHANNEL_ANSWER")){ String callId = event.getEventHeaders().get("variable_uuid"); ConsoleLog("["+callId+"]"+"CHANNEL_ANSWER:"+event.getEventBodyLines().toString()); String param = callId + " playback::" + "1.wav" + " both"; EslMessage result = client.sendSyncApiCommand("uuid_broadcast", param); ConsoleLog("uuidBroadcastNuance result " + result.toString()); } if(event.getEventName().equals("CHANNEL_EXECUTE_COMPLETE")) { String callId = event.getEventHeaders().get("variable_uuid"); ConsoleLog("["+callId+"]"+"CHANNEL_EXECUTE_COMPLETE"); } if (event.getEventName().equals("CHANNEL_PARK")) { String callId = event.getEventHeaders().get("variable_uuid"); ConsoleLog("["+callId+"]"+"CHANNEL_PARK"); String param = callId + " playback::" + "2.wav" + " both"; String result = client.sendAsyncApiCommand("uuid_broadcast", param); ConsoleLog("uuidBroadcastNuance result " + result); } if(event.getEventName().equals("HEARTBEAT")){ String callId = event.getEventHeaders().get("variable_uuid"); //System.out.println("recieved Hearbeat event !" + event.getEventBodyLines()); } if(event.getEventName().equals("CHANNEL_DESTROY")){ String callId = event.getEventHeaders().get("variable_uuid"); ConsoleLog("["+callId+"]"+"CHANNEL_DESTROY"); client.close( ); client = null; bConnected = false; } if(event.getEventName().equals("CHANNEL_HANGUP_COMPLETE")){ //挂断 String callId = event.getEventHeaders().get("variable_uuid"); ConsoleLog("["+callId+"]"+"CHANNEL_HANGUP_COMPLETE"); // client.sendSyncApiCommand( "uuid_record ",callId+" stop record::333.wav" ); // ConsoleLog("["+callId+"]"+"uuid_record stop record 333.wav"); } if (event.getEventName().equals("DETECTED_SPEECH")) { String callId = event.getEventHeaders().get("variable_uuid"); ConsoleLog("["+callId+"]"+"DETECTED_SPEECH"); String asrStatus = (String) event.getEventHeaders().get("Speech-Type"); ConsoleLog("["+callId+"]"+asrStatus); } if(event.getEventName().equals("CHANNEL_EXECUTE_PBX")) { ConsoleLog("CHANNEL_EXECUTE_PBX"); } if(event.getEventName().equals("CHANNEL_BRIDGE")) { ConsoleLog("CHANNEL_BRIDGE"); } if(event.getEventName().equals("CHANNEL_APPLICATION")) { ConsoleLog("CHANNEL_APPLICATION"); } if(event.getEventName().equals("CHANNEL_HOLD")) { ConsoleLog("CHANNEL_HOLD"); } if(event.getEventName().equals("CHANNEL_STATE")) { ConsoleLog("CHANNEL_STATE:" + event.getEventHeaders().get("Channel-State")); } if(event.getEventName().equals("CHANNEL_CALLSTATE")) { ConsoleLog("CHANNEL_CALLSTATE:" + event.getEventHeaders().get("Channel-Call-State")); } if(event.getEventName().equals("CALL_UPDATE")) { ConsoleLog("CALL_UPDATE"); } if(event.getEventName().equals("CUSTOM")) { ConsoleLog("收到:"+"CUSTOM ="+event.getEventBodyLines().toString()); } } public void backgroundJobResultReceived( EslEvent event ) { String uuid= event.getEventHeaders().get("Job-UUID"); //log.info("Background job result received+:"+event.getEventName()+"/"+event.getEventHeaders());// +"/"+JoinString(event.getEventHeaders())+"/"+JoinString(event.getEventBodyLines())); ConsoleLog("Background job result received+:"+event.getEventName()+"/"+event.getEventHeaders());// +"/"+JoinString(event.getEventHeaders())+"/"+JoinString(event.getEventBodyLines())); } }); } public static void dialPhone( String mobile ) { //初始化FreeSwitch socket对象 initSocket(); //注册事件 inBand(); //呼叫接通后播放语音 //client.sendAsyncApiCommand("originate", "{ignore_early_media=true}user/1004 &playback(1.wav) "); client.sendAsyncApiCommand("originate", "user/1004 &hold()"); //&echo() &park() log.debug("client.sendAsyncApiCommand"); //1000接通后将1000转接到1002 //EslMessage response = client.sendSyncApiCommand("originate", "user/1000 &bridge(user/1003) default zhang"); //System.out.println("body_string"+response.toString()); } } ``` 头发都要掉光了,请大神解答。
Java如何调用FreeSwitch接口
Java 调用FreeSwitch 其中的esl.jar是怎么生成的了 System.load("/lib64/fs/libesljni.so");这又是怎么回事
freeswitch对接mod_unimrcp进行ASR语音识别时,unimrcp服务器一直显示检测中,但检测不到语音?
2019-07-11 10:41:10:706791 [INFO] Receive SIP Event [nua_i_invite] Status 100 Trying [SIP-Agent-1] 2019-07-11 10:41:10:706842 [INFO] Receive SIP Event [nua_i_state] Status 100 Trying [SIP-Agent-1] 2019-07-11 10:41:10:706848 [NOTICE] SIP Call State [received] 2019-07-11 10:41:10:706880 [INFO] Create Session 0x7f3bf4004728 <new> [uni2] 2019-07-11 10:41:10:706905 [INFO] Remote SDP 0x7f3bf4004728 <new> v=0 o=FreeSWITCH 7957069661587620113 7436270796488759771 IN IP4 172.17.1.116 s=- c=IN IP4 172.17.1.116 t=0 0 m=application 9 TCP/MRCPv2 1 a=setup:active a=connection:new a=resource:speechrecog a=cmid:1 m=audio 4002 RTP/AVP 0 8 96 a=rtpmap:0 PCMU/8000 a=rtpmap:8 PCMA/8000 a=rtpmap:96 L16/8000 a=sendonly a=mid:1 2019-07-11 10:41:10:706939 [NOTICE] Add Session <579805baa38511e9> 2019-07-11 10:41:10:706943 [INFO] Receive Offer 0x7f3bf4004728 <579805baa38511e9> [c:1 a:1 v:0] 2019-07-11 10:41:10:707015 [INFO] Add Pending Control Channel <579805baa38511e9@speechrecog> [1] 2019-07-11 10:41:10:716519 [INFO] Enable RTP Session 172.17.2.196:5002 2019-07-11 10:41:10:716594 [INFO] Open RTP Receiver 172.17.2.196:5002 <- 172.17.1.116:4002 playout [50 ms] bounds [0 - 600 ms] adaptive [1] skew detection [1] 2019-07-11 10:41:10:716604 [INFO] Media Path 0x7f3bf4004728 Source->[PCMU/8000/1]->Decoder->[LPCM/8000/1]->Bridge->[LPCM/8000/1]->Sink 2019-07-11 10:41:10:716652 [INFO] Send Answer 0x7f3bf4004728 <579805baa38511e9> [c:1 a:1 v:0] Status OK 2019-07-11 10:41:10:716663 [INFO] Local SDP 0x7f3bf4004728 <579805baa38511e9> v=0 o=UniMRCPServer 0 0 IN IP4 172.17.2.196 s=- c=IN IP4 172.17.2.196 t=0 0 m=application 1544 TCP/MRCPv2 1 a=setup:passive a=connection:new a=channel:579805baa38511e9@speechrecog a=cmid:1 m=audio 5002 RTP/AVP 0 a=rtpmap:0 PCMU/8000 a=recvonly a=mid:1 2019-07-11 10:41:10:717118 [INFO] Receive SIP Event [nua_i_state] Status 200 OK [SIP-Agent-1] 2019-07-11 10:41:10:717159 [NOTICE] SIP Call State 0x7f3bf4004728 [completed] 2019-07-11 10:41:10:718486 [NOTICE] Accepted TCP/MRCPv2 Connection 172.17.2.196:1544 <-> 172.17.1.116:52216 2019-07-11 10:41:10:718523 [INFO] Receive SIP Event [nua_i_ack] Status 200 OK [SIP-Agent-1] 2019-07-11 10:41:10:718529 [INFO] Receive SIP Event [nua_i_state] Status 200 OK [SIP-Agent-1] 2019-07-11 10:41:10:718533 [NOTICE] SIP Call State 0x7f3bf4004728 [ready] 2019-07-11 10:41:10:718535 [INFO] Receive SIP Event [nua_i_active] Status 200 Call active [SIP-Agent-1] 2019-07-11 10:41:10:726777 [INFO] Receive MRCPv2 Data 172.17.2.196:1544 <-> 172.17.1.116:52216 [468 bytes] MRCP/2.0 468 DEFINE-GRAMMAR 1 Channel-Identifier: 579805baa38511e9@speechrecog Content-Type: application/srgs+xml Content-Id: 5ce63f65-0f98-42da-93d8-f26bdbc88476 Content-Length: 278 <?xml version="1.0"?> <grammar xmlns="http://www.w3.org/2001/06/grammar" xml:lang="en-US" version="1.0" mode="voice" root="digit"> <rule id="digit"> <one-of> <item>one</item> <item>two</item> <item>three</item> </one-of> </rule> </grammar> 2019-07-11 10:41:10:726822 [INFO] Assign Control Channel <579805baa38511e9@speechrecog> to Connection 172.17.2.196:1544 <-> 172.17.1.116:52216 [0] -> [1] 2019-07-11 10:41:10:726844 [INFO] Process DEFINE-GRAMMAR Request <579805baa38511e9@speechrecog> [1] 2019-07-11 10:41:10:726869 [INFO] Process DEFINE-GRAMMAR Response <579805baa38511e9@speechrecog> [1] 2019-07-11 10:41:10:726890 [INFO] Send MRCPv2 Data 172.17.2.196:1544 <-> 172.17.1.116:52216 [112 bytes] MRCP/2.0 112 1 200 COMPLETE Channel-Identifier: 579805baa38511e9@speechrecog Completion-Cause: 000 success 2019-07-11 10:41:10:727815 [INFO] Receive MRCPv2 Data 172.17.2.196:1544 <-> 172.17.1.116:52216 [273 bytes] MRCP/2.0 273 RECOGNIZE 2 Channel-Identifier: 579805baa38511e9@speechrecog Content-Type: text/uri-list Cancel-If-Queue: false Recognition-Timeout: 10000 Start-Input-Timers: true No-Input-Timeout: 5000 Content-Length: 44 session:5ce63f65-0f98-42da-93d8-f26bdbc88476 2019-07-11 10:41:10:727865 [INFO] Process RECOGNIZE Request <579805baa38511e9@speechrecog> [2] 2019-07-11 10:41:10:727876 [INFO] Open Utterance Output File [/usr/local/unimrcp/var/utter-8kHz-579805baa38511e9.pcm] for Writing 2019-07-11 10:41:10:728055 [INFO] Process RECOGNIZE Response <579805baa38511e9@speechrecog> [2] 2019-07-11 10:41:10:728077 [INFO] State Transition IDLE -> RECOGNIZING <579805baa38511e9@speechrecog> 2019-07-11 10:41:10:728134 [INFO] Send MRCPv2 Data 172.17.2.196:1544 <-> 172.17.1.116:52216 [83 bytes] MRCP/2.0 83 2 200 IN-PROGRESS Channel-Identifier: 579805baa38511e9@speechrecog 2019-07-11 10:41:11:537114 [INFO] Activity Detector state changed [1] 2019-07-11 10:41:11:547093 [INFO] Activity Detector state changed [0] 2019-07-11 10:41:11:577014 [INFO] Activity Detector state changed [1] 2019-07-11 10:41:11:586826 [INFO] Activity Detector state changed [0] 2019-07-11 10:41:11:596742 [INFO] Activity Detector state changed [1] 2019-07-11 10:41:11:606087 [INFO] Activity Detector state changed [0] 2019-07-11 10:41:11:616821 [INFO] Activity Detector state changed [1] 2019-07-11 10:41:11:626158 [INFO] Activity Detector state changed [0] 2019-07-11 10:41:11:636391 [INFO] Activity Detector state changed [1] 2019-07-11 10:41:11:646711 [INFO] Activity Detector state changed [0] 2019-07-11 10:41:11:656691 [INFO] Activity Detector state changed [1] 2019-07-11 10:41:11:666200 [INFO] Activity Detector state changed [0] 2019-07-11 10:41:11:676635 [INFO] Activity Detector state changed [1] 2019-07-11 10:41:11:686583 [INFO] Activity Detector state changed [0] 2019-07-11 10:41:11:696703 [INFO] Activity Detector state changed [1] 2019-07-11 10:41:11:706603 [INFO] Activity Detector state changed [0] 2019-07-11 10:41:11:716682 [INFO] Activity Detector state changed [1] 2019-07-11 10:41:11:726704 [INFO] Activity Detector state changed [0] 2019-07-11 10:41:11:736657 [INFO] Activity Detector state changed [1] 2019-07-11 10:41:11:746644 [INFO] Activity Detector state changed [0] 2019-07-11 10:41:11:756449 [INFO] Activity Detector state changed [1] 2019-07-11 10:41:11:766582 [INFO] Activity Detector state changed [0] 2019-07-11 10:41:11:776901 [INFO] Activity Detector state changed [1] 2019-07-11 10:41:11:786758 [INFO] Activity Detector state changed [0] 2019-07-11 10:41:11:796875 [INFO] Activity Detector state changed [1] 2019-07-11 10:41:11:806867 [INFO] Activity Detector state changed [0] 2019-07-11 10:41:11:816656 [INFO] Activity Detector state changed [1] 2019-07-11 10:41:11:826178 [INFO] Activity Detector state changed [0] 2019-07-11 10:41:11:836737 [INFO] Activity Detector state changed [1] 2019-07-11 10:41:11:846277 [INFO] Activity Detector state changed [0] 2019-07-11 10:41:11:956524 [INFO] Activity Detector state changed [1] 2019-07-11 10:41:11:966486 [INFO] Activity Detector state changed [0] 2019-07-11 10:41:11:976403 [INFO] Activity Detector state changed [1] 2019-07-11 10:41:11:986385 [INFO] Activity Detector state changed [0] 2019-07-11 10:41:11:996284 [INFO] Activity Detector state changed [1] 2019-07-11 10:41:12:006528 [INFO] Activity Detector state changed [0] 2019-07-11 10:41:12:016476 [INFO] Activity Detector state changed [1] 2019-07-11 10:41:12:026282 [INFO] Activity Detector state changed [0] 2019-07-11 10:41:12:036295 [INFO] Activity Detector state changed [1] 2019-07-11 10:41:12:046218 [INFO] Activity Detector state changed [0] 2019-07-11 10:41:12:416443 [INFO] Activity Detector state changed [1] 2019-07-11 10:41:12:426244 [INFO] Activity Detector state changed [0] 2019-07-11 10:41:12:754256 [INFO] Receive MRCPv2 Data 172.17.2.196:1544 <-> 172.17.1.116:52216 [72 bytes] MRCP/2.0 72 STOP 3 Channel-Identifier: 579805baa38511e9@speechrecog 2019-07-11 10:41:12:754472 [INFO] Process STOP Request <579805baa38511e9@speechrecog> [3] 2019-07-11 10:41:12:756876 [INFO] Process STOP Response <579805baa38511e9@speechrecog> [3] 2019-07-11 10:41:12:756977 [INFO] State Transition RECOGNIZING -> IDLE <579805baa38511e9@speechrecog> 2019-07-11 10:41:12:757051 [INFO] Send MRCPv2 Data 172.17.2.196:1544 <-> 172.17.1.116:52216 [108 bytes] MRCP/2.0 108 3 200 COMPLETE Channel-Identifier: 579805baa38511e9@speechrecog Active-Request-Id-List: 2 2019-07-11 10:41:12:761118 [INFO] TCP/MRCPv2 Peer Disconnected 172.17.2.196:1544 <-> 172.17.1.116:52216 2019-07-11 10:41:12:761411 [INFO] Receive SIP Event [nua_i_bye] Status 200 Session Terminated [SIP-Agent-1] 2019-07-11 10:41:12:761443 [INFO] Receive SIP Event [nua_i_state] Status 200 Session Terminated [SIP-Agent-1] 2019-07-11 10:41:12:761795 [NOTICE] SIP Call State 0x7f3bf4004728 [terminated] 2019-07-11 10:41:12:761838 [INFO] Receive SIP Event [nua_i_terminated] Status 200 Session Terminated [SIP-Agent-1] 2019-07-11 10:41:12:761908 [INFO] Deactivate Session 0x7f3bf4004728 <579805baa38511e9> 2019-07-11 10:41:12:761933 [INFO] Terminate Session 0x7f3bf4004728 <579805baa38511e9> 2019-07-11 10:41:12:762049 [INFO] Remove Control Channel <579805baa38511e9@speechrecog> [0] 2019-07-11 10:41:12:766471 [INFO] Close RTP Receiver 172.17.2.196:5002 <- 172.17.1.116:4002 [r:101 l:0 j:96 p:50 d:0 i:0] 2019-07-11 10:41:12:766549 [INFO] Remove RTP Session 172.17.2.196:5002 2019-07-11 10:41:12:766649 [NOTICE] Destroy TCP/MRCPv2 Connection 172.17.2.196:1544 <-> 172.17.1.116:52216 2019-07-11 10:41:12:766694 [NOTICE] Remove Session <579805baa38511e9> 2019-07-11 10:41:12:766724 [INFO] Session Terminated 0x7f3bf4004728 <579805baa38511e9> 2019-07-11 10:41:12:766785 [NOTICE] Destroy Session <579805baa38511e9> ``` ```
freeswitch中数据传输问题
近期在研究关于freeswitch的东西,遇到一个麻烦,想在源代码中想要查看rtp传输时所涉及到的函数流程,由于本人完全新手,一直没有头绪,希望能得到大侠的指点,谢谢!
freeswitch在Bypass媒体下为什么修改了200中的SDP,没有透传?
基于freeswitch和Boghe IMS/RCS client搭建了一个Voip环境,想让媒体基于P2P方式,所以将freeswitch设置成了无媒体方式(internal.xml中的inbound-bypass-media设置为true,default.xml中增加bypass_meidia=true), 实际测试过程中发现被叫应答的时候200中的SDP freeswitch没有透传到主叫侧(被叫没发183),freeswitch将SDP中的Media description给改了,导致主被叫媒体不通。请各位大神帮忙看下具体是什么问题,多谢。 被叫发过来的200中的SDP: v=0 o=doubango 1983 678901 IN IP4 10.61.42.135 s=- c=IN IP4 10.61.42.135 t=0 0 m=audio 6738 RTP/AVPF 8 101 a=ptime:20 a=silenceSupp:off - - - - a=rtpmap:8 PCMA/8000/1 a=rtpmap:101 telephone-event/8000/1 a=fmtp:101 0-16 a=acfg:1 t=1 a=sendrecv a=rtcp-mux a=ssrc:4189294891 cname:ldjWoB60jbyQlR6e a=ssrc:4189294891 mslabel:6994f7d1-6ce9-4fbd-acfd-84e5131ca2e2 a=ssrc:4189294891 label:Doubango.Audio freeswitch发送给主叫侧的200消息中的SDP: v=0 o=doubango 1983 678901 IN IP4 10.61.42.135 s=- c=IN IP4 10.61.42.135 t=0 0 m=audio 0 RTP/AVP 19
FreeSWITCH如何支持323终端注册
如题,我在编译好的FreeSWITCH中,想要让第三方支持GK注册的终端能够注册到freeSWITCH上,就像是SIP终端注册到FreeSWITCH上一样,我在FreeSWITCH中已经将mod_h323模块编译完成,希望大神指教一下,怎么样才能让323终端支持注册到FreeSWITCH上
请教熟悉apr函数库的大神:函数apr_pstrndup的工作方式
因为开发FreeSWITCH,接触到Apache的函数库libapr。 对于其字符串函数的工作方式很不理解,请教一下。 这个函数的格式如下: char* apr_pstrndup ( apr_pool_t * p, const char * s, apr_size_t n ) Duplicate at most n characters of a string into memory allocated out of a pool; the new string will be NUL-terminated Parameters: p The pool to allocate out of s The string to duplicate n The maximum number of characters to duplicate Returns: The new string Remarks: The amount of memory allocated from the pool is the length of the returned string including the NUL terminator 看上去很好理解,就是从内存池中分配一个新的空间,把现有内容复制过去。 但是问题来了:我没有看到清理这片内存的函数。也就是说,这片被分配的内容,要一直等到内存池被销毁的时候,才会被清理吗?这样也太不科学了。 有哪位大神可以解答一下我的疑问?
使用LibLinphone发送dtmf进行IVR菜单选择问题
我用LibLinphone作为库开发实现sip电话的android APP,遇到了一个问题:我这里用FreeSwitch做SIP服务器,当我拨通电话听到IVR菜单时,我拨号发送dtmf信息时并没有实现菜单选择的功能,没有任何反映! 我下载了Linphone应用可以实现IVR菜单选择功能,但我使用Linphone源码在eclipse中直接运行后执行IVR菜单选择功能时仍然没有任何反映,不知是为什么,有没有大神能给小弟点提示,多谢!!!!!!!!!!!!
Sipml5发布到Apache上打不出去电话
各位大神,下午好,之前在网上下载的Sipml5Demo,结合后台Freeswitch配置好,在本地各个功能完全都能用起来,但是今天将sipml5Demo发布到Apache和IIS服务器上以后,用谷歌浏览器访问登陆都没问题,可是就是拨不出去号,一拨号就显示错误“Media stream permission deniedCall control”
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
前端 | 2. 正则
转载请注明以下: 本文转自清自以敬的博客:https://blog.csdn.net/qq_45791147 文章目录1.转义2.正则表达式初步2.1.匹配字符2.1.1.组成元素2.1.2.基础正则的设计 1.转义 转义的作用: 当某个字符在表达式中具有特殊含义,例如字符串引号中出现了引号,为了可以使用这些字符本身,而不是使用其在表达式中的特殊含义,则需要通过转义符“\”来构建该字符转义...
有哪些让程序员受益终生的建议
从业五年多,辗转两个大厂,出过书,创过业,从技术小白成长为基层管理,联合几个业内大牛回答下这个问题,希望能帮到大家,记得帮我点赞哦。 敲黑板!!!读了这篇文章,你将知道如何才能进大厂,如何实现财务自由,如何在工作中游刃有余,这篇文章很长,但绝对是精品,记得帮我点赞哦!!!! 一腔肺腑之言,能看进去多少,就看你自己了!!! 目录: 在校生篇: 为什么要尽量进大厂? 如何选择语言及方...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 free -m 其中:m表示兆,也可以用g,注意都要小写 Men:表示物理内存统计 total:表示物理内存总数(total=used+free) use...
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入 假设现有4个人...
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发...
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 演示地点演示 html代码如下` music 这个年纪 七月的风 音乐 ` 然后就是css`*{ margin: 0; padding: 0; text-decoration: none; list-...
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。
数据库优化 - SQL优化
以实际SQL入手,带你一步一步走上SQL优化之路!
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 cpp 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7 p...
通俗易懂地给女朋友讲:线程池的内部原理
餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
将代码部署服务器,每日早上定时获取到天气数据,并发送到邮箱。 也可以说是一个小型人工智障。 知识可以运用在不同地方,不一定非是天气预报。
经典算法(5)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹...
面试官:你连RESTful都不知道我怎么敢要你?
干货,2019 RESTful最贱实践
Docker 从入门到掉坑
Docker 介绍 简单的对docker进行介绍,可以把它理解为一个应用程序执行的容器。但是docker本身和虚拟机还是有较为明显的出入的。我大致归纳了一下,可以总结为以下几点: docker自身也有着很多的优点,关于它的优点,可以总结为以下几项: 安装docker 从 2017 年 3 月开始 docker 在原来的基础上分为两个分支版本: Docker CE 和 Doc...
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看...
白话阿里巴巴Java开发手册高级篇
不久前,阿里巴巴发布了《阿里巴巴Java开发手册》,总结了阿里巴巴内部实际项目开发过程中开发人员应该遵守的研发流程规范,这些流程规范在一定程度上能够保证最终的项目交付质量,通过在时间中总结模式,并推广给广大开发人员,来避免研发人员在实践中容易犯的错误,确保最终在大规模协作的项目中达成既定目标。 无独有偶,笔者去年在公司里负责升级和制定研发流程、设计模板、设计标准、代码标准等规范,并在实际工作中进行...
SQL-小白最佳入门sql查询一
不要偷偷的查询我的个人资料,即使你再喜欢我,也不要这样,真的不好;
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
Nginx 原理和架构
Nginx 是一个免费的,开源的,高性能的 HTTP 服务器和反向代理,以及 IMAP / POP3 代理服务器。Nginx 以其高性能,稳定性,丰富的功能,简单的配置和低资源消耗而闻名。 Nginx 的整体架构 Nginx 里有一个 master 进程和多个 worker 进程。master 进程并不处理网络请求,主要负责调度工作进程:加载配置、启动工作进程及非停升级。worker 进程负责处...
Python 编程开发 实用经验和技巧
Python是一门很灵活的语言,也有很多实用的方法,有时候实现一个功能可以用多种方法实现,我这里总结了一些常用的方法和技巧,包括小数保留指定位小数、判断变量的数据类型、类方法@classmethod、制表符中文对齐、遍历字典、datetime.timedelta的使用等,会持续更新......
YouTube排名第一的励志英文演讲《Dream(梦想)》
Idon’t know what that dream is that you have, I don't care how disappointing it might have been as you've been working toward that dream,but that dream that you’re holding in your mind, that it’s po...
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU...
程序员把地府后台管理系统做出来了,还有3.0版本!12月7号最新消息:已在开发中有github地址
第一幕:缘起 听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员…… 996程序员做的梦: 第一场:团队招募 为了应对地府管理危机,阎王打算找“人”开发一套地府后台管理系统,于是就在地府总经办群中发了项目需求。 话说还是中国电信的信号好,地府都是满格,哈哈!!! 经常会有外行朋友问:看某网站做的不错,功能也简单,你帮忙做一下? 而这次,面对这样的需求,这个程序员...
网易云6亿用户音乐推荐算法
网易云音乐是音乐爱好者的集聚地,云音乐推荐系统致力于通过 AI 算法的落地,实现用户千人千面的个性化推荐,为用户带来不一样的听歌体验。 本次分享重点介绍 AI 算法在音乐推荐中的应用实践,以及在算法落地过程中遇到的挑战和解决方案。 将从如下两个部分展开: AI算法在音乐推荐中的应用 音乐场景下的 AI 思考 从 2013 年 4 月正式上线至今,网易云音乐平台持续提供着:乐屏社区、UGC...
为什么要学数据结构?
一、前言 在可视化化程序设计的今天,借助于集成开发环境可以很快地生成程序,程序设计不再是计算机专业人员的专利。很多人认为,只要掌握几种开发工具就可以成为编程高手,其实,这是一种误解。要想成为一个专业的开发人员,至少需要以下三个条件: 1) 能够熟练地选择和设计各种数据结构和算法 2) 至少要能够熟练地掌握一门程序设计语言 3) 熟知所涉及的相关应用领域的知识 其中,后两个条件比较容易实现,而第一个...
金山办公上市,雷军心愿了却!
作者 | 胡巍巍 出品 | CSDN(ID:CSDNnews) 11月17日,大周末的,雷军微博发了个重磅消息: “明天将是里程碑式的一天,金山办公终于成功在科创板挂牌上市了! 从1988年金山创办到今天,WPS走了整整31年。 从1999年以金山办公为主体准备上市算起,这一天,我们等了20年。 WPS和金山的历程,这是一个坚持梦想并最终取得胜利的励志故事。期待大家的祝福!”...
8年经验面试官详解 Java 面试秘诀
作者 |胡书敏 责编 | 刘静 出品 | CSDN(ID:CSDNnews) 本人目前在一家知名外企担任架构师,而且最近八年来,在多家外企和互联网公司担任Java技术面试官,前后累计面试了有两三百位候选人。在本文里,就将结合本人的面试经验,针对Java初学者、Java初级开发和Java开发,给出若干准备简历和准备面试的建议。 Java程序员准备和投递简历的实...
面试官如何考察你的思维方式?
1.两种思维方式在求职面试中,经常会考察这种问题:北京有多少量特斯拉汽车?某胡同口的煎饼摊一年能卖出多少个煎饼?深圳有多少个产品经理?一辆公交车里能装下多少个乒乓球?一个正常成年人有多少根头发?这类估算问题,被称为费米问题,是以科学家费米命名的。为什么面试会问这种问题呢?这类问题能把两类人清楚地区分出来。一类是具有文科思维的人,擅长赞叹和模糊想象,它主要依靠的是人的第一反应和直觉,比如小孩...
17张图带你解析红黑树的原理!保证你能看懂!
二叉查找树 由于红黑树本质上就是一棵二叉查找树,所以在了解红黑树之前,咱们先来看下二叉查找树。 二叉查找树(Binary Search Tree),也称有序二叉树(ordered binary tree),排序二叉树(sorted binary tree),是指一棵空树或者具有下列性质的二叉树: 若任意结点的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若任意结点的...
相关热词 c# 引用mysql c#动态加载非托管dll c# 两个表数据同步 c# 返回浮点json c# imap 链接状态 c# 漂亮字 c# 上取整 除法 c#substring c#中延时关闭 c#线段拖拉
立即提问