我正在使用pjsip编写一个应用程序,我需要接收特定于应用程序的RTCP数据包。我正在研究pjmedia_rtcp_rx_rtcp的实现(在pjmedia/src/pjmedia/rtcp.c中),它似乎只处理某些RTCP数据包,并且没有应用程序特定类型的情况。在未知数据包类型的情况下,它只会生成"Received unknown RTCP packet"诊断消息。
看来我可以使用pjmedia_transport_attach为接收到的RTCP数据包安装自己的处理程序。然而,对于所有接收到的RTCP数据包,这将被调用,而不仅仅是对于特定于应用程序的数据包。也许我可以打电话给以前的处理程序,如果它不是一个特定于应用程序的数据包,这需要进一步的调查。
是否有可能对特定于应用程序的RTCP数据包进行pjsip调用?如果没有,我如何在仍然使用pjsip的同时处理这样的RTCP数据包?
发布于 2014-03-10 21:34:54
尽管pjsip不直接支持特定于应用程序的RTCP数据包,但是有一种方法可以捕获所有接收到的RTCP数据包并对那些特定于应用程序的数据包采取行动。
第一步是创建位于流和网络传输(UDP)之间的媒体传输适配器。您可以在on_create_media_transport回调中创建并附加其中一个。
接下来,在实现attach回调时,调用pjmedia_transport_attach(),为RTP和RTCP接收传递自己的回调函数,保存回调参数中请求的原始回调。详细信息可以在transport_adapter_sample.c中找到(参见函数transport_attach)。
最后,RTCP回调(transport_rtcp_cb in transport_adapter_sample.c)的实现在将其传递给原始回调之前,可以对接收的RTCP数据包做它想做的任何事情。
https://stackoverflow.com/questions/22162019
复制相似问题