Decoding Jetson H.264 Images on Non-NVIDIA Powered Systems


Using hardware-accelerated Isaac ROS compression to H.264 encode data for playback through Isaac ROS H.264 decoder on NVIDIA-powered systems is fast and efficient. However, you may need to decode recorded data on systems that are not NVIDIA-powered. Fortunately, the output of the isaac_ros_h264_encoder package can be reformatted to work with other available ROS 2 decoder packages.

This tutorial shows you how to replay a rosbag recorded on a Jetson using a third-party H.264 decoder image_transport plugin used in FogROS2.

The launch file replays a target rosbag recorded with isaac_ros_h264_encoder. It is recorded through a node that reformats the compressed messages for compatibility. Then the third-party decoder is used to display it in an image view window.

Tutorial Walkthrough

  1. Complete the quickstart here.

  2. Clone the following third-party repository into your workspace:

    cd ${ISAAC_ROS_WS}/src
    git clone
    # Install dependencies for the third-party package
    sudo apt install libavdevice-dev libavformat-dev libavcodec-dev libavutil-dev libswscale-dev
  3. Launch the Docker container using the script:

    cd ${ISAAC_ROS_WS}/src/isaac_ros_common && \
  4. Inside the container, build the third-party h264_image_transport package:

    cd /workspaces/isaac_ros-dev && \
      colcon build --symlink-install --packages-up-to \
        h264_image_transport isaac_ros_to_h264_msgs_packet && \
      source install/setup.bash
  5. Launch the graph to bring up an image viewer that shows the decoded output.

    ros2 launch isaac_ros_to_h264_msgs_packet rosbag_path:=/workspaces/isaac_ros-dev/src/isaac_ros_compression/resources/rosbags/h264_compressed_sample.bag


    You may have to click on the “/image” to trigger window resizing.