SDP在pjsip中的应用

来源:互联网 发布:明星年龄造假知乎 编辑:程序博客网 时间:2024/06/06 05:30
  • SDP的定义参见http://www.ietf.org/rfc/rfc2327.txt
  • SDP在pjsip中的状态转换(图片来自pjsip开发文档)

  • 结合pjsip2.0源码分析一下上面这张图:
    • 假设两个人做视频通话,一方是拨打者,一方是接听者,拨打者发送sip invite消息, 接听方接收消息
    • 拨打者开始打电话,会回调on_make_call_med_tp_complete, 在该方法中调用pjsua_media_channel_create_sdp创建本地的sdp, 并保存在pjmedia_sdp_neg.neg_local_sdp,此sdp在发送invite时会一起发给接听方, 此时拨打方的sdp状态即LOCAL OFFER。
    • 当接听者收到sdp消息后,调用inv_check_sdp_in_incoming_msg,将收到sdp保存在pjmedia_sdp_neg.neg_remote_sdp,
      然后回调pjsua_call_on_rx_offer创建本地sdp(方法同样是pjsua_media_channel_create_sdp), 将该sdp保存在pjmedia_sdp_neg.neg_local_sdp,
      此时sdp的状态变为WAIT NEGO, 然后在inv_check_sdp_in_incoming_msg中调用inv_negotiate_sdp进行协商
    • 当拨打方收到接听方返回的sdp, 调用inv_check_sdp_in_incoming_msg, 将收到的sdp保存在pjmedia_sdp_neg.neg_remote_sdp, 然后回调pjsua_call_on_rx_answer, 此时sdp的状态变为WAIT NEGO, 然后在inv_check_sdp_in_incoming_msg中调用inv_negotiate_sdp进行协商
  • 如何生成SDP?
    • 生成本地SDP
    • 由收到的对端SDP生成本地SDP(接听方)
  • SDP的协商
    • 匹配相应的media, 如audio,video 在sdp中的media的顺序很重要,如果乱序,很可能导致协商不成功, 个人觉得这里程序逻辑有点问题。
    • 匹配codec, 要media format, 有两种情况,是否允许异步,即通信双方编码格式不一样。
来自:http://blog.csdn.net/mahout_xb/article/details/8473210
0 0
原创粉丝点击