I’m attempting to use Video Storage Toolkit (VST) on my Jetson Orin Nano with a CSI camera. The sensor is showing up correctly in the VST dashboard but getting CameraNotFoundError for the sensor status.
After some debugging and troubleshooting, it looks like this is because the camera stream isn’t starting correctly for the CSI camera when VST starts up. The VST container (with ADAPTOR:native env var set for CSI) is trying to use a hardware encoder in the gstreamer pipeline - the Orin Nano doesn’t have a hardware encoder therefore the pipeline is failing on startup.
Is there a way to configure the encoder used by VST for CSI cameras? I haven’t been able to find a config in the compose.yaml, config files, or anywhere in the VST database that allows me to use a software encoder instead of the hardware encoder it’s attempting to use (nvv4l2h264enc).
No luck with that config. I believe that “software” is the default configuration anyway.
VST logs for reference:
[2025-8-12T12:52:39.624Z:281472114813920:redis_publisher.cpp:227: sendToRedis] Event sent to Redis Successfully[2025-8-12T12:52:39.647Z:281472106359776:nativestreamproducer.cpp:1089: startPipeline] Index of /dev/video0 is 0 for streamId:c0c190f9-3b85-4781-8237-0861c3aa0881 name:csi_video0
[2025-8-12T12:52:39.833Z:281472106359776:nativestreamproducer.cpp:1162: startPipeline] Set Caps after NV argus = video/x-raw(memory:NVMM), format=(string)NV12, width=(int)1920, height=(int)1080 for streamId:c0c190f9-3b85-4781-8237-0861c3aa0881 name:csi_video0
[2025-8-12T12:52:39.833Z:281472106359776:nativestreamproducer.cpp:1163: startPipeline] Set Caps before encoder = video/x-raw(memory:NVMM), format=(string)NV12, width=(int)1920, height=(int)1080 for streamId:c0c190f9-3b85-4781-8237-0861c3aa0881 name:csi_video0
[2025-8-12T12:52:39.833Z:281472106359776:nativestreamproducer.cpp:1164: startPipeline] Set Caps after encoder = video/x-h265, stream-format=(string)byte-stream, alignment=(string)nal, framerate=30/1 for streamId:c0c190f9-3b85-4781-8237-0861c3aa0881 name:csi_video00:00:02.304796514 20 0xffff400576c0
WARN v4l2 v4l2_calls.c:657:gst_v4l2_open: error: Cannot identify device ‘/dev/v4l2-nvenc’.0:00:02.304857529 20 0xffff400576c0
WARN v4l2 v4l2_calls.c:657:gst_v4l2_open: error: system error: No such file or directory0:00:02.304967818 20 0xffff400576c0
WARN videoencoder gstvideoencoder.c:1797:gst_video_encoder_change_state: error: Failed to open encoder
[2025-8-12T12:52:39.834Z:281472106359776:nativestreamproducer.cpp:1284: startPipeline] Unable to set the camera to playing state for streamId:c0c190f9-3b85-4781-8237-0861c3aa0881 name:csi_video0
[2025-8-12T12:52:39.835Z:281472106359776:native_stream_monitor.cpp:69: addNativeStream] Failed to start NativeStreamProducer pipeline for streamId:c0c190f9-3b85-4781-8237-0861c3aa0881 sensorName:csi_video0 location:/dev/video0[2025-8-12T12:52:39.835Z:281472106359776:nativestreamproducer.cpp:140: ~NativeStreamProducer] ~NativeStreamProducer called for streamId:c0c190f9-3b85-4781-8237-0861c3aa0881 sensorName:csi_video0 location:/dev/video0[2025-8-12T12:52:39.964Z:281472106359776:sensor_management_utils.cpp:1538: setStreamDefaultSettings] No need to set default settings for native stream type sensroId:c0c190f9-3b85-4781-8237-0861c3aa0881[2025-8-12T12:52:39.986Z:281472106359776:sensor_monitoring.cpp:122: onSensorFound] Added sensor successfully: c0c190f9-3b85-4781-8237-0861c3aa0881
As you can see, gstreamer cannot find the ‘/dev/v4l2-nvenc’, which the Orin Nano doesn’t have. Are there any additional configurations to check? My guess might be that this was hard-coded in VST to expect a hardware encoder before it was thought Orin Nano could use this feature.
CSI camera pipeline can’t config to SW video encoder currently. We can consider the feature in the roadmap. You should use other Orin module instead of Orin Nano for this use case currently.