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