5

I'm attempting to access and save the metadata stream from an IP camera.

So far I have managed to save the metadata with:

openRTSP -b 400000 -K -t rtsp://username:password@192.168.2.4:5554/live/ch1

This creates a metadata file application-VND.ONVIF.METADATA-2 (sample below) however this also streams the video file and saves it to: video-H264-1 in the current directory. I would much prefer not to stream the video data as I have no use for it and bandwidth is an issue with multiple streams.

Metadata Sample

user@server:~# tail -n 1 application-VND.ONVIF.METADATA-2 
<tt:MetadataStream xmlns:tt="http://www.onvif.org/ver10/schema" xmlns:wsnt="http://docs.oasis-open.org/wsn/b-2"><tt:VideoAnalytics><tt:Frame UtcTime="2022-04-02T06:55:13.577000"><tt:Transformation><tt:Translate x="-1.0" y="1.0"/><tt:Scale x="2.0" y="-2.0"/></tt:Transformation><tt:Object ObjectId="39242"><tt:Appearance><tt:Shape><tt:BoundingBox left="0.949999988079071" top="0.0" right="0.981249988079071" bottom="0.251800000667572"/><tt:CenterOfGravity x="0.965624988079071" y="0.125900000333786"/></tt:Shape><tt:Class><tt:ClassCandidate><tt:Type>Person</tt:Type><tt:Likelihood>0.47999998927116394</tt:Likelihood></tt:ClassCandidate></tt:Class></tt:Appearance></tt:Object></tt:Frame><tt:Frame UtcTime="2022-04-02T06:55:13.577000"><tt:Transformation><tt:Translate x="-1.0" y="1.0"/><tt:Scale x="2.0" y="-2.0"/></tt:Transformation><tt:Object ObjectId="39283"><tt:Appearance><tt:Shape><tt:BoundingBox left="0.21143999695777893" top="0.2988300025463104" right="0.33105000853538513" bottom="0.9925199747085571"/><tt:CenterOfGravity x="0.27124500274658203" y="0.6456749886274338"/></tt:Shape><tt:Class><tt:ClassCandidate><tt:Type>Person</tt:Type><tt:Likelihood>0.4699999988079071</tt:Likelihood></tt:ClassCandidate></tt:Class></tt:Appearance></tt:Object></tt:Frame><tt:Frame UtcTime="2022-04-02T06:55:13.577000"><tt:Transformation><tt:Translate x="-1.0" y="1.0"/><tt:Scale x="2.0" y="-2.0"/></tt:Transformation><tt:Object ObjectId="39287"><tt:Appearance><tt:Shape><tt:BoundingBox left="0.20412999391555786" top="0.28610000014305115" right="0.33774998784065247" bottom="0.6600499749183655"/><tt:CenterOfGravity x="0.27093999087810516" y="0.4730749875307083"/></tt:Shape><tt:Class><tt:ClassCandidate><tt:Type>Person</tt:Type><tt:Likelihood>0.23000000417232513</tt:Likelihood></tt:ClassCandidate></tt:Class></tt:Appearance></tt:Object></tt:Frame><tt:Frame UtcTime="2022-04-02T06:55:13.577000"><tt:Transformation><tt:Translate x="-1.0" y="1.0"/><tt:Scale x="2.0" y="-2.0"/></tt:Transformation><tt:Object ObjectId="39288"><tt:Appearance><tt:Shape><tt:BoundingBox left="0.6440899968147278" top="0.0" right="0.7041800022125244" bottom="0.19472000002861023"/><tt:CenterOfGravity x="0.6741349995136261" y="0.09736000001430511"/></tt:Shape><tt:Class><tt:ClassCandidate><tt:Type>Person</tt:Type><tt:Likelihood>0.18000000715255737</tt:Likelihood></tt:ClassCandidate></tt:Class></tt:Appearance></tt:Object></tt:Frame><tt:Frame UtcTime="2022-04-02T06:55:13.577000"><tt:Transformation><tt:Translate x="-1.0" y="1.0"/><tt:Scale x="2.0" y="-2.0"/></tt:Transformation><tt:Object ObjectId="39289"><tt:Appearance><tt:Shape><tt:BoundingBox left="0.29583001136779785" top="0.30309998989105225" right="0.4729200005531311" bottom="0.7376400232315063"/><tt:CenterOfGravity x="0.3843750059604645" y="0.5203700065612793"/></tt:Shape><tt:Class><tt:ClassCandidate><tt:Type>Person</tt:Type><tt:Likelihood>0.18000000715255737</tt:Likelihood></tt:ClassCandidate></tt:Class></tt:Appearance></tt:Object></tt:Frame></tt:VideoAnalytics></tt:MetadataStream>
Almost usable
user@server:~# openRTSP -b 400000 -K -t rtsp://username:password@192.168.2.4:5554/live/ch1

STDOUT:

Created new TCP socket 3 for connection
Connecting to 192.168.2.4, port 5554 on socket 3...
...remote connection opened
Sending request: OPTIONS rtsp://username:password@192.168.2.4:5554/live/ch1 RTSP/1.0
CSeq: 2
User-Agent: openRTSP (LIVE555 Streaming Media v2020.01.19)


Received 115 new bytes of response data.
Received a complete OPTIONS response:
RTSP/1.0 200 OK
CSeq: 2
Public: OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE, GET_PARAMETER, SET_PARAMETER


Sending request: DESCRIBE rtsp://username:password@192.168.2.4:5554/live/ch1 RTSP/1.0
CSeq: 3
User-Agent: openRTSP (LIVE555 Streaming Media v2020.01.19)
Accept: application/sdp


Received 156 new bytes of response data.
Received a complete DESCRIBE response:
RTSP/1.0 401 Unauthorized
CSeq: 3
WWW-Authenticate: Digest realm="ITX_VABOX", nonce="6247f394ff1fb1c1acaa90dcfec31e506cf149052cad069b41fb45a9b913e69a"


Resending...
Sending request: DESCRIBE rtsp://username:password@192.168.2.4:5554/live/ch1 RTSP/1.0
CSeq: 4
Authorization: Digest username="username", realm="ITX_VABOX", nonce="6247f394ff1fb1c1acaa90dcfec31e506cf149052cad069b41fb45a9b913e69a", uri="rtsp://username:password@192.168.2.4:5554/live/ch1", response="6b90e55e0af2db247e4ea2c674e58b38"
User-Agent: openRTSP (LIVE555 Streaming Media v2020.01.19)
Accept: application/sdp


Received 592 new bytes of response data.
Received a complete DESCRIBE response:
RTSP/1.0 200 OK
CSeq: 4
Content-Base: rtsp://username:password@192.168.2.4:5554/live/ch1
Content-Type: application/sdp
Content-Length: 447

v=0
o=- 1 1 IN IP4 192.168.2.4
s=Media Server
t=0 0
a=type:broadcast
c=IN IP4 0.0.0.0
m=video 0 RTP/AVP 96
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1;profile-level-id=64001F;sprop-parameter-sets=Z0IAKpY1QPAET8s3BQEFAg==,aM48gA==
a=control:rtsp://username:password@192.168.2.4:5554/live/ch1/video
m=application 0 RTP/AVP 97
a=rtpmap:97 VND.ONVIF.METADATA/8000
a=control:rtsp://username:password@192.168.2.4:5554/live/ch1/meta

Opened URL "rtsp://username:password@192.168.2.4:5554/live/ch1", returning a SDP description:
v=0
o=- 1 1 IN IP4 192.168.2.4
s=Media Server
t=0 0
a=type:broadcast
c=IN IP4 0.0.0.0
m=video 0 RTP/AVP 96
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1;profile-level-id=64001F;sprop-parameter-sets=Z0IAKpY1QPAET8s3BQEFAg==,aM48gA==
a=control:rtsp://username:password@192.168.2.4:5554/live/ch1/video
m=application 0 RTP/AVP 97
a=rtpmap:97 VND.ONVIF.METADATA/8000
a=control:rtsp://username:password@192.168.2.4:5554/live/ch1/meta

Created receiver for "video/H264" subsession (client ports 41390-41391)
Created receiver for "application/VND.ONVIF.METADATA" subsession (client ports 54122-54123)
Sending request: SETUP rtsp://username:password@192.168.2.4:5554/live/ch1/video RTSP/1.0
CSeq: 5
Authorization: Digest username="username", realm="ITX_VABOX", nonce="6247f394ff1fb1c1acaa90dcfec31e506cf149052cad069b41fb45a9b913e69a", uri="rtsp://username:password@192.168.2.4:5554/live/ch1", response="a7a7d51269283cd92b37e41dd8889109"
User-Agent: openRTSP (LIVE555 Streaming Media v2020.01.19)
Transport: RTP/AVP/TCP;unicast;interleaved=0-1


Received 128 new bytes of response data.
Received a complete SETUP response:
RTSP/1.0 200 OK
CSeq: 5
Transport: RTP/AVP/TCP;unicast;interleaved=0-1
Session: 05EB326D3901E880B71E1370F83E85;timeout=60


Setup "video/H264" subsession (client ports 41390-41391)
Sending request: SETUP rtsp://username:password@192.168.2.4:5554/live/ch1/meta RTSP/1.0
CSeq: 6
Authorization: Digest username="username", realm="ITX_VABOX", nonce="6247f394ff1fb1c1acaa90dcfec31e506cf149052cad069b41fb45a9b913e69a", uri="rtsp://username:password@192.168.2.4:5554/live/ch1", response="a7a7d51269283cd92b37e41dd8889109"
User-Agent: openRTSP (LIVE555 Streaming Media v2020.01.19)
Transport: RTP/AVP/TCP;unicast;interleaved=2-3
Session: 05EB326D3901E880B71E1370F83E85


Received a complete SETUP response:
RTSP/1.0 200 OK
CSeq: 6
Transport: RTP/AVP/TCP;unicast;interleaved=2-3
Session: 05EB326D3901E880B71E1370F83E85;timeout=60


Setup "application/VND.ONVIF.METADATA" subsession (client ports 54122-54123)
Created output file: "video-H264-1"
Created output file: "application-VND.ONVIF.METADATA-2"
Sending request: PLAY rtsp://username:password@192.168.2.4:5554/live/ch1 RTSP/1.0
CSeq: 7
Authorization: Digest username="username", realm="ITX_VABOX", nonce="6247f394ff1fb1c1acaa90dcfec31e506cf149052cad069b41fb45a9b913e69a", uri="rtsp://username:password@192.168.2.4:5554/live/ch1", response="b7bf5ee1ed4dab7afcb85bede5e7e785"
User-Agent: openRTSP (LIVE555 Streaming Media v2020.01.19)
Session: 05EB326D3901E880B71E1370F83E85
Range: npt=0.000-


Received a complete PLAY response:
RTSP/1.0 200 OK
CSeq: 7
Session: 05EB326D3901E880B71E1370F83E85
Range: clock=20220402T065513.225Z-
RTP-Info: url=rtsp://username:password@192.168.2.4:5554/live/ch1/video?;seq=29232;rtptime=2063989750,url=rtsp://username:password@192.168.2.4:5554/live/ch1/meta?;seq=29232;rtptime=2070061960


Started playing session
Receiving streamed data (signal with "kill -HUP 492099" or "kill -USR1 492099" to terminate)...
^C

Stream Discovery

user@server:~# gst-discoverer-1.0 -v -t 60 rtsp://username:password@192.168.2.4:5554/live/ch3

Done discovering rtsp://username:pass@192.168.2.4:5554/live/ch1
Analyzing URI timed out

Topology:
  container: application/rtsp
    unknown: application/x-rtp, media=(string)video, payload=(int)96, clock-rate=(int)90000, encoding-name=(string)H264, packetization-mode=(string)1, profile-level-id=(string)64001F, sprop-parameter-sets=(string)"Z0IAKpY1QPAET8s3BQEFAg\=\=\,aM48gA\=\=", a-type=(string)broadcast, npt-start=(guint64)23571980000000, play-speed=(double)1, play-scale=(double)1, ssrc=(uint)1304347240
      video: video/x-h264, stream-format=(string)avc, alignment=(string)au, codec_data=(buffer)0142002affe100106742002a963540f0044fcb370501050201000468ce3c80, level=(string)4.2, profile=(string)baseline, width=(int)1920, height=(int)1080, framerate=(fraction)0/1, interlace-mode=(string)progressive, chroma-format=(string)4:2:0, bit-depth-luma=(uint)8, bit-depth-chroma=(uint)8, parsed=(boolean)true
        Tags:
          video codec: H.264 (Baseline Profile)
        
        Codec:
          video/x-h264, stream-format=(string)avc, alignment=(string)au, codec_data=(buffer)0142002affe100106742002a963540f0044fcb370501050201000468ce3c80, level=(string)4.2, profile=(string)baseline, width=(int)1920, height=(int)1080, framerate=(fraction)0/1, interlace-mode=(string)progressive, chroma-format=(string)4:2:0, bit-depth-luma=(uint)8, bit-depth-chroma=(uint)8, parsed=(boolean)true
        Additional info:
          None
        Stream ID: b71011accfcd9e6ac1d42a60b4611071674cf9321b63a6b8cc4a6b480fca3e9f/0/video:0:0:RTP:AVP:96
        Width: 1920
        Height: 1080
        Depth: 24
        Frame rate: 0/1
        Pixel aspect ratio: 1/1
        Interlaced: false
        Bitrate: 0
        Max bitrate: 0

Properties:
  Duration: 99:99:99.999999999
  Seekable: no
  Live: yes
  Tags: 
      video codec: H.264 (Baseline Profile)


Given the information here is there any way I access only the metadata?

Other things I've tried.

gst-launch-1.0 rtspsrc location=rtsp://username:password@192.168.2.4:5554/live/ch3 ! application/x-rtp, media=application ! fakesink dump=true >> cap.xml

This creates cap.xml file with somewhat encoded metadata. I believe this also streams the video data so that and the encoding is not ideal. It also tends to die periodically.

