Hi everyone, I’m a developer and for research purposes I write code for Jetson boards equipped with ZED 2i cameras. I recently started working with a Jetson Orin Nano which is not equipped with NVENC. I would like to know if there is a way to use the streaming and recording features provided by the ZED SDK. According to Nvidia specifications the Orin Nano card should be able to do video encoding using the CPU, however when I try to run the “sender” demo I get the following error:
luca@ubuntu:~/zed_samples/camera_streaming/sender/cpp/build$ ./ZED_Streaming_Sender
[ZED][INFO] Logging level INFO
[ZED SDK][Input] Using USB input… Switched to HD720
[ZED][INFO] [Init] Depth mode: NONE
[ZED][INFO] [Init] Camera successfully opened.
[ZED][INFO] [Init] Sensors FW version: 777
[ZED][INFO] [Init] Camera FW version: 1523
[ZED][INFO] [Init] Video mode: HD720@60
[ZED][INFO] [Init] Serial Number: S/N 33899070
Error in VIDIOC_REQBUFS at output planeError in VIDIOC_REQBUFS at output plane[ZED][Encoding] Critical Error : No Video Enc [enc_146749]
Segmentation fault (core dumped)
Hi Luca,
benvenuto… Welcome to the Stereolabs community.
What version of the ZED SDK are you using?
This is an important limitation of the Orin Nano regarding the ZED SDK streaming/recording features.
The SDK team is working on this feature to add encoding capabilities to the Orin Nano.
We must be sure that it can reach real-time performance even if not using hardware encoders.
Hi @Luca023
The SDK team is testing for the capabilites of the Orin Nano to understand if the computational power is enough to handle real time software encoding at the high resolutions/framerates provided by our cameras.
We have no public feedback available for the moment.
Hello @Myzhar,
thank you for the encouraging news, I guess it’s not a simple development to implement without the hardware encoder. However, I hope you will be able to make these important features available for the Orin Nano as well. Since for the applications we are developing the Orin nano is the best choice.
Hi!
I want to know if the problem was resolved
I am working with the Jetson Orin Nano Jetpack 6.0 and with the SDK 4.1.2 and I have the same problem that was mentioned, when trying to run the “camera streaming sender” code I get the following messages:
[2024-06-25 16:33:00 UTC][ZED][INFO] Logging level INFO
[2024-06-25 16:33:01 UTC][ZED][INFO] [Init] Depth mode: PERFORMANCE
[2024-06-25 16:33:02 UTC][ZED][INFO] [Init] Camera successfully opened.
[2024-06-25 16:33:02 UTC][ZED][INFO] [Init] Camera FW version: 1523
[2024-06-25 16:33:02 UTC][ZED][INFO] [Init] Video mode: HD1080@30
[2024-06-25 16:33:02 UTC][ZED][INFO] [Init] Serial Number: S/N 27271832
[2024-06-25 16:33:03 UTC][ZED][INFO] [Init] Notice: The streaming is using STREAM version 2, enabled by default starting from SDK version 4.1. To revert to the original stream version, set the environment variable “ZED_SDK_STREAM_VERSION” to 1
[ZED][Encoding] Critical Error : No Video Enc [enc_0]
[ZED][Streaming] Failed to create encoder [0.0] at resolution 1920x1080
[2024-06-25 16:33:03 UTC][ZED][ERROR] [Streaming] Cannot enable streaming: Err Code -4
[Sample][Error] Streaming initialization error: | NO GPU COMPATIBLE : An NVIDIA GPU (Pascal or newer) is required to run this software (for Kepler and Maxwell GPU, please use CUDA 10.2 ZED SDK installers)
I want to know if the problem was resolved
I am working with the Jetson Orin Nano Jetpack 6.0 and with the SDK 4.1.2 and I have the same problem that was mentioned, when trying to run the “camera streaming sender” code I get the following messages:
But, other examples do work correctly for me, such as “ZED Object Detection”, as well as the ZED Explorer application.
Hi @AnaRubin
unfortunately, this is not a bug, but a hardware limitation of the Jetson Orin Nano that does not allow you to use the Local Streaming module with this device.
The Jetson Orin Nano is the only Jetson module not equipped with a hardware encoder, so it’s not possible to convert the ZED stream to H264/H265 in real time to send it reliably over the network.
Hi @Myzhar
I have a question, can the problem be solved by connecting a USB 3.0 multiplexer?
Or I also found this page: Camera streaming on Jetson Orin nano - Stereolabs Forums
From what I understood the Orin Nano does not have a software encoder, so it cannot send the video in H264, this page shows how to integrate software to do this.
Could this be the solution?
Hi @AnaRubin
the link you posted is wrong. Can you send it again?
Please also note that the computing power of the Jetson Orin Nano does not allow software H264 encoding in real-time to perform the computation required by the streaming module.
Hi @Myzhar
Could you solve my problem using GStreamer?
There is an integration for the ZED.
I’ve already installed it on my Orin Nano and can send and receive the video in the same Jetson, but I’ve had problems sending it on another device, the video never shows up. I don’t know if the problem is when sending it to another device or if it’s because I am misusing it.
The line to send the video is this:
gst-launch-1.0 zedsrc ! timeoverlay ! tee name=split has-chain=true !
queue ! autovideoconvert ! fpsdisplaysink
split. ! queue max-size-time=0 max-size-bytes=0 max-size-buffers=0 ! autovideoconvert !
x264enc byte-stream=true tune=zerolatency speed-preset=ultrafast bitrate=3000 !
h264parse ! rtph264pay config-interval=-1 pt=96 ! queue !
udpsink clients=192.168.137.184:5000 max-bitrate=3000000 sync=false async=false
The line to receive the video is this:
gst-launch-1.0 udpsrc port=5000 ! application/x-rtp,clock-rate=90000,payload=96 !
queue ! rtph264depay ! h264parse ! avdec_h264 !
queue ! autovideoconvert ! fpsdisplaysink
Hi again @Myzhar
I was able to send and receive the video using GStreamer’s ZED integration, the documentation mentions that the video is sent only the image from the left camera, at HD720 resolution at 30 FPS, because the zedsrc element is configured that way.
How could I send the video from both cameras or at a higher resolution?
And another question, the way I send and receive the video is through the terminal, is there a way to do it through a code program?