我正在使用pjsip编写应用程序,我需要接收特定于应用程序的RTCP数据包。我正在研究pjmedia_rtcp_rx_rtcp
(在pjmedia/src/pjmedia/rtcp.c
中)的实现,它似乎只处理某些RTCP数据包,并且没有特定于应用程序类型的情况。如果是未知的数据包类型,它只会生成"Received unknown RTCP packet"
诊断消息。
看起来我可以使用pjmedia_transport_attach
为收到的RTCP数据包安装自己的处理程序。但是,这将被称为所有收到的RTCP数据包,而不仅仅是针对应用程序特定的数据包。 [也许我可以调用前一个处理程序,如果它不是特定于应用程序的数据包,则需要进一步调查。]
是否可以让pjsip在特定于应用程序的RTCP数据包上调用回调?如果没有,我怎样才能在使用pjsip时处理这些RTCP数据包?
答案 0 :(得分:3)
虽然pjsip不直接支持特定于应用程序的RTCP数据包,但有一种方法可以捕获所有收到的RTCP数据包,并根据特定于应用程序的数据进行操作。
第一步是创建一个位于流和网络传输(UDP)之间的Media Transport Adapter。您可以在on_create_media_transport
回调中创建并附加其中一个。
接下来,在attach
回调的实现中,调用pjmedia_transport_attach()
传递自己的回调函数以进行RTP和RTCP接收,保存回调参数中请求的原始回调。可以在transport_adapter_sample.c
中找到确切的详细信息(请参阅函数transport_attach
)。
最后,您对RTCP回调(transport_rtcp_cb
中的transport_adapter_sample.c
)的实现可以对接收到的RTCP数据包执行任何操作,然后再将其传递给原始回调。