由於實作 ONVIF 與 RTSP 的開發人員可能並不相同,因此在實作RTSP metadata stream時溝通可能會有誤解。以下對這種情況提出一種簡單的合作開發方式。
ONVIF:
當使用者想要建立一個 RTSP Stream 時,會先透過 GetStreamUri 詢問對應的 RTSP URI。
如果 GetStreamUri 的 Profile 內有定義 MetadataConfiguration,便表示後續使用者使用此 URI 建立 RTSP 時,RTSP 所回應的 SDP 內需要加入 metadata 的描述。
可以使用 IPC 的方式來通知 RTSP 加入 metadata。此處假設使用 shared memory,設定 gIsMetadata = TRUE。
RTSP:
當 RTSP 收到使用者的 Describe 之後,回應 SDP 之前,若發現 (gIsMetadata==TRUE),則在SDP內加入 metadata 對應的描述,否則維持原狀。
SDP例子:
m=application 0 RTP/AVP 107
a=control:rtsp://example.com/onvif_camera/metadata
a=recvonly
a=rtpmap
a=rtpmap:107 vnd.onvif.metadata/90000
ONVIF:
此時需要開始偵測系統內的各種狀態,若確認有對應的 Event 需要發送,可透過 Message Queue 或 PIPE 的方式送出 Event。
RTSP:
RTSP 在送出 Play Response之後,便會開始發送影音資料,此時由於 (gIsMetadata==TRUE),因此也需要發送 Event 資料,此時可透過 Message Queue 或 PIPE 取得 Event。
參考資料: