[AGX ORIN 64GB] Maximum video stream for 720p h.264

Hi all,

I was wondering how many video stream the nVidia AGX Orin 64GB can handle at the same time with all cameras set 720p h.264@30fps through RTSP with the nVidia HW decoder activated?

We planned to use 24/36/48 cameras.

I did not see this information anywhere. Only an picture from forum with 1080p and beyond info.

One more question: how the nVidia HW decoding is working ? Is there any architecture diagram or documentation ?

When using the HW decoding, all video stream are decoded in parallel or sequentially ?

Thanks !

EDIT: added hyperlink to the picture mentioned on the forum
EDIT2: added camera connection to AGX Orin (RTSP)
EDIT3: added camera number

Hi,

For the camera basic functionality first needs to check the device and driver configuration.
You can reference to below program guide for the detailed information of device tree and driver implementation.
https://docs.nvidia.com/jetson/archives/r36.3/DeveloperGuide/SD/CameraDevelopment/SensorSoftwareDriverProgramming.html?highlight=programing#sensor-software-driver-programming

Please refer to Applications Using V4L2 IOCTL Directly by using V4L2 IOCTL to verify basic camera functionality.
https://docs.nvidia.com/jetson/archives/r36.3/DeveloperGuide/SD/CameraDevelopment/SensorSoftwareDriverProgramming.html?highlight=programing#to-run-a-v4l2-ctl-test

Once confirm the configure and still failed below link help to get log and some information and some tips for debug.
https://elinux.org/Jetson/l4t/Camera_BringUp#Steps_to_enable_more_debug_messages

Thanks!

Hi carolyuu,

thanks for your information.

Unfortunately, I did not find the answer of the maximum camera number.

The cameras are connected through RTSP.

Hi,
We have the capability of 1080p in

Log in | NVIDIA Developer

There is no data for 720p. How many 720p30(or p60) streams are required in your use-case? Are all streams in same process with individual threads, or multiple processes with single stream in each process? Is the stream h264 or h265?

Hi DaneLLL,

There are 24/36/48 cameras planned depending on the AGX Orin capabilities. The camera spec is 720p30 with h.264 for now and next step in h.265 with same resolution. All streams will be in separate thread but can be in separated process we are open on this point.

Hi,

up :)

Also more one question: can you share technical information on how the nVidia hardware decoder is working ?

Hi,
28 720p30 decoding tasks are steady on AGX Orin developer kit. We run the command and see 30+ fps in each decoding tasks:

$ gst-launch-1.0 -v filesrc location=sample_720p.mp4 ! qtdemux ! h264parse ! nvv4l2decoder enable-max-performance=1 ! fpsdisplaysink text-overlay=0 video-sink=fakesink sync=0 filesrc location=sample_720p.mp4 ! qtdemux ! h264parse ! nvv4l2decoder enable-max-performance=1 ! fpsdisplaysink text-overlay=0 video-sink=fakesink sync=0  filesrc location=sample_720p.mp4 ! qtdemux ! h264parse ! nvv4l2decoder enable-max-performance=1 ! fpsdisplaysink text-overlay=0 video-sink=fakesink sync=0  filesrc location=sample_720p.mp4 ! qtdemux ! h264parse ! nvv4l2decoder enable-max-performance=1 ! fpsdisplaysink text-overlay=0 video-sink=fakesink sync=0  filesrc location=sample_720p.mp4 ! qtdemux ! h264parse ! nvv4l2decoder enable-max-performance=1 ! fpsdisplaysink text-overlay=0 video-sink=fakesink sync=0  filesrc location=sample_720p.mp4 ! qtdemux ! h264parse ! nvv4l2decoder enable-max-performance=1 ! fpsdisplaysink text-overlay=0 video-sink=fakesink sync=0  filesrc location=sample_720p.mp4 ! qtdemux ! h264parse ! nvv4l2decoder enable-max-performance=1 ! fpsdisplaysink text-overlay=0 video-sink=fakesink sync=0 & gst-launch-1.0 -v filesrc location=sample_720p.mp4 ! qtdemux ! h264parse ! nvv4l2decoder enable-max-performance=1 ! fpsdisplaysink text-overlay=0 video-sink=fakesink sync=0 filesrc location=sample_720p.mp4 ! qtdemux ! h264parse ! nvv4l2decoder enable-max-performance=1 ! fpsdisplaysink text-overlay=0 video-sink=fakesink sync=0  filesrc location=sample_720p.mp4 ! qtdemux ! h264parse ! nvv4l2decoder enable-max-performance=1 ! fpsdisplaysink text-overlay=0 video-sink=fakesink sync=0  filesrc location=sample_720p.mp4 ! qtdemux ! h264parse ! nvv4l2decoder enable-max-performance=1 ! fpsdisplaysink text-overlay=0 video-sink=fakesink sync=0  filesrc location=sample_720p.mp4 ! qtdemux ! h264parse ! nvv4l2decoder enable-max-performance=1 ! fpsdisplaysink text-overlay=0 video-sink=fakesink sync=0  filesrc location=sample_720p.mp4 ! qtdemux ! h264parse ! nvv4l2decoder enable-max-performance=1 ! fpsdisplaysink text-overlay=0 video-sink=fakesink sync=0  filesrc location=sample_720p.mp4 ! qtdemux ! h264parse ! nvv4l2decoder enable-max-performance=1 ! fpsdisplaysink text-overlay=0 video-sink=fakesink sync=0 &  gst-launch-1.0 -v filesrc location=sample_720p.mp4 ! qtdemux ! h264parse ! nvv4l2decoder enable-max-performance=1 ! fpsdisplaysink text-overlay=0 video-sink=fakesink sync=0 filesrc location=sample_720p.mp4 ! qtdemux ! h264parse ! nvv4l2decoder enable-max-performance=1 ! fpsdisplaysink text-overlay=0 video-sink=fakesink sync=0  filesrc location=sample_720p.mp4 ! qtdemux ! h264parse ! nvv4l2decoder enable-max-performance=1 ! fpsdisplaysink text-overlay=0 video-sink=fakesink sync=0  filesrc location=sample_720p.mp4 ! qtdemux ! h264parse ! nvv4l2decoder enable-max-performance=1 ! fpsdisplaysink text-overlay=0 video-sink=fakesink sync=0  filesrc location=sample_720p.mp4 ! qtdemux ! h264parse ! nvv4l2decoder enable-max-performance=1 ! fpsdisplaysink text-overlay=0 video-sink=fakesink sync=0  filesrc location=sample_720p.mp4 ! qtdemux ! h264parse ! nvv4l2decoder enable-max-performance=1 ! fpsdisplaysink text-overlay=0 video-sink=fakesink sync=0  filesrc location=sample_720p.mp4 ! qtdemux ! h264parse ! nvv4l2decoder enable-max-performance=1 ! fpsdisplaysink text-overlay=0 video-sink=fakesink sync=0 &  gst-launch-1.0 -v filesrc location=sample_720p.mp4 ! qtdemux ! h264parse ! nvv4l2decoder enable-max-performance=1 ! fpsdisplaysink text-overlay=0 video-sink=fakesink sync=0 filesrc location=sample_720p.mp4 ! qtdemux ! h264parse ! nvv4l2decoder enable-max-performance=1 ! fpsdisplaysink text-overlay=0 video-sink=fakesink sync=0  filesrc location=sample_720p.mp4 ! qtdemux ! h264parse ! nvv4l2decoder enable-max-performance=1 ! fpsdisplaysink text-overlay=0 video-sink=fakesink sync=0  filesrc location=sample_720p.mp4 ! qtdemux ! h264parse ! nvv4l2decoder enable-max-performance=1 ! fpsdisplaysink text-overlay=0 video-sink=fakesink sync=0  filesrc location=sample_720p.mp4 ! qtdemux ! h264parse ! nvv4l2decoder enable-max-performance=1 ! fpsdisplaysink text-overlay=0 video-sink=fakesink sync=0  filesrc location=sample_720p.mp4 ! qtdemux ! h264parse ! nvv4l2decoder enable-max-performance=1 ! fpsdisplaysink text-overlay=0 video-sink=fakesink sync=0  filesrc location=sample_720p.mp4 ! qtdemux ! h264parse ! nvv4l2decoder enable-max-performance=1 ! fpsdisplaysink text-overlay=0 video-sink=fakesink sync=0 & 

We may not be able to share information about hardware design. The software stack is based on v4l2. You can take a look at the samples:

/usr/src/jetson_multimedia_api/samples/00_video_decode/
/usr/src/jetson_multimedia_api/samples/unittest_samples/decoder_unit_sample/

Hi DaneLLL,

Wouah many thanks !

Just to understand a little bit more:

  1. Do I have to conclude the maximum camera number is 28 in 720p30 - H264 ?
  2. Can I suppose it can be more in 720p30 - H265 ?
  3. Could it have any performance impact if cameras are connected through RTSP applying the NVDEC ?

Yes, understood for the closed information about hardware design and again the sw stack information.

Hi,

For decoding general h264 stream, it is supposed to be yes. Please check if you can achieve the same with your h264 stream. Certain h264 stream is compressed in more complex profile and may not be able to achieve the same.

Yes but may be 2-4 streams more. If you have the h265 stream, please help give it a try.

It should not have much impact. We have the demonstration of multiple RTSP inputs in deepstream-app in DeepStream SDK.

Hi,

Thanks again :)

I keep you up to date if I can succeed to run more cameras in H.264 and H.265 .

The NVDEC is decoding every stream in parallel or sequentially ?

Hi,
Within constraint of hardware, the decoding tasks are executed in parallel. If task number exceeds the limit, it will be queued and executed sequentially.

Hi,

The task number limit depends on which parameters ?
For example codec, resolution and FPS ?
The task number maximum for a 720p30 H264 is 28 ?

If I have, for example, 29 cameras 720p30 H264: all the streams will be threated sequentially ? Or it will be a mix between parallel and sequential ?

Hi,
These are handled in low-level software stacks according to runtime loading.

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.