一直想測一直 FreeSWITCH 的視頻會議功能,但以前只有兩個支持 H263 的設(shè)備 (Huawei視頻電話及一個 Xlite),未能好好體驗(yàn)。最近買了兩個 XPT8886 視頻電話及一個 Bria 軟電話授權(quán),總算是可以測試三方會議了。
首先,要在 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)的電話會議號碼 3000 ,電話會議正常。經(jīng)過研究源代碼,發(fā)現(xiàn)流程是這樣的:
每個會議里都有一個 video 線程
每個會議里會有一個標(biāo)志,叫做 floor,一般來說,當(dāng)前正在發(fā)言的人會擁有這個 floor
擁有 floor 的人的視頻會廣播到所有的終端上,包括它自己
如果在會議中,另一個人開始講話,視頻就會發(fā)生切換,但切換的畫面會出現(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)境下測了一下,效果還不錯。連接美國的 FreeSWITCH 服務(wù)器,發(fā)現(xiàn)視頻質(zhì)量很差,當(dāng)然了,視頻需要到美國繞一圈再回來,當(dāng)然會大打折扣。準(zhǔn)備哪天找個老外測一測,看看效果。