WebRTC is a standard for real-time audio/video/data communication and is mostly used in web browsers. For the OpenTera micro-service architecture, we wanted to use Google's native WebRTC implementation for robots so we would have more control on the streams and develop a framework that is optimized for robot teleoperation. We also wanted to use hardware acceleration if possible on embedded platforms.
This project provides:
- A signaling server written in Python that can be used as a stand-alone server or embedded in our OpenTera Teleoperation Micro-Service
- A native libwebrtc wrapper that is used as a C++ base library for clients using our signaling server.
- GStreamer video codec factories for libwebrtc to enable both software and hardware encoders/decoders if available.
- Possiblity to force usage of a particular codec with VideoStreamConfiguration
- Python 3 bindings that are used as a Python module for clients using our signaling server.
- A JavaScript library That is used for web client developement and teleoperation interface using our signaling server.
By default, libwebrtc is built with non-free codecs. See webrtc-native-build to build without them.
- Apache License, Version 2.0
- For GStreamer components, please read this.
API Documentation is available here.
Please read the Code of Conduct and CONTRIBUTING files.
- Most dependencies are part of the project with git submodules in the opentera-webrtc-native-client/3rdParty directory.
- Please see Build Instructions.
Hardware acceleration depends on the platform you are using to build opentera-webrtc. The following table summarizes supported hardware and GStreamer plugins:
Platform | VP8 | VP9 | H.264 |
---|---|---|---|
Jetson TX2/Nano | nvv4l2vp8enc, nvv4l2decoder | nvv4l2decoder | nvv4l2h264enc, nvv4l2decoder |
Jetson Xavier NX | X | nvv4l2decoder | nvv4l2h264enc, nvv4l2decoder |
Jetson AGX Xavier | X | nvv4l2decoder | nvv4l2h264enc, nvv4l2decoder |
Jetson Orin / Orin Nano / Orin NX | X | nvv4l2decoder | nvv4l2h264enc, nvv4l2decoder |
Raspberry Pi 4 | X | X | v4l2h264enc, v4l2h264dec |
VA-API | vaapivp8enc, vaapivp8dec | vaapivp9dec | vaapih264enc, vaapih264dec |
Apple Media | X | X | vtenc_h264, vtdec |
Note that VP9 encoding is under development, see issue 117.
- The C++ library and Python bindings are used in our opentera_webrtc_ros ROS package. RGB images published in ROS topics can be easily used for streaming in a RTCPeerConnection using our signaling server. Hardware acceleration and codec selection can be used if available.
- The JavaScript library is used for our opentera WebRTC teleoperation frontend.
- Marc-Antoine Maheux (@mamaheux)
- Dominic Létourneau (@doumdi)
- Philippe Warren (@philippewarren)
- François Michaud (@michaudf)
- Cédric Godin (@godced)
- Ian-Mathieu Joly (@joli-1801)
IntRoLab - Intelligent / Interactive / Integrated / Interdisciplinary Robot Lab