linphone呼叫流程

首先是jni入口:
linphonecore_jni.cc -> linphone_core_invite_address_with_params()

然后到linphonecore:
linphone_core_invite_address_with_params()

這里會判斷是否到達(dá)最大通話數(shù):
linphone_core_can_we_add_call(LinphoneCore *lc)

沒有的話會創(chuàng)建一個LinphoneCall:

 linphonecall.c -> linphone_call_init_common() // 一些基本的初始化,設(shè)置audio和video的rtp及rtcp本地端口 ```

創(chuàng)建完成call后,將call添加進(jìn)calls中狰挡,然后將這個call設(shè)置為current_call:
``` lc->current_call=call; ```

緊接著設(shè)置狀態(tài):
``` linphone_call_set_state (call,LinphoneCallOutgoingInit,"Starting outgoing call"); ```

再接著就會初始化媒體流了:
``` linphone_call_init_media_streams(call) ```

這里會初始化audio和video媒體流吴趴,我這里只看audio:
``` linphone_call_init_audio_stream() //這里初始化語音數(shù)據(jù)流 ```

語音數(shù)據(jù)流初始化會調(diào)用到mediastreamer2模塊:
``` audiostream.c -> audio_stream_new2(...) ```

創(chuàng)建rtpsession及一系列初始化:
``` mediastream.c -> create_duplex_rtpsession(...)  ```

這里就會調(diào)用到oRTP模塊:
``` rtpsession.c -> rtp_session_new(...) ```

創(chuàng)建完rtpsession后會進(jìn)行一系列設(shè)置,比如:
``` rtpsession_inet.c -> rtp_session_set_local_addr(...) // 設(shè)置rtp本地地址 ```
這里依次創(chuàng)建rtp和rtcp的socket亭畜,本地端口大于0則使用傳進(jìn)來的端口扮休,否則由系統(tǒng)分配。

創(chuàng)建完rtpsession后拴鸵,mediastreamer2模塊才會創(chuàng)建audiastream:
``` obj=audio_stream_new_with_sessions(&sessions);  ```

添加發(fā)送的filter:
``` stream->ms.rtpsend=ms_filter_new(MS_RTP_SEND_ID); ```

為stream注冊rtp事件隊列:
``` rtp_session_register_event_queue(stream->ms.sessions.rtp_session,stream->ms.evq); ```

添加回聲消除filter玷坠,其它初始化:

stream->ec=ms_filter_new_from_desc(ec_desc);
stream->play_dtmfs=TRUE;
stream->use_gc=FALSE;
stream->use_agc=FALSE;
stream->use_ng=FALSE;
stream->features=AUDIO_STREAM_FEATURE_ALL;



初始化完成了oRTP和mediastreamer2,再次回到``` linphone_call_init_media_streams() ```

如果是隨機(jī)端口 再重新取一次本地端口號:

if (call->media_ports[0].rtp_port==-1){
port_config_set_random_choosed(call,0,audiostream->ms.sessions.rtp_session);
}


接著劲藐,如果支持回聲限制,則根據(jù)配置信息設(shè)置一些相關(guān)參數(shù):
``` audio_stream_set_echo_canceller_params(audiostream,len,delay,framesize); ```

是否支持獲取控制八堡,以便不獲取噪聲,有個噪聲的gateway要設(shè)置:

int enabled=lp_config_get_int(lc->config,"sound","noisegate",0);

audio_stream_enable_noise_gate(audiostream,enabled);


發(fā)起呼叫: 
``` linphonecall.c -> linphone_core_start_invite(lc,call,NULL); ```

設(shè)置本地媒體格式描述:
``` linphonecall.c -> linphone_call_make_local_media_description_with_params() ```

真正呼叫,發(fā)送invite請求:
``` sal_op_call.c -> sal_call(call->op,from,real_url)  ```
        ```sal_op_call_fill_cbs(op);  // 設(shè)置事件回調(diào) ```

設(shè)置狀態(tài)LinphoneCallOutgoingProgress:
``` linphone_call_set_state(call,LinphoneCallOutgoingProgress,"Outgoing call in progress"); ```


至此聘芜,呼叫請求已發(fā)出秕重,等待服務(wù)端響應(yīng)。

處理響應(yīng)
``` sal_op_call.c -> call_process_response() ```

收到100 Trying厉膀,不處理

