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: