如何在 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用户呼叫和媒体流

如何在 ffmpeg 中合并两个输入 rtp 流?

如何将 RTP/H264 流写入文件

如何使用vlc通过tcp协议强制流RTP视频?

如何使用ffmpeg实现h264流传输+H264实现RTP传输数据

如何指定VLC的RTSP拉流方式(RTP over UDP/TCP)