一直想測一直 FreeSWITCH 的視頻會(huì )議功能,但以前只有兩個(gè)支持 H263 的設備 (Huawei視頻電話(huà)及一個(gè) Xlite),未能好好體驗。最近買(mǎi)了兩個(gè) XPT8886 視頻電話(huà)及一個(gè) Bria 軟電話(huà)授權,總算是可以測試三方會(huì )議了。
首先,要在 sofia profile 中設置支持的視頻編碼,簡(jiǎn)單起見(jiàn)我直接在 vars.xml 中設置了:
<X-PRE-PROCESS cmd="set" data="global_codec_prefs=PCMU,PCMA,GSM,H264,H263-1998,H263"/>
<X-PRE-PROCESS cmd="set" data="outbound_codec_prefs=PCMU,PCMA,GSM,H264,H263-1998,H263"/>
首先將所有視頻設備設成只支持 H263,讓我所有支持視頻的設備連接互撥,測試均正常。然后將所有電話(huà)打入默認的電話(huà)會(huì )議號碼 3000 ,電話(huà)會(huì )議正常。經(jīng)過(guò)研究源代碼,發(fā)現流程是這樣的:
每個(gè)會(huì )議里都有一個(gè) video 線(xiàn)程
每個(gè)會(huì )議里會(huì )有一個(gè)標志,叫做 floor,一般來(lái)說(shuō),當前正在發(fā)言的人會(huì )擁有這個(gè) floor
擁有 floor 的人的視頻會(huì )廣播到所有的終端上,包括它自己
如果在會(huì )議中,另一個(gè)人開(kāi)始講話(huà),視頻就會(huì )發(fā)生切換,但切換的畫(huà)面會(huì )出現馬賽克,而且有些慢,即使在局域網(wǎng)環(huán)境中也如此。
接下來(lái)測試 H264,由于我華為的設備不支持H264只好放到一邊了。
全部打入 3000 以后發(fā)現 XPT8886 終端的視頻不能正常顯示,而 Bria 的則正常。百般測試無(wú)果只好查看源代碼了,最后發(fā)現,在 mod_conference 的 1011 行左右,有一段檢測 i-frame 的代碼,對于 Bria 能檢測通過(guò),而 XPT8886 發(fā)出的 RTP 包無(wú)論如何都檢測不通過(guò),后來(lái),直接將其改成 iframe = 1 ,視頻功能正常。
} else if (vid_frame->codec->implementation->ianacode == 99) { /* h.264 */
iframe = (*((int16_t *) vid_frame->data) >> 5 == 0x11);
畫(huà)質(zhì)明顯比 H263 好得多,切換也快得多。
在廣域網(wǎng)的環(huán)境下測了一下,效果還不錯。連接美國的 FreeSWITCH 服務(wù)器,發(fā)現視頻質(zhì)量很差,當然了,視頻需要到美國繞一圈再回來(lái),當然會(huì )大打折扣。準備哪天找個(gè)老外測一測,看看效果。