0

我正在使用 pjsip 编写应用程序,我需要接收特定于应用程序的 RTCP 数据包。我正在查看pjmedia_rtcp_rx_rtcp(in pjmedia/src/pjmedia/rtcp.c) 的实现,它似乎只处理某些 RTCP 数据包,并且没有特定于应用程序的类型的案例。在未知数据包类型的情况下,它只会产生一个"Received unknown RTCP packet"诊断消息。

看起来我可以为接收到的 RTCP 数据包安装自己的处理程序,使用pjmedia_transport_attach. 但是,这将针对所有接收到的 RTCP 数据包调用,而不仅仅是针对特定应用程序的数据包。[如果它不是特定于应用程序的数据包,也许我可以调用以前的处理程序,这需要进一步调查。]

是否可以让 pjsip 在特定于应用程序的 RTCP 数据包上调用回调?如果没有,我如何在仍然使用 pjsip 的同时处理这样的 RTCP 数据包?

4

1 回答 1

3

尽管 pjsip 不直接支持特定于应用程序的 RTCP 数据包,但有一种方法可以捕获所有接收到的 RTCP 数据包并针对特定于应用程序的数据包采取行动。

第一步是创建一个媒体传输适配器,它位于流和网络传输 (UDP) 之间。on_create_media_transport您可以在回调中创建并附加其中之一。

接下来,在您的attach回调实现中,调用pjmedia_transport_attach()传递您自己的回调函数用于 RTP 和 RTCP 接收,保存回调参数中请求的原始回调。确切的细节可以在transport_adapter_sample.c(见函数transport_attach)中找到。

最后,您的 RTCP 回调 ( transport_rtcp_cbin transport_adapter_sample.c) 的实现可以在将接收到的 RTCP 数据包传递给原始回调之前做任何它想做的事情。

于 2014-03-10T21:34:54.293 回答