BFCP是為了SIP呼叫中實現presentation的二進制協議。開源庫libbfcp
如何協商角色
SIP 消息的SDP中有BFCP 的部分,其中s-only 代表要當服務器角色,c-only 代表要當client角色。confid, userid 都是需要在后續消息中對齊的。 通過port信息可以為后續bfcp建立連接。confid, floorid, userid 也是在SDP里告訴c-only的。mstrm:2 代表floor 對應的共享資源的codec 參數在SDP media description中對應的序號為2,SDP 里面是 a=label:2
m=application port UDP/BFCP *
a=floorctrl:s-only
a=confid:1
a=floorid:0 mstrm:2
a=userid:2
a=setup:passive
a=connection:new
BFCP的一些消息
-
Hello 和 HelloAck
client向server發Hello, server回復HelloAck。 需要定期發, 作為keep-alive(30s)。HelloAck消息里面會給出server所支持的primitive和attribute都有哪些。 -
FloorQuery 和FloorStatus
client向server查當前Floor的狀態, 主要場景是client 剛加會,需要初始化下自己的雙流狀態; server端根據實際情況通知當前是否有其他終端持有Floor, 有哪些終端在排隊等。 -
FloorRequest, FloorRequestStatus, FloorRequestStatusAck
-
FloorRelease, FloorRequestStatus, FloorRequestStatusAck
和FloorRequest 類似 -
Goodbye
要求server端釋放相關資源
server端主動發起共享
server端直接廣播FloorStatus, 并標記位Granted即可
FloorRequestStatus 和 FloorStatus的區別
FloorRequestStatus:
FloorStatu: