如何在 SIP/SDP 呼叫中启动 RTP 流
Posted
技术标签:
【中文标题】如何在 SIP/SDP 呼叫中启动 RTP 流【英文标题】:How to start RTP stream inside a SIP/SDP call 【发布时间】:2010-11-20 14:12:24 【问题描述】:我已经成功地使用 Java 的 JAIN-SIP API 建立了一个 SIP 呼叫。
现在我想在建立对话后播放一些视频。我读过 SDP 和 RTP 可以做到这一点,并且我找到了多个关于如何在 SIP 数据包中定义 SDP/RTP 主体的示例。
但是,一旦您在节点上协商了能力等,您如何实际启动 RTP 流?您是在 Java 应用程序外部还是内部启动 RTP 流服务器?如果是这样,怎么做?链接是什么?
在我能在网上找到的内容中,节点只是“开始交换 RTP 数据包”。
谢谢。
【问题讨论】:
【参考方案1】:您需要一个 RTP 堆栈。刚开始时,最好将所有内容放在同一个应用程序中。 JMF(Java Media Framework),(JMF-RTP Architecture) 是一个很好的起点,尽管还有其他类似 JRTP。 JMF视频详情可查看here
【讨论】:
【参考方案2】:尝试搜索关键字“re-INVITE”和适当的示例。 一旦您发现自己需要另一个音频/视频流到现有 SIP 呼叫中并使用已建立的媒体,您需要开始新的 INVITE / OK / ACK 序列。 新流可以替换您现有的媒体流,也可以添加。这是您的选择,这取决于信号。当然,您需要具有能力/编解码器支持的 RTP 堆栈来满足您的实际需求。
人们经常使用它来处理 SIP 呼叫中的 T.38 传真切换。您可以从支持 T.38(或实际上具有任何基于 IP 的调制解调器支持)的设备获取所需的参考日志转储调用。请记住,您的语音流应该是 LBR(低比特率)编解码器,例如 G.729 或 G.723.1。这可以为您带来许多答案,至少“何时”开始 RTP 以及如何发出信号。至少使用提议的新 RTP 流启动 INVITE,您应该从一开始就准备好接收该流。您可以在 OK 后使用建议的端口“where”发送 RTP 开始发送 RTP。
【讨论】:
以上是关于如何在 SIP/SDP 呼叫中启动 RTP 流的主要内容,如果未能解决你的问题,请参考以下文章
怎么从Wireshark过滤出单个VoLTE用户呼叫和媒体流