├── .clang-format ├── .github ├── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_request.md ├── PULL_REQUEST_TEMPLATE.md └── workflows │ ├── cpp-python-tests.yml │ ├── gen-doc-and-release.yml │ └── github-stats.yml ├── .gitignore ├── .gitmodules ├── BUILD_INSTRUCTIONS.md ├── CMakeLists.txt ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── VERSION ├── cmake ├── macos_get_version.cmake ├── macos_get_version_script.cmake ├── pip_install.cmake.in └── pip_utils.cmake ├── doc ├── .nojekyll ├── README.md ├── cpp │ ├── Doxyfile │ └── mainpage.dox ├── footer.html ├── header.html ├── index.html ├── js │ ├── Doxyfile │ └── mainpage.dox └── stylesheet.css ├── examples ├── cpp-camera-stream-client │ ├── .gitignore │ ├── AlsaPcmDevice.cpp │ ├── AlsaPcmDevice.h │ ├── CMakeLists.txt │ ├── README.md │ └── main.cpp ├── cpp-data-channel-client-reliability-tests │ ├── .gitignore │ ├── CMakeLists.txt │ ├── README.md │ ├── iceServers.json │ ├── main.cpp │ └── start_server.bash ├── cpp-data-channel-client │ ├── .gitignore │ ├── CMakeLists.txt │ ├── README.md │ └── main.cpp ├── cpp-video-stream-client │ ├── .gitignore │ ├── CMakeLists.txt │ ├── README.md │ └── main.cpp ├── python-data-channel-client │ ├── README.md │ └── python_data_channel_client.py ├── python-stream-client │ ├── README.md │ ├── frame.png │ ├── python_stream_client.py │ └── requirements.txt ├── web-data-channel-client │ ├── .gitignore │ ├── README.md │ ├── client.html │ ├── client.js │ ├── iceServers.json │ └── start_server.bash ├── web-stream-client │ ├── .gitignore │ ├── README.md │ ├── client.html │ ├── client.js │ ├── iceServers.json │ └── start_server.bash └── web-stream-data-channel-client │ ├── .gitignore │ ├── README.md │ ├── client.html │ ├── client.js │ ├── iceServers.json │ └── start_server.bash ├── images └── IntRoLab.png ├── opentera-webrtc-native-client ├── .gitignore ├── 3rdParty │ ├── .clang-format │ ├── CMakeLists.txt │ └── webrtc_native │ │ ├── .gitignore │ │ └── CMakeLists.txt ├── CMakeLists.txt ├── OpenteraWebrtcNativeClient │ ├── CMakeLists.txt │ ├── README.md │ ├── include │ │ └── OpenteraWebrtcNativeClient │ │ │ ├── Codecs │ │ │ └── VideoCodecFactories.h │ │ │ ├── Configurations │ │ │ ├── AudioSourceConfiguration.h │ │ │ ├── DataChannelConfiguration.h │ │ │ ├── SignalingServerConfiguration.h │ │ │ ├── VideoSourceConfiguration.h │ │ │ ├── VideoStreamConfiguration.h │ │ │ └── WebrtcConfiguration.h │ │ │ ├── DataChannelClient.h │ │ │ ├── Handlers │ │ │ ├── DataChannelPeerConnectionHandler.h │ │ │ ├── PeerConnectionHandler.h │ │ │ └── StreamPeerConnectionHandler.h │ │ │ ├── OpenteraAudioDeviceModule.h │ │ │ ├── Signaling │ │ │ ├── SignalingClient.h │ │ │ └── WebSocketSignalingClient.h │ │ │ ├── Sinks │ │ │ ├── AudioSink.h │ │ │ ├── EncodedVideoSink.h │ │ │ └── VideoSink.h │ │ │ ├── Sources │ │ │ ├── AudioSource.h │ │ │ └── VideoSource.h │ │ │ ├── StreamClient.h │ │ │ ├── Utils │ │ │ ├── ClassMacro.h │ │ │ ├── Client.h │ │ │ ├── FunctionTask.h │ │ │ ├── Http.h │ │ │ ├── IceServer.h │ │ │ └── thread.h │ │ │ ├── WebrtcClient.h │ │ │ └── version.h │ ├── python │ │ ├── CMakeLists.txt │ │ ├── include │ │ │ └── OpenteraWebrtcNativeClientPython │ │ │ │ ├── Configurations │ │ │ │ ├── AudioSourceConfigurationPython.h │ │ │ │ ├── DataChannelConfigurationPython.h │ │ │ │ ├── SignalingServerConfigurationPython.h │ │ │ │ ├── VideoSourceConfigurationPython.h │ │ │ │ ├── VideoStreamConfigurationPython.h │ │ │ │ └── WebrtcConfigurationPython.h │ │ │ │ ├── DataChannelClientPython.h │ │ │ │ ├── Json.h │ │ │ │ ├── PyBindUtils.h │ │ │ │ ├── Sources │ │ │ │ ├── AudioSourcePython.h │ │ │ │ └── VideoSourcePython.h │ │ │ │ ├── StreamClientPython.h │ │ │ │ ├── Utils │ │ │ │ ├── ClientPython.h │ │ │ │ └── IceServerPython.h │ │ │ │ └── WebrtcClientPython.h │ │ ├── package │ │ │ ├── CMakeLists.txt │ │ │ ├── MANIFEST.in.in │ │ │ ├── README.md.in │ │ │ ├── __init__.py.in │ │ │ ├── _source │ │ │ │ ├── conf.py.in │ │ │ │ ├── index.rst │ │ │ │ └── theme │ │ │ │ │ └── requirements.txt │ │ │ ├── post-process-doc.sh │ │ │ ├── post-process-stub.sh │ │ │ └── setup.py.in │ │ ├── src │ │ │ ├── Configurations │ │ │ │ ├── AudioSourceConfigurationPython.cpp │ │ │ │ ├── DataChannelConfigurationPython.cpp │ │ │ │ ├── SignalingServerConfigurationPython.cpp │ │ │ │ ├── VideoSourceConfigurationPython.cpp │ │ │ │ ├── VideoStreamConfigurationPython.cpp │ │ │ │ └── WebrtcConfigurationPython.cpp │ │ │ ├── DataChannelClientPython.cpp │ │ │ ├── Json.cpp │ │ │ ├── Sources │ │ │ │ ├── AudioSourcePython.cpp │ │ │ │ └── VideoSourcePython.cpp │ │ │ ├── StreamClientPython.cpp │ │ │ ├── Utils │ │ │ │ ├── ClientPython.cpp │ │ │ │ └── IceServerPython.cpp │ │ │ ├── WebrtcClientPython.cpp │ │ │ └── opentera_webrtc_native_client.cpp │ │ └── test │ │ │ ├── .gitignore │ │ │ ├── callback_awaiter.py │ │ │ ├── configurations │ │ │ ├── __init__.py │ │ │ ├── audio_source_configuration_test.py │ │ │ ├── data_channel_configuration_test.py │ │ │ ├── signaling_server_configuration_test.py │ │ │ ├── video_source_configuration_test.py │ │ │ ├── video_stream_configuration_test.py │ │ │ └── webrtc_configuration_test.py │ │ │ ├── data_channel_client_test.py │ │ │ ├── failure_test_case.py │ │ │ ├── requirements.txt │ │ │ ├── resources │ │ │ └── iceServers.json │ │ │ ├── signaling_server_runner.py │ │ │ ├── sources │ │ │ ├── __init__.py │ │ │ ├── audio_source_test.py │ │ │ └── video_source_test.py │ │ │ ├── start_tests.bash │ │ │ ├── stream_client_test.py │ │ │ ├── utils │ │ │ ├── __init__.py │ │ │ ├── client_test.py │ │ │ └── ice_server_test.py │ │ │ └── websocket_inactive_client_test.py │ ├── src │ │ ├── Codecs │ │ │ └── VideoCodecFactories.cpp │ │ ├── Configurations │ │ │ ├── AudioSourceConfiguration.cpp │ │ │ ├── DataChannelConfiguration.cpp │ │ │ ├── SignalingServerConfiguration.cpp │ │ │ ├── VideoSourceConfiguration.cpp │ │ │ ├── VideoStreamConfiguration.cpp │ │ │ └── WebrtcConfiguration.cpp │ │ ├── DataChannelClient.cpp │ │ ├── Handlers │ │ │ ├── DataChannelPeerConnectionHandler.cpp │ │ │ ├── PeerConnectionHandler.cpp │ │ │ └── StreamPeerConnectionHandler.cpp │ │ ├── OpenteraAudioDeviceModule.cpp │ │ ├── Signaling │ │ │ ├── SignalingClient.cpp │ │ │ └── WebSocketSignalingClient.cpp │ │ ├── Sinks │ │ │ ├── AudioSink.cpp │ │ │ ├── EncodedVideoSink.cpp │ │ │ └── VideoSink.cpp │ │ ├── Sources │ │ │ ├── AudioSource.cpp │ │ │ └── VideoSource.cpp │ │ ├── StreamClient.cpp │ │ ├── Utils │ │ │ ├── Client.cpp │ │ │ ├── Http.cpp │ │ │ ├── IceServer.cpp │ │ │ └── thread.cpp │ │ ├── WebrtcClient.cpp │ │ └── version.cpp │ └── test │ │ ├── CMakeLists.txt │ │ ├── include │ │ └── OpenteraWebrtcNativeClientTests │ │ │ └── CallbackAwaiter.h │ │ ├── resources │ │ ├── cert.pem │ │ ├── iceServers.json │ │ └── key.pem │ │ └── src │ │ ├── CallbackAwaiter.cpp │ │ ├── Codecs │ │ └── VideoCodecFactoriesTests.cpp │ │ ├── Configurations │ │ ├── AudioSourceConfigurationTests.cpp │ │ ├── DataChannelConfigurationTests.cpp │ │ ├── SignalingServerConfigurationTests.cpp │ │ ├── VideoSourceConfigurationTests.cpp │ │ ├── VideoStreamConfigurationTests.cpp │ │ └── WebrtcConfigurationTests.cpp │ │ ├── DataChannelClientTests.cpp │ │ ├── Sinks │ │ └── EncodedVideoSinkTests.cpp │ │ ├── Sources │ │ └── AudioSourceTests.cpp │ │ ├── StreamClientTests.cpp │ │ ├── Utils │ │ ├── ClientTests.cpp │ │ ├── FunctionTaskTests.cpp │ │ ├── HttpTests.cpp │ │ └── IceServerTests.cpp │ │ └── main.cpp ├── OpenteraWebrtcNativeGStreamer │ ├── CMakeLists.txt │ ├── LICENSE_APACHE-2.0 │ ├── LICENSE_GPL-3.0 │ ├── LICENSE_LGPL-3.0 │ ├── README.md │ ├── include │ │ └── OpenteraWebrtcNativeGStreamer │ │ │ ├── Decoders │ │ │ ├── GStreamerVideoDecoder.h │ │ │ ├── H264GStreamerVideoDecoders.h │ │ │ ├── Vp8GStreamerVideoDecoders.h │ │ │ └── Vp9GStreamerVideoDecoders.h │ │ │ ├── Encoders │ │ │ ├── GStreamerVideoEncoder.h │ │ │ ├── H264GStreamerVideoEncoders.h │ │ │ ├── Vp8GStreamerVideoEncoders.h │ │ │ └── Vp9GStreamerVideoEncoders.h │ │ │ ├── Factories │ │ │ ├── WebRtcGStreamerVideoDecoderFactory.h │ │ │ └── WebRtcGStreamerVideoEncoderFactory.h │ │ │ ├── Pipeline │ │ │ ├── GStreamerDecoderPipeline.h │ │ │ └── GStreamerEncoderPipeline.h │ │ │ └── Utils │ │ │ ├── ClassMacro.h │ │ │ ├── GStreamerBufferPool.h │ │ │ ├── GStreamerHelpers.h │ │ │ ├── GStreamerMessageHandling.h │ │ │ ├── GStreamerSupport.h │ │ │ ├── GstMappedBuffer.h │ │ │ ├── GstMappedFrame.h │ │ │ └── out_ptr.h │ └── src │ │ ├── Decoders │ │ ├── GStreamerVideoDecoder.cpp │ │ ├── H264GStreamerVideoDecoders.cpp │ │ ├── Vp8GStreamerVideoDecoders.cpp │ │ └── Vp9GStreamerVideoDecoders.cpp │ │ ├── Encoders │ │ ├── GStreamerVideoEncoder.cpp │ │ ├── H264GStreamerVideoEncoders.cpp │ │ ├── Vp8GStreamerVideoEncoders.cpp │ │ └── Vp9GStreamerVideoEncoders.cpp │ │ ├── Factories │ │ ├── WebRtcGStreamerVideoDecoderFactory.cpp │ │ └── WebRtcGStreamerVideoEncoderFactory.cpp │ │ ├── Pipeline │ │ ├── GStreamerDecoderPipeline.cpp │ │ └── GStreamerEncoderPipeline.cpp │ │ └── Utils │ │ ├── GStreamerBufferPool.cpp │ │ ├── GStreamerHelpers.cpp │ │ └── GStreamerSupport.cpp └── README.md ├── opentera-webrtc-web-client ├── .eslintrc.js ├── .gitignore ├── README.md ├── browser-tests │ ├── .gitignore │ ├── DataChannelClient │ │ ├── disconnectedDataChannelClient.spec.js │ │ ├── rightPasswordDataChannelClient.spec.js │ │ └── wrongPasswordDataChannelClient.spec.js │ ├── iceServers.json │ ├── iceServers.spec.js │ ├── run_browser_tests.bash │ └── tests.html ├── index.js ├── package.json ├── src │ ├── DataChannelClient.js │ ├── Signaling │ │ ├── SignalingClient.js │ │ └── WebSocketSignalingClient.js │ ├── StreamClient.js │ ├── StreamDataChannelClient.js │ ├── WebrtcClient.js │ ├── devices.js │ ├── iceServers.js │ └── index.js └── webpack.config.js ├── requirements.txt └── signaling-server ├── .gitignore ├── CMakeLists.txt ├── README.md ├── _source ├── conf.py.in ├── index.rst └── theme │ └── requirements.txt ├── opentera-signaling-server ├── opentera_webrtc ├── signaling_server │ ├── __init__.py │ ├── room_manager.py │ ├── signaling_server.py │ └── web_socket_client_manager.py └── tests │ ├── __init__.py │ ├── test_room_manager.py │ └── test_web_socket_client_manager.py ├── requirements.txt ├── setup.py.in └── tools └── generate_certificate.sh /.clang-format: -------------------------------------------------------------------------------- 1 | # LLVM 12 2 | --- 3 | BasedOnStyle: LLVM 4 | AccessModifierOffset: -4 5 | AlignAfterOpenBracket: AlwaysBreak 6 | AlignConsecutiveAssignments: None 7 | AlignConsecutiveBitFields: None 8 | AlignConsecutiveDeclarations: None 9 | AlignConsecutiveMacros: AcrossComments 10 | AlignEscapedNewlines: Right 11 | AlignOperands: Align 12 | AlignTrailingComments: false 13 | AllowAllArgumentsOnNextLine: false 14 | AllowAllConstructorInitializersOnNextLine: false 15 | AllowAllParametersOfDeclarationOnNextLine: false 16 | AllowShortBlocksOnASingleLine: Always 17 | AllowShortCaseLabelsOnASingleLine: false 18 | AllowShortEnumsOnASingleLine: false 19 | AllowShortFunctionsOnASingleLine: Inline 20 | AllowShortIfStatementsOnASingleLine: Never 21 | AllowShortLambdasOnASingleLine: All 22 | AllowShortLoopsOnASingleLine: false 23 | AlwaysBreakAfterReturnType: None 24 | AlwaysBreakBeforeMultilineStrings: false 25 | AlwaysBreakTemplateDeclarations: Yes 26 | AttributeMacros: [] 27 | BinPackArguments: false 28 | BinPackParameters: false 29 | BitFieldColonSpacing: After 30 | BreakBeforeBraces: Allman 31 | BreakBeforeBinaryOperators: None 32 | BreakBeforeConceptDeclarations: true 33 | BreakBeforeTernaryOperators: false 34 | BreakConstructorInitializers: BeforeColon 35 | BreakInheritanceList: BeforeColon 36 | BreakStringLiterals: true 37 | ColumnLimit: 120 38 | CompactNamespaces: false 39 | ConstructorInitializerAllOnOneLineOrOnePerLine: true 40 | ConstructorInitializerIndentWidth: 4 41 | ContinuationIndentWidth: 4 42 | Cpp11BracedListStyle: true 43 | DeriveLineEnding: false 44 | DerivePointerAlignment: false 45 | EmptyLineBeforeAccessModifier: LogicalBlock 46 | FixNamespaceComments: false 47 | ForEachMacros: [] 48 | IncludeBlocks: Preserve 49 | IndentCaseBlocks: false 50 | IndentCaseLabels: true 51 | IndentExternBlock: NoIndent 52 | IndentGotoLabels: true 53 | IndentPPDirectives: None 54 | IndentWidth: 4 55 | IndentWrappedFunctionNames: true 56 | KeepEmptyLinesAtTheStartOfBlocks: false 57 | Language: Cpp 58 | MaxEmptyLinesToKeep: 2 59 | NamespaceIndentation: All 60 | PointerAlignment: Left 61 | ReflowComments: true 62 | SortIncludes: false 63 | SortUsingDeclarations: false 64 | SpaceAfterCStyleCast: false 65 | SpaceAfterLogicalNot: false 66 | SpaceAfterTemplateKeyword: false 67 | SpaceAroundPointerQualifiers: Default 68 | SpaceBeforeAssignmentOperators: true 69 | SpaceBeforeCaseColon: false 70 | SpaceBeforeCpp11BracedList: false 71 | SpaceBeforeCtorInitializerColon: true 72 | SpaceBeforeInheritanceColon: true 73 | SpaceBeforeParens: ControlStatements 74 | SpaceBeforeRangeBasedForLoopColon: true 75 | SpaceBeforeSquareBrackets: false 76 | SpaceInEmptyBlock: false 77 | SpaceInEmptyParentheses: false 78 | SpacesBeforeTrailingComments: 2 79 | SpacesInAngles: Never 80 | SpacesInCStyleCastParentheses: false 81 | SpacesInConditionalStatement: false 82 | SpacesInContainerLiterals: false 83 | SpacesInParentheses: false 84 | SpacesInSquareBrackets: false 85 | Standard: c++14 86 | StatementAttributeLikeMacros: [emit] 87 | StatementMacros: [Q_UNUSED, Q_OBJECT] 88 | TabWidth: 4 89 | UseCRLF: false 90 | UseTab: Never 91 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **To Reproduce** 14 | Steps to reproduce the behavior: 15 | 1. Go to '...' 16 | 2. Click on '....' 17 | 3. Scroll down to '....' 18 | 4. See error 19 | 20 | **Expected behavior** 21 | A clear and concise description of what you expected to happen. 22 | 23 | **Screenshots** 24 | If applicable, add screenshots to help explain your problem. 25 | 26 | **Desktop (please complete the following information):** 27 | - OS: [e.g. iOS] 28 | - Browser [e.g. chrome, safari] 29 | - Version [e.g. 22] 30 | 31 | **Smartphone (please complete the following information):** 32 | - Device: [e.g. iPhone6] 33 | - OS: [e.g. iOS8.1] 34 | - Browser [e.g. stock browser, safari] 35 | - Version [e.g. 22] 36 | 37 | **Additional context** 38 | Add any other context about the problem here. 39 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Additional context** 20 | Add any other context or screenshots about the feature request here. 21 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | The document is based on [this template](https://github.com/auth0/open-source-template/blob/master/.github/PULL_REQUEST_TEMPLATE.md) 2 | 3 | By submitting a PR to this repository, you agree to the terms within the [Code of Conduct](https://github.com/introlab/opentera-webrtc/blob/main/CODE_OF_CONDUCT.md). 4 | Please see the [contributing guidelines](https://github.com/introlab/opentera-webrtc/blob/main/CONTRIBUTING.md) for how to create and submit a high-quality PR for this repo. 5 | 6 | ### Description 7 | 8 | > Describe the purpose of this PR along with any background information and the impacts of the proposed change. 9 | > For the benefit of the community, please do not assume prior context. 10 | > 11 | > Provide details that support your chosen implementation, including: breaking changes, alternatives considered, changes to the API, etc. 12 | 13 | 14 | ### References 15 | 16 | > Include any links supporting this change such as a: 17 | > 18 | > - GitHub Issue/PR number addressed or fixed 19 | > - Related pull requests/issues from other repos 20 | > 21 | > If there are no references, simply delete this section. 22 | 23 | ### Testing 24 | 25 | > Describe how this can be tested by reviewers. Be specific about anything not tested and reasons why. 26 | > Tests should be added for new functionality and existing tests should complete without errors. 27 | > 28 | > Please include any manual steps for testing end-to-end or functionality not covered by unit/integration tests. 29 | 30 | - [ ] This change adds test coverage for new/changed/fixed functionality 31 | 32 | ### Checklist 33 | 34 | - [ ] I have added documentation for new/changed functionality in this PR 35 | - [ ] I have formatted the files 36 | - [ ] All active GitHub checks for tests are passing 37 | - [ ] The correct base branch is being used, if not `main` 38 | -------------------------------------------------------------------------------- /.github/workflows/github-stats.yml: -------------------------------------------------------------------------------- 1 | name: Scheduled Stats Extraction From GitHub 2 | 3 | on: 4 | workflow_dispatch: 5 | schedule: 6 | - cron: '0 5 * * *' 7 | jobs: 8 | get_stats: 9 | runs-on: ubuntu-22.04 10 | steps: 11 | - name: Update Stats 12 | uses: introlab/github-stats-action@v1 13 | with: 14 | github-stats-token: ${{ secrets.STATS_TOKEN }} 15 | google-application-credentials: ${{ secrets.GOOGLE_APPLICATION_CREDENTIALS }} 16 | spreadsheet-id: ${{ secrets.SPREADSHEET_ID }} 17 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | build 3 | cmake-build-* 4 | compile_commands.json 5 | .gdbinit 6 | doc/cpp/html 7 | doc/js/html 8 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "opentera-webrtc-native-client/3rdParty/googletest"] 2 | path = opentera-webrtc-native-client/3rdParty/googletest 3 | url = https://github.com/google/googletest.git 4 | [submodule "opentera-webrtc-native-client/3rdParty/cpp-subprocess"] 5 | path = opentera-webrtc-native-client/3rdParty/cpp-subprocess 6 | url = https://github.com/arun11299/cpp-subprocess.git 7 | [submodule "opentera-webrtc-native-client/3rdParty/pybind11"] 8 | path = opentera-webrtc-native-client/3rdParty/pybind11 9 | url = https://github.com/pybind/pybind11.git 10 | [submodule "opentera-webrtc-native-client/3rdParty/cpp-httplib"] 11 | path = opentera-webrtc-native-client/3rdParty/cpp-httplib 12 | url = https://github.com/yhirose/cpp-httplib.git 13 | [submodule "opentera-webrtc-native-client/3rdParty/opencv"] 14 | path = opentera-webrtc-native-client/3rdParty/opencv 15 | url = https://github.com/opencv/opencv.git 16 | [submodule "opentera-webrtc-native-client/3rdParty/json"] 17 | path = opentera-webrtc-native-client/3rdParty/json 18 | url = https://github.com/nlohmann/json 19 | [submodule "opentera-webrtc-native-client/3rdParty/IXWebSocket"] 20 | path = opentera-webrtc-native-client/3rdParty/IXWebSocket 21 | url = https://github.com/machinezone/IXWebSocket.git 22 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing to opentera-webrtc 2 | This document is based on [this template](https://github.com/auth0/open-source-template/blob/master/GENERAL-CONTRIBUTING.md). 3 | 4 | Reading and following these guidelines will help us make the contribution process easy and effective for everyone involved. 5 | It also communicates that you agree to respect the time of the developers managing and developing these open source projects. 6 | In return, we will reciprocate that respect by addressing your issue, assessing changes, and helping you finalize your pull requests. 7 | 8 | ## Quick Links 9 | - [Code of Conduct](#code-of-conduct) 10 | - [Getting Started](#getting-started) 11 | - [Issues](#issues) 12 | - [Pull Requests](#pull-requests) 13 | 14 | ## Code of Conduct 15 | We take our open source community seriously and hold ourselves and other contributors to high standards of communication. 16 | By participating and contributing to this project, you agree to uphold our Code of Conduct. 17 | 18 | ## Getting Started 19 | Contributions are made to this repo via Issues and Pull Requests (PRs). A few general guidelines that cover both: 20 | - Search for existing Issues and PRs before creating your own. 21 | - 22 | 23 | ### Issues 24 | Issues should be used to report problems with the library, request a new feature, or to discuss potential changes before a PR is created. 25 | When you create a new Issue, a template will be loaded that will guide you through collecting and providing the information we need to investigate. 26 | 27 | If you find an Issue that addresses the problem you're having, please add your own reproduction information to the existing issue rather than creating a new one. 28 | Adding a reaction can also help be indicating to our maintainers that a particular problem is affecting more than just the reporter. 29 | 30 | ### Pull Requests 31 | 32 | PRs to our libraries are always welcome and can be a quick way to get your fix or improvement slated for the next release. 33 | In general, PRs should: 34 | - Only fix/add the functionality in question OR address wide-spread whitespace/style issues, not both. 35 | - Add unit or integration tests for fixed or changed functionality (if a test suite already exists). 36 | - Address a single concern in the least number of changed lines as possible. 37 | - Include documentation in the repo or on our docs site. 38 | - Be accompanied by a complete Pull Request template (loaded automatically when a PR is created). 39 | 40 | For changes that address core functionality or would require breaking changes (e.g. a major release), it's best to open an Issue to discuss your proposal first. 41 | This is not required but can save time creating and reviewing changes. 42 | 43 | In general, we follow the "fork-and-pull" Git workflow 44 | 45 | 1. Fork the repository to your own Github account 46 | 2. Clone the project to your machine 47 | 3. Create a branch locally with a succinct but descriptive name 48 | 4. Commit changes to the branch 49 | 5. Following any formatting and testing guidelines specific to this repo 50 | 6. Push changes to your fork 51 | 7. Open a PR in our repository and follow the PR template so that we can efficiently review the changes. 52 | 53 | 54 | -------------------------------------------------------------------------------- /VERSION: -------------------------------------------------------------------------------- 1 | 1.2.6 2 | -------------------------------------------------------------------------------- /cmake/macos_get_version.cmake: -------------------------------------------------------------------------------- 1 | # Inspired from : https://cmake.org/pipermail/cmake/2007-October/017290.html 2 | function(get_macos_sw_vers_product_version) 3 | find_program(SW_VERS_EXEC sw_vers) 4 | if(NOT SW_VERS_EXEC) 5 | message(FATAL_ERROR "Could not detect sw_vers executable, can not gather required information") 6 | endif() 7 | 8 | execute_process(COMMAND "${SW_VERS_EXEC}" -productVersion OUTPUT_VARIABLE SW_VERS_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE) 9 | 10 | string(REGEX REPLACE [[^([0-9]+(\.[0-9]+)?)\.[0-9]+$]] "\\1" SW_VERS_VERSION_SHORT "${SW_VERS_VERSION}") 11 | string(REGEX REPLACE [[^([0-9]+)(\.[0-9]+)+$]] "\\1" SW_VERS_VERSION_MAJOR "${SW_VERS_VERSION}") 12 | if ("${SW_VERS_VERSION_MAJOR}" STREQUAL "10") 13 | set(SW_VERS_VERSION_SHORT "${SW_VERS_VERSION_SHORT}" PARENT_SCOPE) 14 | else() 15 | set(SW_VERS_VERSION_SHORT "${SW_VERS_VERSION_MAJOR}" PARENT_SCOPE) 16 | endif() 17 | endfunction() 18 | -------------------------------------------------------------------------------- /cmake/macos_get_version_script.cmake: -------------------------------------------------------------------------------- 1 | include(cmake/macos_get_version.cmake) 2 | 3 | function(echo) 4 | execute_process(COMMAND ${CMAKE_COMMAND} -E echo "${ARGN}") 5 | endfunction() 6 | 7 | get_macos_sw_vers_product_version() 8 | echo("${SW_VERS_VERSION_SHORT}") 9 | -------------------------------------------------------------------------------- /cmake/pip_install.cmake.in: -------------------------------------------------------------------------------- 1 | set(MV OFF) 2 | set(PIP_INSTALL_OPTIONS "") 3 | 4 | if("${PIP_INSTALL_PREFIX}" STREQUAL "--user") 5 | set(PIP_INSTALL_OPTIONS "--user") 6 | elseif(NOT "${PIP_INSTALL_PREFIX}" STREQUAL "") 7 | set(PIP_INSTALL_OPTIONS "--prefix=${PIP_INSTALL_PREFIX}") 8 | if(NOT "@USE_EXACT_LIB_SUBPATH@" STREQUAL "") 9 | set(MV ON) 10 | endif() 11 | endif() 12 | 13 | execute_process( 14 | COMMAND @PIP_PYTHON_EXECUTABLE@ -m pip install --upgrade --force-reinstall --no-deps --no-cache-dir --no-index ${PIP_INSTALL_OPTIONS} --find-links=@PYTHON_PACKAGE_DIR@/dist opentera_webrtc.@PYTHON_SUBPACKAGE_NAME@ 15 | WORKING_DIRECTORY @PYTHON_PACKAGE_DIR@ 16 | ) 17 | 18 | if(${MV} STREQUAL "ON") 19 | execute_process( 20 | # The format is the same between --user (where pip should be installed) and --prefix (where the package is installed) 21 | COMMAND bash -c "rsync -a --remove-source-files ${PIP_INSTALL_PREFIX}/lib/@USE_EXACT_LIB_SUBPATH_SOURCE@/ ${PIP_INSTALL_PREFIX}/lib/@USE_EXACT_LIB_SUBPATH@/ 2> /dev/null" 22 | WORKING_DIRECTORY @PYTHON_PACKAGE_DIR@ 23 | ) 24 | execute_process( 25 | COMMAND find ${PIP_INSTALL_PREFIX}/lib -depth -type d -empty -delete 26 | WORKING_DIRECTORY @PYTHON_PACKAGE_DIR@ 27 | ) 28 | endif() 29 | 30 | execute_process( 31 | COMMAND @CMAKE_COMMAND@ -E touch @WORKING_DIR@/install.stamp 32 | WORKING_DIRECTORY @PYTHON_PACKAGE_DIR@ 33 | ) 34 | -------------------------------------------------------------------------------- /doc/.nojekyll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/introlab/opentera-webrtc/458277e9c1d17e9e1e1e6fe15394dee7e1329aa3/doc/.nojekyll -------------------------------------------------------------------------------- /doc/README.md: -------------------------------------------------------------------------------- 1 | # OpenTera WebRTC API Documentation 2 | 3 | API Documentation is available [here](https://introlab.github.io/opentera-webrtc). 4 | -------------------------------------------------------------------------------- /doc/cpp/mainpage.dox: -------------------------------------------------------------------------------- 1 | /** 2 | \mainpage OpenTera WebRTC C++ Library API Documentation 3 | 4 | \tableofcontents 5 | 6 | \section examples Examples 7 | 8 | \subsection data_channel_client_example Data Channel Client Example 9 | \include{lineno} cpp-data-channel-client/main.cpp 10 | 11 | \subsection video_stream_client_example Video Stream Client Example 12 | \include{lineno} cpp-video-stream-client/main.cpp 13 | 14 | */ 15 | -------------------------------------------------------------------------------- /doc/footer.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
10 | 11 | 12 |