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