2014-03-04 37 views
0

我正在使用pjsip編寫應用程序,我需要接收特定於應用程序的RTCP數據包。我正在研究pjmedia_rtcp_rx_rtcp(在pjmedia/src/pjmedia/rtcp.c)的實現,它似乎只處理某些RTCP數據包,並且沒有針對特定於應用程序的類型的情況。在未知數據包類型的情況下,它只會產生一個"Received unknown RTCP packet"診斷消息。pjsip是否支持特定於應用程序的RTCP數據包?

看起來我可以使用pjmedia_transport_attach爲接收到的RTCP數據包安裝我自己的處理程序。但是,這將要求全部收到RTCP數據包,而不是僅針對特定於應用程序的數據包。 [也許我可以打電話給以前的處理程序,如果它不是一個應用程序特定的數據包,這需要進一步調查。]

是否有可能使pjsip調用回調特定於應用程序的RTCP數據包?如果不是,我怎樣才能處理這樣的RTCP數據包,同時仍然使用pjsip?

回答

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_cbtransport_adapter_sample.c)的實現可以在接收到的RTCP數據包之前做任何事情,然後再將它傳遞給原始回調。

相關問題