cap.xml sample

Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
Progress: (open) Opening Stream
Progress: (connect) Connecting to rtsp://username:password@192.168.2.4:5554/live/ch3
Progress: (open) Retrieving server options
Progress: (open) Retrieving media info
Progress: (request) SETUP stream 0
Progress: (request) SETUP stream 1
Progress: (open) Opened Stream
Setting pipeline to PLAYING ...
New clock: GstSystemClock
Progress: (request) Sending PLAY request
Progress: (request) Sending PLAY request
Progress: (request) Sent PLAY request
WARNING: from element /GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0: Could not read from resource.
Additional debug info:
gstrtspsrc.c(5768): gst_rtspsrc_reconnect (): /GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0:
Could not receive any UDP packets for 5.0000 seconds, maybe your firewall is blocking it. Retrying using a tcp connection.
00000000 (0x7f85bc009cf0): 80 e1 72 31 84 de b4 2e 5e 65 1d 2c 3c 74 74 3a  ..r1....^e.,<tt:
00000010 (0x7f85bc009d00): 4d 65 74 61 64 61 74 61 53 74 72 65 61 6d 20 78  MetadataStream x
00000020 (0x7f85bc009d10): 6d 6c 6e 73 3a 74 74 3d 22 68 74 74 70 3a 2f 2f  mlns:tt="http://
00000030 (0x7f85bc009d20): 77 77 77 2e 6f 6e 76 69 66 2e 6f 72 67 2f 76 65  www.onvif.org/ve
00000040 (0x7f85bc009d30): 72 31 30 2f 73 63 68 65 6d 61 22 20 78 6d 6c 6e  r10/schema" xmln
00000050 (0x7f85bc009d40): 73 3a 77 73 6e 74 3d 22 68 74 74 70 3a 2f 2f 64  s:wsnt="http://d
00000060 (0x7f85bc009d50): 6f 63 73 2e 6f 61 73 69 73 2d 6f 70 65 6e 2e 6f  ocs.oasis-open.o
00000070 (0x7f85bc009d60): 72 67 2f 77 73 6e 2f 62 2d 32 22 3e 3c 74 74 3a  rg/wsn/b-2"><tt:
00000080 (0x7f85bc009d70): 56 69 64 65 6f 41 6e 61 6c 79 74 69 63 73 3e 3c  VideoAnalytics><
00000090 (0x7f85bc009d80): 74 74 3a 46 72 61 6d 65 20 55 74 63 54 69 6d 65  tt:Frame UtcTime
000000a0 (0x7f85bc009d90): 3d 22 32 30 32 32 2d 30 34 2d 30 32 54 30 37 3a  ="2022-04-02T07:
000000b0 (0x7f85bc009da0): 32 34 3a 34 31 2e 36 33 30 30 30 30 22 3e 3c 74  24:41.630000"><t
000000c0 (0x7f85bc009db0): 74 3a 54 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e  t:Transformation
000000d0 (0x7f85bc009dc0): 3e 3c 74 74 3a 54 72 61 6e 73 6c 61 74 65 20 78  ><tt:Translate x
000000e0 (0x7f85bc009dd0): 3d 22 2d 31 2e 30 22 20 79 3d 22 31 2e 30 22 2f  ="-1.0" y="1.0"/
000000f0 (0x7f85bc009de0): 3e 3c 74 74 3a 53 63 61 6c 65 20 78 3d 22 32 2e  ><tt:Scale x="2.
00000100 (0x7f85bc009df0): 30 22 20 79 3d 22 2d 32 2e 30 22 2f 3e 3c 2f 74  0" y="-2.0"/></t
00000110 (0x7f85bc009e00): 74 3a 54 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e  t:Transformation
00000120 (0x7f85bc009e10): 3e 3c 74 74 3a 4f 62 6a 65 63 74 20 4f 62 6a 65  ><tt:Object Obje
00000130 (0x7f85bc009e20): 63 74 49 64 3d 22 32 30 30 39 34 33 22 3e 3c 74  ctId="200943"><t
00000140 (0x7f85bc009e30): 74 3a 41 70 70 65 61 72 61 6e 63 65 3e 3c 74 74  t:Appearance><tt
00000150 (0x7f85bc009e40): 3a 53 68 61 70 65 3e 3c 74 74 3a 42 6f 75 6e 64  :Shape><tt:Bound
00000160 (0x7f85bc009e50): 69 6e 67 42 6f 78 20 6c 65 66 74 3d 22 30 2e 32  ingBox left="0.2
00000170 (0x7f85bc009e60): 39 33 30 34 39 39 39 31 31 33 30 38 32 38 38 36  9304999113082886
00000180 (0x7f85bc009e70): 22 20 74 6f 70 3d 22 30 2e 38 30 33 34 36 30 30  " top="0.8034600
00000190 (0x7f85bc009e80): 30 31 39 34 35 34 39 35 36 22 20 72 69 67 68 74  019454956" right
000001a0 (0x7f85bc009e90): 3d 22 30 2e 33 37 30 36 36 30 30 30 36 39 39 39  ="0.370660006999
000001b0 (0x7f85bc009ea0): 39 36 39 35 22 20 62 6f 74 74 6f 6d 3d 22 30 2e  9695" bottom="0.
000001c0 (0x7f85bc009eb0): 39 38 31 36 37 30 30 32 32 30 31 30 38 30 33 32  9816700220108032
000001d0 (0x7f85bc009ec0): 22 2f 3e 3c 74 74 3a 43 65 6e 74 65 72 4f 66 47  "/><tt:CenterOfG
000001e0 (0x7f85bc009ed0): 72 61 76 69 74 79 20 78 3d 22 30 2e 33 33 31 38  ravity x="0.3318
000001f0 (0x7f85bc009ee0): 35 34 39 39 39 30 36 35 33 39 39 31 37 22 20 79  5499906539917" y
00000200 (0x7f85bc009ef0): 3d 22 30 2e 38 39 32 35 36 35 30 31 31 39 37 38  ="0.892565011978
00000210 (0x7f85bc009f00): 31 34 39 34 22 2f 3e 3c 2f 74 74 3a 53 68 61 70  1494"/></tt:Shap
00000220 (0x7f85bc009f10): 65 3e 3c 74 74 3a 43 6c 61 73 73 3e 3c 74 74 3a  e><tt:Class><tt:
00000230 (0x7f85bc009f20): 43 6c 61 73 73 43 61 6e 64 69 64 61 74 65 3e 3c  ClassCandidate><
00000240 (0x7f85bc009f30): 74 74 3a 54 79 70 65 3e 50 65 72 73 6f 6e 3c 2f  tt:Type>Person</
00000250 (0x7f85bc009f40): 74 74 3a 54 79 70 65 3e 3c 74 74 3a 4c 69 6b 65  tt:Type><tt:Like
00000260 (0x7f85bc009f50): 6c 69 68 6f 6f 64 3e 30 2e 31 37 30 30 30 30 30  lihood>0.1700000
00000270 (0x7f85bc009f60): 30 31 37 38 38 31 33 39 33 34 3c 2f 74 74 3a 4c  0178813934</tt:L
00000280 (0x7f85bc009f70): 69 6b 65 6c 69 68 6f 6f 64 3e 3c 2f 74 74 3a 43  ikelihood></tt:C
00000290 (0x7f85bc009f80): 6c 61 73 73 43 61 6e 64 69 64 61 74 65 3e 3c 2f  lassCandidate></
000002a0 (0x7f85bc009f90): 74 74 3a 43 6c 61 73 73 3e 3c 2f 74 74 3a 41 70  tt:Class></tt:Ap
000002b0 (0x7f85bc009fa0): 70 65 61 72 61 6e 63 65 3e 3c 2f 74 74 3a 4f 62  pearance></tt:Ob
000002c0 (0x7f85bc009fb0): 6a 65 63 74 3e 3c 2f 74 74 3a 46 72 61 6d 65 3e  ject></tt:Frame>
000002d0 (0x7f85bc009fc0): 3c 2f 74 74 3a 56 69 64 65 6f 41 6e 61 6c 79 74  </tt:VideoAnalyt
000002e0 (0x7f85bc009fd0): 69 63 73 3e 3c 2f 74 74 3a 4d 65 74 61 64 61 74  ics></tt:Metadat
000002f0 (0x7f85bc009fe0): 61 53 74 72 65 61 6d 3e 0d 0a 0d 0a 00           aStream>.....   
00000000 (0x7f85d8077450): 80 e1 72 32 84 de b4 2e 5e 65 1d 2c 3c 74 74 3a  ..r2....^e.,<tt:
Andy Gee
  • 3,149
  • 2
  • 29
  • 44
  • I'm not familiar with openRTSP, but if there is an option to set video output try to set it to `/dev/null` Or try to redirect stdout to `/dev/null`. Something like this: `openRTSP -b 400000 -K -t rtsp://username:password@192.168.2.4:5554/live/ch1 > /dev/null` – Ivan Apr 07 '22 at 05:31
  • @Ivan Thanks for your interest, unfortunately stdout only affects the feedback. I'm trying to identify and request only the metadata stream - i.e. `Setup "application/VND.ONVIF.METADATA" subsession (client ports 54122-54123)` only. I'm happy to use any scripting language to do this, I just don't know how to do that. – Andy Gee Apr 08 '22 at 09:49
  • What if you pass `-d 1` to just receive a second of the streaming? – LMC Apr 10 '22 at 23:52
  • I see your reasoning however I'm not after the initial video metadata, I'm after the metadata which relates to live events such as people detected in the video frames. Generally around one xml document for each frame of video, some are at a rate of around one xml document per second of video. They are separate streams though, each with their own `DESCRIBE` and `SETUP` commands. I only wish to access the metadata without request – Andy Gee Apr 12 '22 at 14:44
  • 2
    My interactions with live555 starting at about the same time as question this seem to have paid off, I can't award a bounty to myself so if anyone wants to mention this I'll award the bounty :) Problem solved http://lists.live555.com/pipermail/live-devel/2022-April/022148.html – Andy Gee Apr 12 '22 at 17:57

1 Answers1

1

From this link, as stated in the comments above:

You can add the -L option to your openRTSP command line, and then redirect the output to a file, or pipe it to some other application to process the metadata.

bishop
  • 37,830
  • 11
  • 104
  • 139
cdub
  • 1,420
  • 6
  • 10