Adds H264 decoding to ROS2 image transport.
Also includes a simple node to copy H264 packets from a video4linux
camera.
Possible future work: add H264 encoder
Command line:
ros2 run image_transport republish h264 raw --ros-args -r in/h264:=/image_raw/h264 -r out:=/repub_raw
Launch file:
ros2 launch h264_image_transport example_launch.py
Parameter | Type | Default | Notes |
---|---|---|---|
input_fn | string | /dev/video2 | Can be any ffmpeg format |
fps | string | 30 | Desired frame rate |
size | string | 800x600 | Width by height |
frame_id | string | camera_frame | Camera frame ID |
camera_info_path | string | info.ini | Path to camera info file |
Topic | Message | Notes |
---|---|---|
image_raw/h264 | h264_msgs::msg::Packet |
H264 packet |
camera_info | sensor_msgs::msg::CameraInfo |
Camera info message |
Tested on ROS2 Foxy, Galactic and Humble.
Requires libavdevice
, libavformat
, libavcodec
, libavutil
, libswscale
.
Here's one way to satisfy these requirements:
sudo apt install libavdevice-dev libavformat-dev libavcodec-dev libavutil-dev libswscale-dev
Note: rosdep
won't find keys for most of these libraries so package.xml
declares
dependencies on ffmpeg
and libavdevice-dev
. Strictly speaking ffmpeg
is not required.