HTTP video streaming of ROS image topics


This package provides a video stream of a ROS image transport topic that can be accessed via HTTP.


~port (integer, default: 8888)
  • Port number to listen for http requests.
~codec (string, default: webm)
  • Select video codec. At the moment only "webm" is supported.
~bitrate (integer, default: 100000)
  • Maximum bitrate setting. Note that a small bitrate could significantly increase the latency due to a delayed transmission of larger intra frames.
~framerate (integer, default: 30)
  • Framerate of encoded video. If the frame rate on the corresponding ROS topic is higher, frames will be dropped.
~gop (integer, default: 60)
  • Intra frame rate (group of pictures)
~frame_width (integer, default: -1 (input resolution))
  • With in pixels of output video
~frame_height (integer, default: -1 (input resolution))
  • Height in pixels of output video
~profile (string, default: best) ~transport (string, default: raw)
  • Image transport plugin used to subscribe to ROS image topic
~www_file_server (bool, default: false)
  • Enable www file server. Note: The file server runs with user permissions and serves all accessible files.
~wwwroot (string, default: "./")
  • Root folder of www file server.


The ros_web_video opens a local port and waits for incoming HTTP requests. As soon as a video stream of a ROS image topic is requested via HTTP, it subscribes to the corresponding topic and creates an instance of the video encoder. The encoded raw video packets are served to the client. To connect to the node with your browser, use the following URLS:

  • Overview of available ROS topics: http://localhost:8888/

  • Webpage showing a video stream: http://localhost:8888/www/{ROS_TOPIC}

  • Video stream URL: http://localhost:8888/streams/{ROS_TOPIC}.webm?{PARAMETERS}

Several parameters can be configure via the video stream URL - Example: http://localhost:8888/streams/depthcloud_encoded.webm?bitrate=250000&framerate=15.

These are the parameters that can be used to configure the video feed via HTTP:

  • codec
  • bitrate
  • framerate
  • gop
  • quality
  • width
  • height
  • profile

More information on the quality and profile parameter of the VP8 codec can be found here:


The ros_web_streamer tries to minimize internal coding latency by avoiding a B-frame encoding scheme and by forcing the codec to keep its internal network buffer as small as possible. On the browser side, however, HTML5 does not allow any control of the video playback buffer. Depending on the Internet connection, the browser might cache a few seconds of video data first before starting the video playback. Best performance with respect to latency and stability has been achieve with recent versions of the Chrome browser.

Source Code

Source code is available at


Please send bug reports to the GitHub Issue Tracker. Feel free to contact us at any point with questions and comments.

Wiki: ros_web_video (last edited 2013-05-29 17:21:46 by DavidGossow)