Gstreamer Error with AWS greengrass

I am trying to deploy a Deepstream Python application with AWS Greengrass. My app is largely based off of deepstream-test-3, however I am getting the following error when the component recipe is run during deployment:

Error: gst-core-error-quark: GStreamer error: state change failed and some element failed to post a proper error message with the reason for the failure. (4): gstbasesink.c(5367): gst_base_sink_change_state (): /GstPipeline:pipeline0/GstNv3dSink:sink:.

This error does not occur when the same command is run from a terminal on the Jetson device. I have tried adding the env variable “export DISPLAY=:1” to the component recipe as the same error occurs when run over SSH, however this produced a new error:

nvbufsurftransform: Could not get EGL display connection

The only way I could resolve this error was to change nv3dsink to fakesink, after this the application runs correctly when deployed from AWS Greengrass, however this removes the on screen display.

Is there a way to deploy a Deepstream Python app with greengrass while keeping the OSD?

My greengrass recipe below:

Manifests:

  • Platform:
    os: “linux”
    Name: “Linux”
    Lifecycle:
    Run:
    Script: “#!/bin/bash\ncd {artifacts:decompressedPath}/nvds-aws-gg\npython3 deepstream_app.py
    \ -g nvinferserver -c config_infer_primary_rtdetr_triton.yml -i file://$(pwd)/example.mp4
    \ –silent”
    RequiresPrivilege: true
    Artifacts:
    • Uri: “s3://path/nvds-aws-gg.zip”
      Digest: “gH6RypBfn4ytJDfFi6rMiMcn2uX+zlI4DMdCshGEpuo=”
      Algorithm: “SHA-256”
      Unarchive: “ZIP”
      Permission:
      Read: “ALL”
      Execute: “ALL”
      Lifecycle: {}

• Hardware Platform (Jetson / GPU)
Jetson Xavier AGX
• DeepStream Version
6.3
• JetPack Version (valid for Jetson only)
5.1.4
• TensorRT Version

This question may be better consulted with AWS, but here are some tips for reference

1.x11-forward is not supported, so X11 forwarding over ssh -X is not feasible
2.Please use the following command line to get the value of DISPLAY, which is not always: 1

cat /proc/*/environ 2>/dev/null | tr '\0' '\n' | grep '^DISPLAY=:' | uniq

3.Stream the output after nvdsosd as a rtsp stream