Repository Summary
Description | HTTP Streaming of ROS Image Topics in Multiple Formats |
Checkout URI | https://github.com/RobotWebTools/web_video_server.git |
VCS Type | git |
VCS Version | ros2 |
Last Updated | 2025-04-23 |
Dev Status | MAINTAINED |
CI status | No Continuous Integration |
Released | RELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (0)
Good First Issues (0) Pull Requests to Review (0) |
Packages
Name | Version |
---|---|
web_video_server | 2.0.1 |
README
web_video_server - HTTP Streaming of ROS Image Topics in Multiple Formats
This node provides HTTP streaming of ROS image topics in various formats, making it easy to view robot camera feeds and other image topics in a web browser without requiring special plugins or extensions.
Features
- Stream ROS image topics over HTTP in multiple formats:
- MJPEG (Motion JPEG)
- VP8 (WebM)
- VP9 (WebM)
- H264 (MP4)
- PNG streams
- ROS compressed image topics
- Adjustable quality, size, and other streaming parameters
- Web interface to browse available image topics
- Single image snapshot capability
- Support for different QoS profiles in ROS 2
Installation
Dependencies
- ROS (Noetic) or ROS 2 (Humble+)
- OpenCV
- FFmpeg/libav
- Boost
- async_web_server_cpp
Installing packages
For newer ROS2 distributions (humble, jazzy, rolling) it is possible to install web_video_server as a package:
sudo apt install ros-${ROS_DISTRO}-web-video-server
Building from Source
Create a ROS workspace if you don’t have one:
mkdir -p ~/ros_ws/src
cd ~/ros_ws/src
Clone this repository:
# ROS 2
git clone https://github.com/RobotWebTools/web_video_server.git
# ROS 1
git clone https://github.com/RobotWebTools/web_video_server.git -b ros1
Install dependencies with rosdep:
cd ~/ros_ws
rosdep update
rosdep install --from-paths src -i
Build the package and source your workspace:
colcon build --packages-select web_video_server
source install/setup.bash
Usage
Starting the Server
# ROS 1
rosrun web_video_server web_video_server
# ROS 2
ros2 run web_video_server web_video_server
Configuration
Server Configuration Parameters
Parameter | Type | Default | Possible Values | Description |
---|---|---|---|---|
port |
int | 8080 | Any valid port number | HTTP server port |
address |
string | “0.0.0.0” | Any valid IP address | HTTP server address (0.0.0.0 allows external connections) |
server_threads |
int | 1 | 1+ | Number of server threads for handling HTTP requests |
ros_threads |
int | 2 | 1+ | Number of threads for ROS message handling |
verbose |
bool | false | true, false | Enable verbose logging |
default_stream_type |
string | “mjpeg” | “mjpeg”, “vp8”, “vp9”, “h264”, “png”, “ros_compressed” | Default format for video streams |
publish_rate |
double | -1.0 | -1.0 or positive value | Rate for republishing images (-1.0 means no republishing) |
Running with Custom Parameters
You can configure the server by passing parameters via the command line:
# ROS 1
rosrun web_video_server web_video_server _port:=8081 _address:=localhost _server_threads:=4
# ROS 2
ros2 run web_video_server web_video_server --ros-args -p port:=8081 -p address:=localhost -p server_threads:=4
View Available Streams
http://localhost:8080/
The interface allows quick navigation between different topics and formats without having to manually construct URLs.
This page displays:
- All available ROS image topics currently being published
- Direct links to view each topic in different formats:
- Web page with streaming image
- Direct stream
- Single image snapshot
Stream an Image Topic
There are two ways to stream the Image, as a HTML page via
http://localhost:8080/stream_viewer?topic=/camera/image_raw
or as a HTTP multipart stream on
http://localhost:8080/stream?topic=/camera/image_raw
URL Parameters for Streaming
The following parameters can be added to the stream URL:
Parameter | Type | Default | Possible Values | Description |
---|---|---|---|---|
topic |
string | (required) | Any valid ROS image topic | The ROS image topic to stream |
type |
string | “mjpeg” | “mjpeg”, “vp8”, “vp9”, “h264”, “png”, “ros_compressed” | Stream format |
width |
int | 0 | 0+ | Width of output stream (0 = original width) |
height |
int | 0 | 0+ | Height of output stream (0 = original height) |
quality |
int | 95 | 1-100 | Quality for MJPEG and PNG streams |
bitrate |
int | 100000 | Positive integer | Bitrate for H264/VP8/VP9 streams in bits/second |
invert |
flag | not present | present/not present | Invert image when parameter is present |
default_transport |
string | “raw” | “raw”, “compressed”, “theora” | Image transport to use |
qos_profile |
string | “default” | “default”, “system_default”, “sensor_data”, “services_default” | QoS profile for ROS 2 subscribers |
Examples:
# Stream an MJPEG at 640x480 with 90% quality
http://localhost:8080/stream?topic=/camera/image_raw&type=mjpeg&width=640&height=480&quality=90
# Stream H264 with higher bitrate
http://localhost:8080/stream?topic=/camera/image_raw&type=h264&bitrate=500000
# Stream with inverted image (rotated 180°)
http://localhost:8080/stream?topic=/camera/image_raw&invert
Get a Snapshot
It is also possible to get a single image snapshot
http://localhost:8080/snapshot?topic=/camera/image_raw
URL Parameters for Snapshot
Parameter | Type | Default | Possible Values | Description |
---|---|---|---|---|
topic |
string | (required) | Any valid ROS image topic | The ROS image topic to stream |
width |
int | 0 | 0+ | Width of output picture (0 = original width) |
height |
int | 0 | 0+ | Height of output picture (0 = original height) |
quality |
int | 95 | 1-100 | Quality for JPEG snapshots |
invert |
flag | not present | present/not present | Invert image when parameter is present |
default_transport |
string | “raw” | “raw”, “compressed”, “theora” | Image transport to use |
qos_profile |
string | “default” | “default”, “system_default”, “sensor_data”, “services_default” | QoS profile for ROS 2 subscribers |
About
This project is released as part of the Robot Web Tools effort.
License
web_video_server is released with a BSD license. For full terms and conditions, see the LICENSE file.
Authors
See the AUTHORS file for a full list of contributors.
CONTRIBUTING
Any contribution that you make to this repository will be under the 3-Clause BSD License, as dictated by that license.
Repository Summary
Description | HTTP Streaming of ROS Image Topics in Multiple Formats |
Checkout URI | https://github.com/RobotWebTools/web_video_server.git |
VCS Type | git |
VCS Version | ros2 |
Last Updated | 2025-04-23 |
Dev Status | MAINTAINED |
CI status | No Continuous Integration |
Released | RELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (0)
Good First Issues (0) Pull Requests to Review (0) |
Packages
Name | Version |
---|---|
web_video_server | 2.0.1 |
README
web_video_server - HTTP Streaming of ROS Image Topics in Multiple Formats
This node provides HTTP streaming of ROS image topics in various formats, making it easy to view robot camera feeds and other image topics in a web browser without requiring special plugins or extensions.
Features
- Stream ROS image topics over HTTP in multiple formats:
- MJPEG (Motion JPEG)
- VP8 (WebM)
- VP9 (WebM)
- H264 (MP4)
- PNG streams
- ROS compressed image topics
- Adjustable quality, size, and other streaming parameters
- Web interface to browse available image topics
- Single image snapshot capability
- Support for different QoS profiles in ROS 2
Installation
Dependencies
- ROS (Noetic) or ROS 2 (Humble+)
- OpenCV
- FFmpeg/libav
- Boost
- async_web_server_cpp
Installing packages
For newer ROS2 distributions (humble, jazzy, rolling) it is possible to install web_video_server as a package:
sudo apt install ros-${ROS_DISTRO}-web-video-server
Building from Source
Create a ROS workspace if you don’t have one:
mkdir -p ~/ros_ws/src
cd ~/ros_ws/src
Clone this repository:
# ROS 2
git clone https://github.com/RobotWebTools/web_video_server.git
# ROS 1
git clone https://github.com/RobotWebTools/web_video_server.git -b ros1
Install dependencies with rosdep:
cd ~/ros_ws
rosdep update
rosdep install --from-paths src -i
Build the package and source your workspace:
colcon build --packages-select web_video_server
source install/setup.bash
Usage
Starting the Server
# ROS 1
rosrun web_video_server web_video_server
# ROS 2
ros2 run web_video_server web_video_server
Configuration
Server Configuration Parameters
Parameter | Type | Default | Possible Values | Description |
---|---|---|---|---|
port |
int | 8080 | Any valid port number | HTTP server port |
address |
string | “0.0.0.0” | Any valid IP address | HTTP server address (0.0.0.0 allows external connections) |
server_threads |
int | 1 | 1+ | Number of server threads for handling HTTP requests |
ros_threads |
int | 2 | 1+ | Number of threads for ROS message handling |
verbose |
bool | false | true, false | Enable verbose logging |
default_stream_type |
string | “mjpeg” | “mjpeg”, “vp8”, “vp9”, “h264”, “png”, “ros_compressed” | Default format for video streams |
publish_rate |
double | -1.0 | -1.0 or positive value | Rate for republishing images (-1.0 means no republishing) |
Running with Custom Parameters
You can configure the server by passing parameters via the command line:
# ROS 1
rosrun web_video_server web_video_server _port:=8081 _address:=localhost _server_threads:=4
# ROS 2
ros2 run web_video_server web_video_server --ros-args -p port:=8081 -p address:=localhost -p server_threads:=4
View Available Streams
http://localhost:8080/
The interface allows quick navigation between different topics and formats without having to manually construct URLs.
This page displays:
- All available ROS image topics currently being published
- Direct links to view each topic in different formats:
- Web page with streaming image
- Direct stream
- Single image snapshot
Stream an Image Topic
There are two ways to stream the Image, as a HTML page via
http://localhost:8080/stream_viewer?topic=/camera/image_raw
or as a HTTP multipart stream on
http://localhost:8080/stream?topic=/camera/image_raw
URL Parameters for Streaming
The following parameters can be added to the stream URL:
Parameter | Type | Default | Possible Values | Description |
---|---|---|---|---|
topic |
string | (required) | Any valid ROS image topic | The ROS image topic to stream |
type |
string | “mjpeg” | “mjpeg”, “vp8”, “vp9”, “h264”, “png”, “ros_compressed” | Stream format |
width |
int | 0 | 0+ | Width of output stream (0 = original width) |
height |
int | 0 | 0+ | Height of output stream (0 = original height) |
quality |
int | 95 | 1-100 | Quality for MJPEG and PNG streams |
bitrate |
int | 100000 | Positive integer | Bitrate for H264/VP8/VP9 streams in bits/second |
invert |
flag | not present | present/not present | Invert image when parameter is present |
default_transport |
string | “raw” | “raw”, “compressed”, “theora” | Image transport to use |
qos_profile |
string | “default” | “default”, “system_default”, “sensor_data”, “services_default” | QoS profile for ROS 2 subscribers |
Examples:
# Stream an MJPEG at 640x480 with 90% quality
http://localhost:8080/stream?topic=/camera/image_raw&type=mjpeg&width=640&height=480&quality=90
# Stream H264 with higher bitrate
http://localhost:8080/stream?topic=/camera/image_raw&type=h264&bitrate=500000
# Stream with inverted image (rotated 180°)
http://localhost:8080/stream?topic=/camera/image_raw&invert
Get a Snapshot
It is also possible to get a single image snapshot
http://localhost:8080/snapshot?topic=/camera/image_raw
URL Parameters for Snapshot
Parameter | Type | Default | Possible Values | Description |
---|---|---|---|---|
topic |
string | (required) | Any valid ROS image topic | The ROS image topic to stream |
width |
int | 0 | 0+ | Width of output picture (0 = original width) |
height |
int | 0 | 0+ | Height of output picture (0 = original height) |
quality |
int | 95 | 1-100 | Quality for JPEG snapshots |
invert |
flag | not present | present/not present | Invert image when parameter is present |
default_transport |
string | “raw” | “raw”, “compressed”, “theora” | Image transport to use |
qos_profile |
string | “default” | “default”, “system_default”, “sensor_data”, “services_default” | QoS profile for ROS 2 subscribers |
About
This project is released as part of the Robot Web Tools effort.
License
web_video_server is released with a BSD license. For full terms and conditions, see the LICENSE file.
Authors
See the AUTHORS file for a full list of contributors.
CONTRIBUTING
Any contribution that you make to this repository will be under the 3-Clause BSD License, as dictated by that license.
Repository Summary
Description | HTTP Streaming of ROS Image Topics in Multiple Formats |
Checkout URI | https://github.com/RobotWebTools/web_video_server.git |
VCS Type | git |
VCS Version | ros2 |
Last Updated | 2025-04-23 |
Dev Status | MAINTAINED |
CI status | No Continuous Integration |
Released | RELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (0)
Good First Issues (0) Pull Requests to Review (0) |
Packages
Name | Version |
---|---|
web_video_server | 2.0.1 |
README
web_video_server - HTTP Streaming of ROS Image Topics in Multiple Formats
This node provides HTTP streaming of ROS image topics in various formats, making it easy to view robot camera feeds and other image topics in a web browser without requiring special plugins or extensions.
Features
- Stream ROS image topics over HTTP in multiple formats:
- MJPEG (Motion JPEG)
- VP8 (WebM)
- VP9 (WebM)
- H264 (MP4)
- PNG streams
- ROS compressed image topics
- Adjustable quality, size, and other streaming parameters
- Web interface to browse available image topics
- Single image snapshot capability
- Support for different QoS profiles in ROS 2
Installation
Dependencies
- ROS (Noetic) or ROS 2 (Humble+)
- OpenCV
- FFmpeg/libav
- Boost
- async_web_server_cpp
Installing packages
For newer ROS2 distributions (humble, jazzy, rolling) it is possible to install web_video_server as a package:
sudo apt install ros-${ROS_DISTRO}-web-video-server
Building from Source
Create a ROS workspace if you don’t have one:
mkdir -p ~/ros_ws/src
cd ~/ros_ws/src
Clone this repository:
# ROS 2
git clone https://github.com/RobotWebTools/web_video_server.git
# ROS 1
git clone https://github.com/RobotWebTools/web_video_server.git -b ros1
Install dependencies with rosdep:
cd ~/ros_ws
rosdep update
rosdep install --from-paths src -i
Build the package and source your workspace:
colcon build --packages-select web_video_server
source install/setup.bash
Usage
Starting the Server
# ROS 1
rosrun web_video_server web_video_server
# ROS 2
ros2 run web_video_server web_video_server
Configuration
Server Configuration Parameters
Parameter | Type | Default | Possible Values | Description |
---|---|---|---|---|
port |
int | 8080 | Any valid port number | HTTP server port |
address |
string | “0.0.0.0” | Any valid IP address | HTTP server address (0.0.0.0 allows external connections) |
server_threads |
int | 1 | 1+ | Number of server threads for handling HTTP requests |
ros_threads |
int | 2 | 1+ | Number of threads for ROS message handling |
verbose |
bool | false | true, false | Enable verbose logging |
default_stream_type |
string | “mjpeg” | “mjpeg”, “vp8”, “vp9”, “h264”, “png”, “ros_compressed” | Default format for video streams |
publish_rate |
double | -1.0 | -1.0 or positive value | Rate for republishing images (-1.0 means no republishing) |
Running with Custom Parameters
You can configure the server by passing parameters via the command line:
# ROS 1
rosrun web_video_server web_video_server _port:=8081 _address:=localhost _server_threads:=4
# ROS 2
ros2 run web_video_server web_video_server --ros-args -p port:=8081 -p address:=localhost -p server_threads:=4
View Available Streams
http://localhost:8080/
The interface allows quick navigation between different topics and formats without having to manually construct URLs.
This page displays:
- All available ROS image topics currently being published
- Direct links to view each topic in different formats:
- Web page with streaming image
- Direct stream
- Single image snapshot
Stream an Image Topic
There are two ways to stream the Image, as a HTML page via
http://localhost:8080/stream_viewer?topic=/camera/image_raw
or as a HTTP multipart stream on
http://localhost:8080/stream?topic=/camera/image_raw
URL Parameters for Streaming
The following parameters can be added to the stream URL:
Parameter | Type | Default | Possible Values | Description |
---|---|---|---|---|
topic |
string | (required) | Any valid ROS image topic | The ROS image topic to stream |
type |
string | “mjpeg” | “mjpeg”, “vp8”, “vp9”, “h264”, “png”, “ros_compressed” | Stream format |
width |
int | 0 | 0+ | Width of output stream (0 = original width) |
height |
int | 0 | 0+ | Height of output stream (0 = original height) |
quality |
int | 95 | 1-100 | Quality for MJPEG and PNG streams |
bitrate |
int | 100000 | Positive integer | Bitrate for H264/VP8/VP9 streams in bits/second |
invert |
flag | not present | present/not present | Invert image when parameter is present |
default_transport |
string | “raw” | “raw”, “compressed”, “theora” | Image transport to use |
qos_profile |
string | “default” | “default”, “system_default”, “sensor_data”, “services_default” | QoS profile for ROS 2 subscribers |
Examples:
# Stream an MJPEG at 640x480 with 90% quality
http://localhost:8080/stream?topic=/camera/image_raw&type=mjpeg&width=640&height=480&quality=90
# Stream H264 with higher bitrate
http://localhost:8080/stream?topic=/camera/image_raw&type=h264&bitrate=500000
# Stream with inverted image (rotated 180°)
http://localhost:8080/stream?topic=/camera/image_raw&invert
Get a Snapshot
It is also possible to get a single image snapshot
http://localhost:8080/snapshot?topic=/camera/image_raw
URL Parameters for Snapshot
Parameter | Type | Default | Possible Values | Description |
---|---|---|---|---|
topic |
string | (required) | Any valid ROS image topic | The ROS image topic to stream |
width |
int | 0 | 0+ | Width of output picture (0 = original width) |
height |
int | 0 | 0+ | Height of output picture (0 = original height) |
quality |
int | 95 | 1-100 | Quality for JPEG snapshots |
invert |
flag | not present | present/not present | Invert image when parameter is present |
default_transport |
string | “raw” | “raw”, “compressed”, “theora” | Image transport to use |
qos_profile |
string | “default” | “default”, “system_default”, “sensor_data”, “services_default” | QoS profile for ROS 2 subscribers |
About
This project is released as part of the Robot Web Tools effort.
License
web_video_server is released with a BSD license. For full terms and conditions, see the LICENSE file.
Authors
See the AUTHORS file for a full list of contributors.
CONTRIBUTING
Any contribution that you make to this repository will be under the 3-Clause BSD License, as dictated by that license.
Repository Summary
Description | HTTP Streaming of ROS Image Topics in Multiple Formats |
Checkout URI | https://github.com/RobotWebTools/web_video_server.git |
VCS Type | git |
VCS Version | ros2 |
Last Updated | 2025-04-23 |
Dev Status | MAINTAINED |
CI status | No Continuous Integration |
Released | RELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (0)
Good First Issues (0) Pull Requests to Review (0) |
Packages
Name | Version |
---|---|
web_video_server | 2.0.1 |
README
web_video_server - HTTP Streaming of ROS Image Topics in Multiple Formats
This node provides HTTP streaming of ROS image topics in various formats, making it easy to view robot camera feeds and other image topics in a web browser without requiring special plugins or extensions.
Features
- Stream ROS image topics over HTTP in multiple formats:
- MJPEG (Motion JPEG)
- VP8 (WebM)
- VP9 (WebM)
- H264 (MP4)
- PNG streams
- ROS compressed image topics
- Adjustable quality, size, and other streaming parameters
- Web interface to browse available image topics
- Single image snapshot capability
- Support for different QoS profiles in ROS 2
Installation
Dependencies
- ROS (Noetic) or ROS 2 (Humble+)
- OpenCV
- FFmpeg/libav
- Boost
- async_web_server_cpp
Installing packages
For newer ROS2 distributions (humble, jazzy, rolling) it is possible to install web_video_server as a package:
sudo apt install ros-${ROS_DISTRO}-web-video-server
Building from Source
Create a ROS workspace if you don’t have one:
mkdir -p ~/ros_ws/src
cd ~/ros_ws/src
Clone this repository:
# ROS 2
git clone https://github.com/RobotWebTools/web_video_server.git
# ROS 1
git clone https://github.com/RobotWebTools/web_video_server.git -b ros1
Install dependencies with rosdep:
cd ~/ros_ws
rosdep update
rosdep install --from-paths src -i
Build the package and source your workspace:
colcon build --packages-select web_video_server
source install/setup.bash
Usage
Starting the Server
# ROS 1
rosrun web_video_server web_video_server
# ROS 2
ros2 run web_video_server web_video_server
Configuration
Server Configuration Parameters
Parameter | Type | Default | Possible Values | Description |
---|---|---|---|---|
port |
int | 8080 | Any valid port number | HTTP server port |
address |
string | “0.0.0.0” | Any valid IP address | HTTP server address (0.0.0.0 allows external connections) |
server_threads |
int | 1 | 1+ | Number of server threads for handling HTTP requests |
ros_threads |
int | 2 | 1+ | Number of threads for ROS message handling |
verbose |
bool | false | true, false | Enable verbose logging |
default_stream_type |
string | “mjpeg” | “mjpeg”, “vp8”, “vp9”, “h264”, “png”, “ros_compressed” | Default format for video streams |
publish_rate |
double | -1.0 | -1.0 or positive value | Rate for republishing images (-1.0 means no republishing) |
Running with Custom Parameters
You can configure the server by passing parameters via the command line:
# ROS 1
rosrun web_video_server web_video_server _port:=8081 _address:=localhost _server_threads:=4
# ROS 2
ros2 run web_video_server web_video_server --ros-args -p port:=8081 -p address:=localhost -p server_threads:=4
View Available Streams
http://localhost:8080/
The interface allows quick navigation between different topics and formats without having to manually construct URLs.
This page displays:
- All available ROS image topics currently being published
- Direct links to view each topic in different formats:
- Web page with streaming image
- Direct stream
- Single image snapshot
Stream an Image Topic
There are two ways to stream the Image, as a HTML page via
http://localhost:8080/stream_viewer?topic=/camera/image_raw
or as a HTTP multipart stream on
http://localhost:8080/stream?topic=/camera/image_raw
URL Parameters for Streaming
The following parameters can be added to the stream URL:
Parameter | Type | Default | Possible Values | Description |
---|---|---|---|---|
topic |
string | (required) | Any valid ROS image topic | The ROS image topic to stream |
type |
string | “mjpeg” | “mjpeg”, “vp8”, “vp9”, “h264”, “png”, “ros_compressed” | Stream format |
width |
int | 0 | 0+ | Width of output stream (0 = original width) |
height |
int | 0 | 0+ | Height of output stream (0 = original height) |
quality |
int | 95 | 1-100 | Quality for MJPEG and PNG streams |
bitrate |
int | 100000 | Positive integer | Bitrate for H264/VP8/VP9 streams in bits/second |
invert |
flag | not present | present/not present | Invert image when parameter is present |
default_transport |
string | “raw” | “raw”, “compressed”, “theora” | Image transport to use |
qos_profile |
string | “default” | “default”, “system_default”, “sensor_data”, “services_default” | QoS profile for ROS 2 subscribers |
Examples:
# Stream an MJPEG at 640x480 with 90% quality
http://localhost:8080/stream?topic=/camera/image_raw&type=mjpeg&width=640&height=480&quality=90
# Stream H264 with higher bitrate
http://localhost:8080/stream?topic=/camera/image_raw&type=h264&bitrate=500000
# Stream with inverted image (rotated 180°)
http://localhost:8080/stream?topic=/camera/image_raw&invert
Get a Snapshot
It is also possible to get a single image snapshot
http://localhost:8080/snapshot?topic=/camera/image_raw
URL Parameters for Snapshot
Parameter | Type | Default | Possible Values | Description |
---|---|---|---|---|
topic |
string | (required) | Any valid ROS image topic | The ROS image topic to stream |
width |
int | 0 | 0+ | Width of output picture (0 = original width) |
height |
int | 0 | 0+ | Height of output picture (0 = original height) |
quality |
int | 95 | 1-100 | Quality for JPEG snapshots |
invert |
flag | not present | present/not present | Invert image when parameter is present |
default_transport |
string | “raw” | “raw”, “compressed”, “theora” | Image transport to use |
qos_profile |
string | “default” | “default”, “system_default”, “sensor_data”, “services_default” | QoS profile for ROS 2 subscribers |
About
This project is released as part of the Robot Web Tools effort.
License
web_video_server is released with a BSD license. For full terms and conditions, see the LICENSE file.
Authors
See the AUTHORS file for a full list of contributors.
CONTRIBUTING
Any contribution that you make to this repository will be under the 3-Clause BSD License, as dictated by that license.
Repository Summary
Description | HTTP Streaming of ROS Image Topics in Multiple Formats |
Checkout URI | https://github.com/RobotWebTools/web_video_server.git |
VCS Type | git |
VCS Version | ros2 |
Last Updated | 2025-04-23 |
Dev Status | MAINTAINED |
CI status | No Continuous Integration |
Released | RELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (0)
Good First Issues (0) Pull Requests to Review (0) |
Packages
Name | Version |
---|---|
web_video_server | 2.0.1 |
README
web_video_server - HTTP Streaming of ROS Image Topics in Multiple Formats
This node provides HTTP streaming of ROS image topics in various formats, making it easy to view robot camera feeds and other image topics in a web browser without requiring special plugins or extensions.
Features
- Stream ROS image topics over HTTP in multiple formats:
- MJPEG (Motion JPEG)
- VP8 (WebM)
- VP9 (WebM)
- H264 (MP4)
- PNG streams
- ROS compressed image topics
- Adjustable quality, size, and other streaming parameters
- Web interface to browse available image topics
- Single image snapshot capability
- Support for different QoS profiles in ROS 2
Installation
Dependencies
- ROS (Noetic) or ROS 2 (Humble+)
- OpenCV
- FFmpeg/libav
- Boost
- async_web_server_cpp
Installing packages
For newer ROS2 distributions (humble, jazzy, rolling) it is possible to install web_video_server as a package:
sudo apt install ros-${ROS_DISTRO}-web-video-server
Building from Source
Create a ROS workspace if you don’t have one:
mkdir -p ~/ros_ws/src
cd ~/ros_ws/src
Clone this repository:
# ROS 2
git clone https://github.com/RobotWebTools/web_video_server.git
# ROS 1
git clone https://github.com/RobotWebTools/web_video_server.git -b ros1
Install dependencies with rosdep:
cd ~/ros_ws
rosdep update
rosdep install --from-paths src -i
Build the package and source your workspace:
colcon build --packages-select web_video_server
source install/setup.bash
Usage
Starting the Server
# ROS 1
rosrun web_video_server web_video_server
# ROS 2
ros2 run web_video_server web_video_server
Configuration
Server Configuration Parameters
Parameter | Type | Default | Possible Values | Description |
---|---|---|---|---|
port |
int | 8080 | Any valid port number | HTTP server port |
address |
string | “0.0.0.0” | Any valid IP address | HTTP server address (0.0.0.0 allows external connections) |
server_threads |
int | 1 | 1+ | Number of server threads for handling HTTP requests |
ros_threads |
int | 2 | 1+ | Number of threads for ROS message handling |
verbose |
bool | false | true, false | Enable verbose logging |
default_stream_type |
string | “mjpeg” | “mjpeg”, “vp8”, “vp9”, “h264”, “png”, “ros_compressed” | Default format for video streams |
publish_rate |
double | -1.0 | -1.0 or positive value | Rate for republishing images (-1.0 means no republishing) |
Running with Custom Parameters
You can configure the server by passing parameters via the command line:
# ROS 1
rosrun web_video_server web_video_server _port:=8081 _address:=localhost _server_threads:=4
# ROS 2
ros2 run web_video_server web_video_server --ros-args -p port:=8081 -p address:=localhost -p server_threads:=4
View Available Streams
http://localhost:8080/
The interface allows quick navigation between different topics and formats without having to manually construct URLs.
This page displays:
- All available ROS image topics currently being published
- Direct links to view each topic in different formats:
- Web page with streaming image
- Direct stream
- Single image snapshot
Stream an Image Topic
There are two ways to stream the Image, as a HTML page via
http://localhost:8080/stream_viewer?topic=/camera/image_raw
or as a HTTP multipart stream on
http://localhost:8080/stream?topic=/camera/image_raw
URL Parameters for Streaming
The following parameters can be added to the stream URL:
Parameter | Type | Default | Possible Values | Description |
---|---|---|---|---|
topic |
string | (required) | Any valid ROS image topic | The ROS image topic to stream |
type |
string | “mjpeg” | “mjpeg”, “vp8”, “vp9”, “h264”, “png”, “ros_compressed” | Stream format |
width |
int | 0 | 0+ | Width of output stream (0 = original width) |
height |
int | 0 | 0+ | Height of output stream (0 = original height) |
quality |
int | 95 | 1-100 | Quality for MJPEG and PNG streams |
bitrate |
int | 100000 | Positive integer | Bitrate for H264/VP8/VP9 streams in bits/second |
invert |
flag | not present | present/not present | Invert image when parameter is present |
default_transport |
string | “raw” | “raw”, “compressed”, “theora” | Image transport to use |
qos_profile |
string | “default” | “default”, “system_default”, “sensor_data”, “services_default” | QoS profile for ROS 2 subscribers |
Examples:
# Stream an MJPEG at 640x480 with 90% quality
http://localhost:8080/stream?topic=/camera/image_raw&type=mjpeg&width=640&height=480&quality=90
# Stream H264 with higher bitrate
http://localhost:8080/stream?topic=/camera/image_raw&type=h264&bitrate=500000
# Stream with inverted image (rotated 180°)
http://localhost:8080/stream?topic=/camera/image_raw&invert
Get a Snapshot
It is also possible to get a single image snapshot
http://localhost:8080/snapshot?topic=/camera/image_raw
URL Parameters for Snapshot
Parameter | Type | Default | Possible Values | Description |
---|---|---|---|---|
topic |
string | (required) | Any valid ROS image topic | The ROS image topic to stream |
width |
int | 0 | 0+ | Width of output picture (0 = original width) |
height |
int | 0 | 0+ | Height of output picture (0 = original height) |
quality |
int | 95 | 1-100 | Quality for JPEG snapshots |
invert |
flag | not present | present/not present | Invert image when parameter is present |
default_transport |
string | “raw” | “raw”, “compressed”, “theora” | Image transport to use |
qos_profile |
string | “default” | “default”, “system_default”, “sensor_data”, “services_default” | QoS profile for ROS 2 subscribers |
About
This project is released as part of the Robot Web Tools effort.
License
web_video_server is released with a BSD license. For full terms and conditions, see the LICENSE file.
Authors
See the AUTHORS file for a full list of contributors.
CONTRIBUTING
Any contribution that you make to this repository will be under the 3-Clause BSD License, as dictated by that license.