收到180 Ringing(或183):
``` callbacks.c -> call_ringing()  // 播放鈴聲 ```
沒有sdp就播放本地鈴聲溶耘,設(shè)置狀態(tài)LinphoneCallOutgoingRinging
有就播放彩鈴,設(shè)置狀態(tài)LinphoneCallOutgoingEarlyMedia

收到200 OK:
``` callbacks.c -> call_accepted()   ```
設(shè)置狀態(tài)LinphoneCallConnected

收到ACK:
``` callbacks.c ->call_ack() ```
設(shè)置狀態(tài)LinphoneCallStreamsRunning

通話建立服鹅,呼叫流程結(jié)束凳兵。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市企软,隨后出現(xiàn)的幾起案子庐扫,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,695評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件形庭,死亡現(xiàn)場離奇詭異铅辞,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)萨醒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評論 3 399
  • 文/潘曉璐 我一進(jìn)店門斟珊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人富纸,你說我怎么就攤上這事囤踩。” “怎么了晓褪?”我有些...
    開封第一講書人閱讀 168,130評論 0 360
  • 文/不壞的土叔 我叫張陵堵漱,是天一觀的道長。 經(jīng)常有香客問我涣仿,道長勤庐,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,648評論 1 297
  • 正文 為了忘掉前任好港,我火速辦了婚禮埃元,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘媚狰。我一直安慰自己岛杀,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,655評論 6 397
  • 文/花漫 我一把揭開白布崭孤。 她就那樣靜靜地躺著类嗤,像睡著了一般。 火紅的嫁衣襯著肌膚如雪辨宠。 梳的紋絲不亂的頭發(fā)上遗锣,一...
    開封第一講書人閱讀 52,268評論 1 309
  • 那天,我揣著相機(jī)與錄音嗤形,去河邊找鬼精偿。 笑死,一個胖子當(dāng)著我的面吹牛赋兵,可吹牛的內(nèi)容都是我干的笔咽。 我是一名探鬼主播,決...
    沈念sama閱讀 40,835評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼霹期,長吁一口氣:“原來是場噩夢啊……” “哼叶组!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起历造,我...
    開封第一講書人閱讀 39,740評論 0 276
  • 序言:老撾萬榮一對情侶失蹤甩十,失蹤者是張志新(化名)和其女友劉穎船庇,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體侣监,經(jīng)...
    沈念sama閱讀 46,286評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鸭轮,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,375評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了橄霉。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片窃爷。...
    茶點(diǎn)故事閱讀 40,505評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖酪劫,靈堂內(nèi)的尸體忽然破棺而出吞鸭,到底是詐尸還是另有隱情寺董,我是刑警寧澤覆糟,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站遮咖,受9級特大地震影響滩字,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜御吞,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,873評論 3 333
  • 文/蒙蒙 一麦箍、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧陶珠,春花似錦挟裂、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至暑脆,卻和暖如春渠啤,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背添吗。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評論 1 272
  • 我被黑心中介騙來泰國打工沥曹, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人碟联。 一個月前我還...
    沈念sama閱讀 48,921評論 3 376
  • 正文 我出身青樓妓美,卻偏偏與公主長得像,于是被迫代替她去往敵國和親鲤孵。 傳聞我的和親對象是個殘疾皇子部脚,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,515評論 2 359

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)裤纹,斷路器委刘,智...
    卡卡羅2017閱讀 134,702評論 18 139
  • 教程一:視頻截圖(Tutorial 01: Making Screencaps) 首先我們需要了解視頻文件的一些基...
    90后的思維閱讀 4,710評論 0 3
  • 音視頻同步事關(guān)多媒體產(chǎn)品的最直觀用戶體驗丧没,是音視頻媒體數(shù)據(jù)傳輸和渲染播放的最基本質(zhì)量保證。音視頻如果不同步锡移,有可能...
    weizhenwei閱讀 12,980評論 7 18
  • RTSP SDP RTP/RTCP 介紹應(yīng)用層 RTSP呕童、SDP; 傳輸層 RTP淆珊、TCP夺饲、UDP; 網(wǎng)絡(luò)層 IP...
    Atom_Woo閱讀 3,857評論 0 7
  • A1 夜靜無人 唯見風(fēng)聲闃寂 月亦幻虛 目觸傷及往昔 別時長汀處 水擊 望斷 往事隨光陰流去 只剩嘆息 A2 此刻...
    挽好閱讀 328評論 0 3