{"id":20776916,"url":"https://github.com/introlab/opentera-webrtc","last_synced_at":"2025-04-30T18:26:03.899Z","repository":{"id":38392761,"uuid":"268647483","full_name":"introlab/opentera-webrtc","owner":"introlab","description":"WebRTC JavaScript, C++ and Python libraries and signaling server for the OpenTera project with hardware acceleration with GStreamer","archived":false,"fork":false,"pushed_at":"2024-07-26T16:21:37.000Z","size":7641,"stargazers_count":29,"open_issues_count":6,"forks_count":1,"subscribers_count":4,"default_branch":"main","last_synced_at":"2024-07-26T22:37:40.029Z","etag":null,"topics":["cplusplus","cpp","gstreamer","javascript","jetson","library","opentera","python","raspberrypi","robotics","signaling-server","webrtc"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/introlab.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-06-01T22:36:39.000Z","updated_at":"2024-07-26T16:14:02.000Z","dependencies_parsed_at":"2024-01-16T19:43:11.554Z","dependency_job_id":"d515a091-c1b8-49e9-ab55-e8598a199c00","html_url":"https://github.com/introlab/opentera-webrtc","commit_stats":null,"previous_names":[],"tags_count":25,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/introlab%2Fopentera-webrtc","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/introlab%2Fopentera-webrtc/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/introlab%2Fopentera-webrtc/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/introlab%2Fopentera-webrtc/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/introlab","download_url":"https://codeload.github.com/introlab/opentera-webrtc/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":225040322,"owners_count":17411461,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cplusplus","cpp","gstreamer","javascript","jetson","library","opentera","python","raspberrypi","robotics","signaling-server","webrtc"],"created_at":"2024-11-17T13:12:50.852Z","updated_at":"2024-11-17T13:12:51.372Z","avatar_url":"https://github.com/introlab.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# OpenTera - WebRTC\n\n[![Actions Status](https://github.com/introlab/opentera-webrtc/workflows/cpp-python-tests/badge.svg)](https://github.com/introlab/opentera-webrtc/actions)\n\n[WebRTC](https://webrtc.org/) is a standard for real-time audio/video/data communication and is mostly used in web browsers.\nFor the [OpenTera](https://github.com/introlab/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.\n\nThis project provides:\n\n* [A signaling server](signaling-server) written in Python that can be used as a stand-alone server or embedded in our [OpenTera Teleoperation Micro-Service](https://github.com/introlab/opentera-teleop-service)\n* [A native libwebrtc wrapper](opentera-webrtc-native-client/OpenteraWebrtcNativeClient/src) that is used as a C++ base library for clients using our signaling server.\n* [GStreamer video codec factories for libwebrtc](opentera-webrtc-native-client/OpenTeraWebrtcNativeGstreamer) to enable both software and [hardware encoders/decoders](#hardware-acceleration-with-gstreamer) if available.\n* Possiblity to force usage of a particular codec with [VideoStreamConfiguration](opentera-webrtc-native-client/OpenteraWebrtcNativeClient/include/OpenteraWebrtcNativeClient/Configurations/VideoStreamConfiguration.h)\n* [Python 3 bindings](opentera-webrtc-native-client/OpenteraWebrtcNativeClient/python) that are used as a Python module for clients using our signaling server.\n* [A JavaScript library](opentera-webrtc-web-client) That is used for web client developement and teleoperation interface using our signaling server.\n\n## License\n\nBy default, libwebrtc is built with non-free codecs. See [webrtc-native-build](https://github.com/introlab/webrtc-native-build#license) to build without them.\n\n* [Apache License, Version 2.0](LICENSE)\n* For GStreamer components, please read [this](opentera-webrtc-native-client/OpenteraWebrtcNativeGStreamer/README.md).\n\n\n## API Documentation\n\nAPI Documentation is available [here](https://introlab.github.io/opentera-webrtc).\n\n## How to Contribute\n\nPlease read the [Code of Conduct](CODE_OF_CONDUCT.md) and [CONTRIBUTING](CONTRIBUTING.md) files.\n\n## Dependencies\n\n* Most dependencies are part of the project with git submodules in the [opentera-webrtc-native-client/3rdParty](opentera-webrtc-native-client/3rdParty) directory.\n\n## Build Instructions\n\n* Please see [Build Instructions](BUILD_INSTRUCTIONS.md).\n\n## Examples\n\n### C++\n\n* [data-channel-client](examples/cpp-data-channel-client)\n* [cpp-video-stream-client](examples/cpp-video-stream-client)\n* [cpp-camera-stream-client](examples/cpp-camera-stream-client)\n\n### Python\n\n* [data-channel-client](examples/python-data-channel-client)\n* [stream-client](examples/python-stream-client)\n\n### Javascript\n\n* [data-channel-client](examples/web-data-channel-client)\n* [stream-client](examples/web-stream-client)\n* [stream-data-channel-client](examples/web-stream-data-channel-client)\n\n## Hardware Acceleration with GStreamer\n\nHardware acceleration depends on the platform you are using to build opentera-webrtc. The following table summarizes supported hardware and GStreamer plugins:\n\n| Platform                          | VP8                         | VP9           | H.264                        |\n|-----------------------------------|-----------------------------|---------------|------------------------------|\n| Jetson TX2/Nano                   | nvv4l2vp8enc, nvv4l2decoder | nvv4l2decoder | nvv4l2h264enc, nvv4l2decoder |\n| Jetson Xavier NX                  | X                           | nvv4l2decoder | nvv4l2h264enc, nvv4l2decoder |\n| Jetson AGX Xavier                 | X                           | nvv4l2decoder | nvv4l2h264enc, nvv4l2decoder |\n| Jetson Orin / Orin Nano / Orin NX | X                           | nvv4l2decoder | nvv4l2h264enc, nvv4l2decoder |\n| Raspberry Pi 4                    | X                           | X             | v4l2h264enc, v4l2h264dec     |\n| VA-API                            | vaapivp8enc, vaapivp8dec    | vaapivp9dec   | vaapih264enc, vaapih264dec   |\n| Apple Media                       | X                           | X             | vtenc_h264, vtdec            |\n\nNote that VP9 encoding is under development, see issue [117](https://github.com/introlab/opentera-webrtc/issues/117).\n\n## ROS\n\n* The C++ library and Python bindings are used in our [opentera_webrtc_ros ROS package](https://github.com/introlab/opentera-webrtc-ros). 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.\n\n## Frontend\n\n* The JavaScript library is used for our [opentera WebRTC teleoperation frontend](https://github.com/introlab/opentera-webrtc-teleop-frontend).\n\n## Authors\n\n* Marc-Antoine Maheux (@mamaheux)\n* Dominic Létourneau (@doumdi)\n* Philippe Warren (@philippewarren)\n* François Michaud (@michaudf)\n\n## Contributors\n\n* Cédric Godin (@godced)\n* Ian-Mathieu Joly (@joli-1801)\n\n## Sponsor\n\n![IntRoLab](images/IntRoLab.png)\n\n[IntRoLab - Intelligent / Interactive / Integrated / Interdisciplinary Robot Lab](https://introlab.3it.usherbrooke.ca)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fintrolab%2Fopentera-webrtc","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fintrolab%2Fopentera-webrtc","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fintrolab%2Fopentera-webrtc/lists"}