├── .circleci
└── config.yml
├── .dockerignore
├── .eslintignore
├── .eslintrc
├── .gitattributes
├── .github
├── ISSUE_TEMPLATE.md
└── PULL_REQUEST_TEMPLATE.md
├── .gitignore
├── .nvmrc
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── Dockerfile
├── LICENSE
├── README.md
├── cert
├── cert.pem
└── key.pem
├── doc
├── client_api.md
├── custom_theme
│ ├── 404.html
│ ├── base.html
│ ├── content.html
│ ├── css
│ │ ├── architecture.css
│ │ ├── base.css
│ │ ├── bootstrap-custom.min.css
│ │ ├── font-awesome-4.5.0.css
│ │ ├── highlight.css
│ │ └── style.css
│ ├── fonts
│ │ ├── FontAwesome.otf
│ │ ├── fontawesome-webfont.eot
│ │ ├── fontawesome-webfont.svg
│ │ ├── fontawesome-webfont.ttf
│ │ ├── fontawesome-webfont.woff
│ │ └── fontawesome-webfont.woff2
│ ├── img
│ │ ├── 01.png
│ │ ├── 02.png
│ │ ├── 3.png
│ │ ├── 4.png
│ │ ├── 5.png
│ │ ├── 6.png
│ │ ├── favicon.ico
│ │ ├── github-logo.png
│ │ ├── grid.png
│ │ └── routing.png
│ ├── js
│ │ ├── base.js
│ │ ├── bootstrap-3.0.3.min.js
│ │ ├── highlight.pack.js
│ │ ├── jquery-1.10.2.min.js
│ │ └── script.js
│ ├── nav-sub.html
│ ├── nav.html
│ └── toc.html
├── docker.md
├── from_source.md
├── index.md
└── server_api.md
├── erizo
├── .gitignore
├── buildProject.sh
├── cleanObjectFiles.sh
├── conanfile.txt
├── generateEclipseProject.sh
├── generateProject.sh
├── runTests.sh
├── src
│ ├── CMakeLists.txt
│ ├── Doxyfile.in
│ ├── cmake
│ │ └── Findglib.cmake
│ ├── erizo
│ │ ├── CMakeLists.txt
│ │ ├── DefaultValues.h
│ │ ├── DtlsTransport.cpp
│ │ ├── DtlsTransport.h
│ │ ├── IceConnection.cpp
│ │ ├── IceConnection.h
│ │ ├── LibNiceConnection.cpp
│ │ ├── LibNiceConnection.h
│ │ ├── MediaDefinitions.h
│ │ ├── MediaStream.cpp
│ │ ├── MediaStream.h
│ │ ├── NicerConnection.cpp
│ │ ├── NicerConnection.h
│ │ ├── OneToManyProcessor.cpp
│ │ ├── OneToManyProcessor.h
│ │ ├── SdpInfo.cpp
│ │ ├── SdpInfo.h
│ │ ├── SrtpChannel.cpp
│ │ ├── SrtpChannel.h
│ │ ├── Stats.cpp
│ │ ├── Stats.h
│ │ ├── StringUtil.cpp
│ │ ├── StringUtil.h
│ │ ├── Transceiver.cpp
│ │ ├── Transceiver.h
│ │ ├── Transport.h
│ │ ├── UnencryptedTransport.cpp
│ │ ├── UnencryptedTransport.h
│ │ ├── WebRtcConnection.cpp
│ │ ├── WebRtcConnection.h
│ │ ├── bandwidth
│ │ │ ├── BandwidthDistributionAlgorithm.h
│ │ │ ├── BwDistributionConfig.cpp
│ │ │ ├── BwDistributionConfig.h
│ │ │ ├── MaxVideoBWDistributor.cpp
│ │ │ ├── MaxVideoBWDistributor.h
│ │ │ ├── StreamPriorityBWDistributor.cpp
│ │ │ ├── StreamPriorityBWDistributor.h
│ │ │ ├── TargetVideoBWDistributor.cpp
│ │ │ └── TargetVideoBWDistributor.h
│ │ ├── dtls
│ │ │ ├── DtlsClient.cpp
│ │ │ ├── DtlsSocket.cpp
│ │ │ ├── DtlsSocket.h
│ │ │ ├── bf_dwrap.c
│ │ │ └── bf_dwrap.h
│ │ ├── handlers
│ │ │ ├── HandlerImporter.cpp
│ │ │ ├── HandlerImporter.h
│ │ │ └── handlers
│ │ │ │ ├── LoggerHandler.cpp
│ │ │ │ └── LoggerHandler.h
│ │ ├── lib
│ │ │ ├── Base64.h
│ │ │ ├── Clock.h
│ │ │ ├── ClockUtils.h
│ │ │ ├── LibNiceInterface.h
│ │ │ ├── LibNiceInterfaceImpl.cpp
│ │ │ ├── NicerInterface.cpp
│ │ │ ├── NicerInterface.h
│ │ │ ├── TokenBucket.cpp
│ │ │ └── TokenBucket.h
│ │ ├── logger.h
│ │ ├── media
│ │ │ ├── Depacketizer.cpp
│ │ │ ├── Depacketizer.h
│ │ │ ├── ExternalInput.cpp
│ │ │ ├── ExternalInput.h
│ │ │ ├── ExternalOutput.cpp
│ │ │ ├── ExternalOutput.h
│ │ │ ├── MediaProcessor.cpp
│ │ │ ├── MediaProcessor.h
│ │ │ ├── OneToManyTranscoder.cpp
│ │ │ ├── OneToManyTranscoder.h
│ │ │ ├── SyntheticInput.cpp
│ │ │ ├── SyntheticInput.h
│ │ │ ├── codecs
│ │ │ │ ├── AudioCodec.cpp
│ │ │ │ ├── AudioCodec.h
│ │ │ │ ├── Codecs.h
│ │ │ │ ├── VideoCodec.cpp
│ │ │ │ └── VideoCodec.h
│ │ │ └── mixers
│ │ │ │ ├── VideoMixer.cpp
│ │ │ │ ├── VideoMixer.h
│ │ │ │ ├── VideoUtils.cpp
│ │ │ │ └── VideoUtils.h
│ │ ├── pipeline
│ │ │ ├── Handler.h
│ │ │ ├── HandlerContext-inl.h
│ │ │ ├── HandlerContext.h
│ │ │ ├── HandlerManager.h
│ │ │ ├── Pipeline-inl.h
│ │ │ ├── Pipeline.cpp
│ │ │ ├── Pipeline.h
│ │ │ ├── Service.h
│ │ │ ├── ServiceContext-inl.h
│ │ │ └── ServiceContext.h
│ │ ├── rtp
│ │ │ ├── BandwidthEstimationHandler.cpp
│ │ │ ├── BandwidthEstimationHandler.h
│ │ │ ├── FakeKeyframeGeneratorHandler.cpp
│ │ │ ├── FakeKeyframeGeneratorHandler.h
│ │ │ ├── FecReceiverHandler.cpp
│ │ │ ├── FecReceiverHandler.h
│ │ │ ├── LayerBitrateCalculationHandler.cpp
│ │ │ ├── LayerBitrateCalculationHandler.h
│ │ │ ├── LayerDetectorHandler.cpp
│ │ │ ├── LayerDetectorHandler.h
│ │ │ ├── PacketBufferService.cpp
│ │ │ ├── PacketBufferService.h
│ │ │ ├── PacketCodecParser.cpp
│ │ │ ├── PacketCodecParser.h
│ │ │ ├── PeriodicPliHandler.cpp
│ │ │ ├── PeriodicPliHandler.h
│ │ │ ├── PliPacerHandler.cpp
│ │ │ ├── PliPacerHandler.h
│ │ │ ├── PliPriorityHandler.cpp
│ │ │ ├── PliPriorityHandler.h
│ │ │ ├── QualityFilterHandler.cpp
│ │ │ ├── QualityFilterHandler.h
│ │ │ ├── QualityManager.cpp
│ │ │ ├── QualityManager.h
│ │ │ ├── RtcpAggregator.cpp
│ │ │ ├── RtcpAggregator.h
│ │ │ ├── RtcpFeedbackGenerationHandler.cpp
│ │ │ ├── RtcpFeedbackGenerationHandler.h
│ │ │ ├── RtcpForwarder.cpp
│ │ │ ├── RtcpForwarder.h
│ │ │ ├── RtcpNackGenerator.cpp
│ │ │ ├── RtcpNackGenerator.h
│ │ │ ├── RtcpProcessor.h
│ │ │ ├── RtcpProcessorHandler.cpp
│ │ │ ├── RtcpProcessorHandler.h
│ │ │ ├── RtcpRrGenerator.cpp
│ │ │ ├── RtcpRrGenerator.h
│ │ │ ├── RtpExtensionProcessor.cpp
│ │ │ ├── RtpExtensionProcessor.h
│ │ │ ├── RtpH264Parser.cpp
│ │ │ ├── RtpH264Parser.h
│ │ │ ├── RtpHeaders.h
│ │ │ ├── RtpPacketQueue.cpp
│ │ │ ├── RtpPacketQueue.h
│ │ │ ├── RtpPaddingGeneratorHandler.cpp
│ │ │ ├── RtpPaddingGeneratorHandler.h
│ │ │ ├── RtpPaddingManagerHandler.cpp
│ │ │ ├── RtpPaddingManagerHandler.h
│ │ │ ├── RtpPaddingRemovalHandler.cpp
│ │ │ ├── RtpPaddingRemovalHandler.h
│ │ │ ├── RtpRetransmissionHandler.cpp
│ │ │ ├── RtpRetransmissionHandler.h
│ │ │ ├── RtpSink.cpp
│ │ │ ├── RtpSink.h
│ │ │ ├── RtpSlideShowHandler.cpp
│ │ │ ├── RtpSlideShowHandler.h
│ │ │ ├── RtpSource.cpp
│ │ │ ├── RtpSource.h
│ │ │ ├── RtpTrackMuteHandler.cpp
│ │ │ ├── RtpTrackMuteHandler.h
│ │ │ ├── RtpUtils.cpp
│ │ │ ├── RtpUtils.h
│ │ │ ├── RtpVP8Fragmenter.cpp
│ │ │ ├── RtpVP8Fragmenter.h
│ │ │ ├── RtpVP8Parser.cpp
│ │ │ ├── RtpVP8Parser.h
│ │ │ ├── RtpVP9Parser.cpp
│ │ │ ├── RtpVP9Parser.h
│ │ │ ├── SRPacketHandler.cpp
│ │ │ ├── SRPacketHandler.h
│ │ │ ├── SenderBandwidthEstimantionHandler.cpp
│ │ │ ├── SenderBandwidthEstimationHandler.h
│ │ │ ├── SequenceNumberTranslator.cpp
│ │ │ ├── SequenceNumberTranslator.h
│ │ │ ├── StatsHandler.cpp
│ │ │ └── StatsHandler.h
│ │ ├── stats
│ │ │ ├── StatNode.cpp
│ │ │ └── StatNode.h
│ │ └── thread
│ │ │ ├── IOThreadPool.cpp
│ │ │ ├── IOThreadPool.h
│ │ │ ├── IOWorker.cpp
│ │ │ ├── IOWorker.h
│ │ │ ├── Scheduler.cpp
│ │ │ ├── Scheduler.h
│ │ │ ├── ThreadPool.cpp
│ │ │ ├── ThreadPool.h
│ │ │ ├── Worker.cpp
│ │ │ └── Worker.h
│ ├── examples
│ │ ├── CMakeLists.txt
│ │ ├── Test.cpp
│ │ ├── Test.h
│ │ ├── hsam.cpp
│ │ └── pc
│ │ │ ├── Observer.cpp
│ │ │ ├── Observer.h
│ │ │ ├── PCSocket.cpp
│ │ │ ├── PCSocket.h
│ │ │ └── SDPReceiver.h
│ ├── test
│ │ ├── CMakeLists.txt
│ │ ├── DtlsSocketTest.cpp
│ │ ├── NicerConnectionTest.cpp
│ │ ├── OneToManyProcessorTest.cpp
│ │ ├── PacketTest.cpp
│ │ ├── WebRtcConnectionTest.cpp
│ │ ├── bandwidth
│ │ │ ├── MaxVideoBWDistributor.cpp
│ │ │ ├── StreamPriorityBWDistributor.cpp
│ │ │ └── TargetVideoBWDistributor.cpp
│ │ ├── lib
│ │ │ └── TokenBucketTest.cpp
│ │ ├── log4cxx.properties
│ │ ├── main.cpp
│ │ ├── media
│ │ │ ├── DepacketizerTest.cpp
│ │ │ └── SyntheticInputTest.cpp
│ │ ├── rtp
│ │ │ ├── BandwidthEstimationHandlerTest.cpp
│ │ │ ├── FakeKeyframeGeneratorHandlerTest.cpp
│ │ │ ├── FecReceiverHandlerTest.cpp
│ │ │ ├── LayerBitrateCalculationHandlerTest.cpp
│ │ │ ├── LayerDetectorHandlerTest.cpp
│ │ │ ├── PeriodicPliHandlerTest.cpp
│ │ │ ├── PliPacerHandlerTest.cpp
│ │ │ ├── PliPriorityHandlerTest.cpp
│ │ │ ├── QualityManagerTest.cpp
│ │ │ ├── RtcpFeedbackGenerationHandlerTest.cpp
│ │ │ ├── RtcpNackGeneratorTest.cpp
│ │ │ ├── RtcpProcessorHandlerTest.cpp
│ │ │ ├── RtcpRrGeneratorTest.cpp
│ │ │ ├── RtpExtensionProcessorTest.cpp
│ │ │ ├── RtpPaddingGeneratorHandlerTest.cpp
│ │ │ ├── RtpPaddingManagerHandlerTest.cpp
│ │ │ ├── RtpRetransmissionHandlerTest.cpp
│ │ │ ├── RtpSlideShowHandlerTest.cpp
│ │ │ ├── RtpTrackMuteHandlerTest.cpp
│ │ │ ├── SRPacketHandlerTest.cpp
│ │ │ ├── SenderBandwidthEstimationTest.cpp
│ │ │ ├── SequenceNumberTranslatorTest.cpp
│ │ │ └── StatsHandlerTest.cpp
│ │ ├── stats
│ │ │ ├── MovingAverageStatTest.cpp
│ │ │ ├── MovingIntervalRateStatTest.cpp
│ │ │ └── StatNodeTest.cpp
│ │ ├── thread
│ │ │ └── SchedulerTest.cpp
│ │ └── utils
│ │ │ ├── Matchers.h
│ │ │ ├── Mocks.h
│ │ │ └── Tools.h
│ └── third_party
│ │ ├── nicer.cmake
│ │ ├── webrtc.cmake
│ │ └── webrtc
│ │ └── src
│ │ ├── CMakeLists.txt
│ │ └── webrtc
│ │ ├── api
│ │ ├── array_view.h
│ │ ├── audio_codecs
│ │ │ ├── audio_format.cc
│ │ │ └── audio_format.h
│ │ ├── function_view.h
│ │ ├── media_types.cc
│ │ ├── media_types.h
│ │ ├── network_state_predictor.h
│ │ ├── priority.h
│ │ ├── ref_counted_base.h
│ │ ├── rtp_headers.cc
│ │ ├── rtp_headers.h
│ │ ├── rtp_parameters.h
│ │ ├── rtp_transceiver_direction.h
│ │ ├── scoped_refptr.h
│ │ ├── sequence_checker.h
│ │ ├── task_queue
│ │ │ ├── default_task_queue_factory.h
│ │ │ ├── default_task_queue_factory_stdlib.cc
│ │ │ ├── queued_task.h
│ │ │ ├── task_queue_base.cc
│ │ │ ├── task_queue_base.h
│ │ │ └── task_queue_factory.h
│ │ ├── transport
│ │ │ ├── OWNERS
│ │ │ ├── bitrate_settings.cc
│ │ │ ├── bitrate_settings.h
│ │ │ ├── data_channel_transport_interface.h
│ │ │ ├── enums.h
│ │ │ ├── field_trial_based_config.cc
│ │ │ ├── field_trial_based_config.h
│ │ │ ├── network_control.h
│ │ │ ├── network_types.cc
│ │ │ ├── network_types.h
│ │ │ ├── rtp
│ │ │ │ ├── dependency_descriptor.cc
│ │ │ │ ├── dependency_descriptor.h
│ │ │ │ └── rtp_source.h
│ │ │ ├── video
│ │ │ │ └── render_resolution.h
│ │ │ └── webrtc_key_value_config.h
│ │ ├── units
│ │ │ ├── OWNERS
│ │ │ ├── data_rate.cc
│ │ │ ├── data_rate.h
│ │ │ ├── data_size.cc
│ │ │ ├── data_size.h
│ │ │ ├── frequency.cc
│ │ │ ├── frequency.h
│ │ │ ├── time_delta.cc
│ │ │ ├── time_delta.h
│ │ │ ├── timestamp.cc
│ │ │ └── timestamp.h
│ │ └── video
│ │ │ ├── color_space.cc
│ │ │ ├── color_space.h
│ │ │ ├── hdr_metadata.cc
│ │ │ ├── hdr_metadata.h
│ │ │ ├── render_resolution.h
│ │ │ ├── video_content_type.cc
│ │ │ ├── video_content_type.h
│ │ │ ├── video_layers_allocation.h
│ │ │ ├── video_rotation.h
│ │ │ ├── video_timing.cc
│ │ │ └── video_timing.h
│ │ ├── modules
│ │ ├── congestion_controller
│ │ │ ├── OWNERS
│ │ │ ├── goog_cc
│ │ │ │ ├── acknowledged_bitrate_estimator.cc
│ │ │ │ ├── acknowledged_bitrate_estimator.h
│ │ │ │ ├── acknowledged_bitrate_estimator_interface.cc
│ │ │ │ ├── acknowledged_bitrate_estimator_interface.h
│ │ │ │ ├── alr_detector.cc
│ │ │ │ ├── alr_detector.h
│ │ │ │ ├── bitrate_estimator.cc
│ │ │ │ ├── bitrate_estimator.h
│ │ │ │ ├── delay_based_bwe.cc
│ │ │ │ ├── delay_based_bwe.h
│ │ │ │ ├── delay_increase_detector_interface.h
│ │ │ │ ├── inter_arrival_delta.cc
│ │ │ │ ├── inter_arrival_delta.h
│ │ │ │ ├── link_capacity_estimator.cc
│ │ │ │ ├── link_capacity_estimator.h
│ │ │ │ ├── loss_based_bandwidth_estimation.cc
│ │ │ │ ├── loss_based_bandwidth_estimation.h
│ │ │ │ ├── loss_based_bwe_v2.cc
│ │ │ │ ├── loss_based_bwe_v2.h
│ │ │ │ ├── probe_bitrate_estimator.cc
│ │ │ │ ├── probe_bitrate_estimator.h
│ │ │ │ ├── probe_controller.cc
│ │ │ │ ├── probe_controller.h
│ │ │ │ ├── robust_throughput_estimator.cc
│ │ │ │ ├── robust_throughput_estimator.h
│ │ │ │ ├── send_side_bandwidth_estimation.cc
│ │ │ │ ├── send_side_bandwidth_estimation.h
│ │ │ │ ├── trendline_estimator.cc
│ │ │ │ └── trendline_estimator.h
│ │ │ └── rtp
│ │ │ │ ├── transport_feedback_adapter.cc
│ │ │ │ └── transport_feedback_adapter.h
│ │ ├── include
│ │ │ ├── module.h
│ │ │ ├── module_common_types.h
│ │ │ ├── module_common_types_public.h
│ │ │ └── module_fec_types.h
│ │ ├── pacing
│ │ │ ├── OWNERS
│ │ │ ├── interval_budget.cc
│ │ │ └── interval_budget.h
│ │ ├── remote_bitrate_estimator
│ │ │ ├── OWNERS
│ │ │ ├── aimd_rate_control.cc
│ │ │ ├── aimd_rate_control.h
│ │ │ ├── bwe_defines.cc
│ │ │ ├── include
│ │ │ │ ├── bwe_defines.h
│ │ │ │ └── remote_bitrate_estimator.h
│ │ │ ├── inter_arrival.cc
│ │ │ ├── inter_arrival.h
│ │ │ ├── overuse_detector.cc
│ │ │ ├── overuse_detector.h
│ │ │ ├── overuse_estimator.cc
│ │ │ ├── overuse_estimator.h
│ │ │ ├── packet_arrival_map.cc
│ │ │ ├── packet_arrival_map.h
│ │ │ ├── remote_bitrate_estimator_abs_send_time.cc
│ │ │ ├── remote_bitrate_estimator_abs_send_time.h
│ │ │ ├── remote_bitrate_estimator_single_stream.cc
│ │ │ ├── remote_bitrate_estimator_single_stream.h
│ │ │ ├── remote_estimator_proxy.cc
│ │ │ └── remote_estimator_proxy.h
│ │ ├── rtp_rtcp
│ │ │ ├── include
│ │ │ │ ├── receive_statistics.h
│ │ │ │ ├── rtp_cvo.h
│ │ │ │ ├── rtp_header_extension_map.h
│ │ │ │ ├── rtp_rtcp_defines.cc
│ │ │ │ ├── rtp_rtcp_defines.h
│ │ │ │ └── ulpfec_receiver.h
│ │ │ └── source
│ │ │ │ ├── byte_io.h
│ │ │ │ ├── fec_private_tables_bursty.cc
│ │ │ │ ├── fec_private_tables_bursty.h
│ │ │ │ ├── fec_private_tables_random.cc
│ │ │ │ ├── fec_private_tables_random.h
│ │ │ │ ├── flexfec_header_reader_writer.cc
│ │ │ │ ├── flexfec_header_reader_writer.h
│ │ │ │ ├── forward_error_correction.cc
│ │ │ │ ├── forward_error_correction.h
│ │ │ │ ├── forward_error_correction_internal.cc
│ │ │ │ ├── forward_error_correction_internal.h
│ │ │ │ ├── rtcp_packet.cc
│ │ │ │ ├── rtcp_packet.h
│ │ │ │ ├── rtcp_packet
│ │ │ │ ├── app.cc
│ │ │ │ ├── app.h
│ │ │ │ ├── common_header.cc
│ │ │ │ ├── common_header.h
│ │ │ │ ├── remote_estimate.cc
│ │ │ │ ├── remote_estimate.h
│ │ │ │ ├── rtpfb.cc
│ │ │ │ ├── rtpfb.h
│ │ │ │ ├── transport_feedback.cc
│ │ │ │ └── transport_feedback.h
│ │ │ │ ├── rtp_dependency_descriptor_extension.cc
│ │ │ │ ├── rtp_dependency_descriptor_extension.h
│ │ │ │ ├── rtp_dependency_descriptor_reader.cc
│ │ │ │ ├── rtp_dependency_descriptor_reader.h
│ │ │ │ ├── rtp_dependency_descriptor_writer.cc
│ │ │ │ ├── rtp_dependency_descriptor_writer.h
│ │ │ │ ├── rtp_generic_frame_descriptor.cc
│ │ │ │ ├── rtp_generic_frame_descriptor.h
│ │ │ │ ├── rtp_generic_frame_descriptor_extension.cc
│ │ │ │ ├── rtp_generic_frame_descriptor_extension.h
│ │ │ │ ├── rtp_header_extension_map.cc
│ │ │ │ ├── rtp_header_extensions.cc
│ │ │ │ ├── rtp_header_extensions.h
│ │ │ │ ├── rtp_packet.cc
│ │ │ │ ├── rtp_packet.h
│ │ │ │ ├── rtp_packet_received.cc
│ │ │ │ ├── rtp_packet_received.h
│ │ │ │ ├── rtp_video_layers_allocation_extension.cc
│ │ │ │ ├── rtp_video_layers_allocation_extension.h
│ │ │ │ ├── ulpfec_header_reader_writer.cc
│ │ │ │ ├── ulpfec_header_reader_writer.h
│ │ │ │ ├── ulpfec_receiver_impl.cc
│ │ │ │ └── ulpfec_receiver_impl.h
│ │ └── video_coding
│ │ │ └── codecs
│ │ │ ├── interface
│ │ │ └── common_constants.h
│ │ │ └── vp9
│ │ │ └── include
│ │ │ └── vp9_globals.h
│ │ ├── rtc_base
│ │ ├── OWNERS
│ │ ├── arraysize.h
│ │ ├── atomic_ops.h
│ │ ├── bit_buffer.cc
│ │ ├── bit_buffer.h
│ │ ├── bitstream_reader.cc
│ │ ├── bitstream_reader.h
│ │ ├── buffer.h
│ │ ├── byte_buffer.cc
│ │ ├── byte_buffer.h
│ │ ├── byte_order.h
│ │ ├── checks.cc
│ │ ├── checks.h
│ │ ├── constructor_magic.h
│ │ ├── copy_on_write_buffer.cc
│ │ ├── copy_on_write_buffer.h
│ │ ├── event.cc
│ │ ├── event.h
│ │ ├── event_tracer.cc
│ │ ├── event_tracer.h
│ │ ├── experiments
│ │ │ ├── OWNERS
│ │ │ ├── alr_experiment.cc
│ │ │ ├── alr_experiment.h
│ │ │ ├── field_trial_list.cc
│ │ │ ├── field_trial_list.h
│ │ │ ├── field_trial_parser.cc
│ │ │ ├── field_trial_parser.h
│ │ │ ├── field_trial_units.cc
│ │ │ ├── field_trial_units.h
│ │ │ ├── struct_parameters_parser.cc
│ │ │ └── struct_parameters_parser.h
│ │ ├── location.h
│ │ ├── logging.cc
│ │ ├── logging.h
│ │ ├── network
│ │ │ ├── sent_packet.cc
│ │ │ └── sent_packet.h
│ │ ├── network_constants.cc
│ │ ├── network_constants.h
│ │ ├── network_route.cc
│ │ ├── network_route.h
│ │ ├── numerics
│ │ │ ├── divide_round.h
│ │ │ ├── histogram_percentile_counter.cc
│ │ │ ├── histogram_percentile_counter.h
│ │ │ ├── math_utils.h
│ │ │ ├── mod_ops.h
│ │ │ ├── moving_median_filter.h
│ │ │ ├── percentile_filter.h
│ │ │ ├── running_statistics.h
│ │ │ ├── safe_compare.h
│ │ │ ├── safe_conversions.h
│ │ │ ├── safe_conversions_impl.h
│ │ │ ├── safe_minmax.h
│ │ │ └── sequence_number_util.h
│ │ ├── platform_thread.cc
│ │ ├── platform_thread.h
│ │ ├── platform_thread_types.cc
│ │ ├── platform_thread_types.h
│ │ ├── race_checker.cc
│ │ ├── race_checker.h
│ │ ├── random.cc
│ │ ├── random.h
│ │ ├── rate_statistics.cc
│ │ ├── rate_statistics.h
│ │ ├── ref_count.h
│ │ ├── ref_counted_object.h
│ │ ├── ref_counter.h
│ │ ├── string_encode.cc
│ │ ├── string_encode.h
│ │ ├── string_to_number.cc
│ │ ├── string_to_number.h
│ │ ├── string_utils.cc
│ │ ├── string_utils.h
│ │ ├── strings
│ │ │ ├── string_builder.cc
│ │ │ └── string_builder.h
│ │ ├── synchronization
│ │ │ ├── mutex.cc
│ │ │ ├── mutex.h
│ │ │ ├── mutex_abseil.h
│ │ │ ├── mutex_critical_section.h
│ │ │ ├── mutex_pthread.h
│ │ │ ├── sequence_checker_internal.cc
│ │ │ ├── sequence_checker_internal.h
│ │ │ ├── yield.cc
│ │ │ ├── yield.h
│ │ │ ├── yield_policy.cc
│ │ │ └── yield_policy.h
│ │ ├── system
│ │ │ ├── arch.h
│ │ │ ├── asm_defines.h
│ │ │ ├── assume.h
│ │ │ ├── file_wrapper.cc
│ │ │ ├── file_wrapper.h
│ │ │ ├── gcd_helpers.h
│ │ │ ├── gcd_helpers.m
│ │ │ ├── ignore_warnings.h
│ │ │ ├── inline.h
│ │ │ ├── no_unique_address.h
│ │ │ ├── rtc_export.h
│ │ │ ├── rtc_export_template.h
│ │ │ ├── unused.h
│ │ │ └── warn_current_thread_is_deadlocked.h
│ │ ├── system_time.cc
│ │ ├── system_time.h
│ │ ├── task_queue.cc
│ │ ├── task_queue.h
│ │ ├── task_queue_for_test.cc
│ │ ├── task_queue_for_test.h
│ │ ├── task_queue_stdlib.cc
│ │ ├── task_queue_stdlib.h
│ │ ├── task_utils
│ │ │ ├── pending_task_safety_flag.cc
│ │ │ ├── pending_task_safety_flag.h
│ │ │ ├── repeating_task.cc
│ │ │ ├── repeating_task.h
│ │ │ └── to_queued_task.h
│ │ ├── third_party
│ │ │ ├── base64
│ │ │ │ ├── LICENSE
│ │ │ │ ├── README.chromium
│ │ │ │ ├── base64.cc
│ │ │ │ └── base64.h
│ │ │ └── sigslot
│ │ │ │ ├── LICENSE
│ │ │ │ ├── README.chromium
│ │ │ │ ├── sigslot.cc
│ │ │ │ └── sigslot.h
│ │ ├── thread_annotations.h
│ │ ├── time_utils.cc
│ │ ├── time_utils.h
│ │ ├── trace_event.h
│ │ ├── type_traits.h
│ │ ├── units
│ │ │ ├── OWNERS
│ │ │ └── unit_base.h
│ │ ├── zero_memory.cc
│ │ └── zero_memory.h
│ │ ├── system_wrappers
│ │ ├── OWNERS
│ │ ├── include
│ │ │ ├── clock.h
│ │ │ ├── field_trial.h
│ │ │ ├── metrics.h
│ │ │ └── ntp_time.h
│ │ └── source
│ │ │ ├── clock.cc
│ │ │ ├── field_trial.cc
│ │ │ └── metrics.cc
│ │ └── test
│ │ ├── explicit_key_value_config.cc
│ │ └── explicit_key_value_config.h
└── utils
│ └── conan-include-paths
│ └── conanfile.py
├── erizoAPI
├── .gitignore
├── AsyncPromiseWorker.cc
├── AsyncPromiseWorker.h
├── ConnectionDescription.cc
├── ConnectionDescription.h
├── ExternalInput.cc
├── ExternalInput.h
├── ExternalOutput.cc
├── ExternalOutput.h
├── IOThreadPool.cc
├── IOThreadPool.h
├── MediaDefinitions.h
├── MediaStream.cc
├── MediaStream.h
├── OneToManyProcessor.cc
├── OneToManyProcessor.h
├── OneToManyTranscoder.cc
├── OneToManyTranscoder.h
├── PromiseDurationDistribution.cc
├── PromiseDurationDistribution.h
├── SyntheticInput.cc
├── SyntheticInput.h
├── ThreadPool.cc
├── ThreadPool.h
├── WebRtcConnection.cc
├── WebRtcConnection.h
├── addon.cc
├── binding.gyp
├── build.sh
├── lib
│ └── json.hpp
├── lint.sh
├── package-lock.json
├── package.json
└── wscript
├── erizo_controller
├── .gitignore
├── ROV
│ ├── inspector.js
│ ├── rovClient.js
│ ├── rovMetricsGatherer.js
│ └── rovMetricsServer.js
├── common
│ ├── PerformanceStats.js
│ ├── ROV
│ │ ├── rovReplManager.js
│ │ └── rpcDuplexStream.js
│ ├── ReliableSocket.js
│ ├── amqper.js
│ ├── logger.js
│ └── semanticSdp
│ │ ├── CandidateInfo.js
│ │ ├── CodecInfo.js
│ │ ├── DTLSInfo.js
│ │ ├── Direction.js
│ │ ├── DirectionWay.js
│ │ ├── Enum.js
│ │ ├── ICEInfo.js
│ │ ├── MediaInfo.js
│ │ ├── RIDInfo.js
│ │ ├── SDPInfo.js
│ │ ├── SemanticSdp.js
│ │ ├── Setup.js
│ │ ├── SimulcastInfo.js
│ │ ├── SimulcastStreamInfo.js
│ │ ├── SourceGroupInfo.js
│ │ ├── SourceInfo.js
│ │ ├── StreamInfo.js
│ │ ├── TrackEncodingInfo.js
│ │ └── TrackInfo.js
├── erizoAgent
│ ├── erizoAgent.js
│ ├── erizoAgentReporter.js
│ ├── erizoList.js
│ ├── launch.sh
│ └── log4cxx.properties
├── erizoClient
│ ├── dist
│ │ └── assets
│ │ │ ├── loader.gif
│ │ │ ├── logo.svg
│ │ │ ├── mute48.png
│ │ │ ├── sound48.png
│ │ │ └── star.svg
│ ├── extras
│ │ ├── chrome-extension
│ │ │ ├── lynckia_icon_128.png
│ │ │ ├── lynckia_icon_16.png
│ │ │ ├── lynckia_icon_48.png
│ │ │ ├── manifest.json
│ │ │ └── script.js
│ │ └── firefox-extension
│ │ │ ├── README.txt
│ │ │ ├── bootstrap.js
│ │ │ ├── createExtension.sh
│ │ │ ├── icon.png
│ │ │ └── install.rdf
│ ├── gulp
│ │ ├── erizoFcTasks.js
│ │ └── erizoTasks.js
│ ├── gulpfile.js
│ ├── lib
│ │ ├── adapter.js
│ │ └── state-machine.js
│ ├── src
│ │ ├── Erizo.js
│ │ ├── ErizoConnectionManager.js
│ │ ├── ErizoFc.js
│ │ ├── Events.js
│ │ ├── Room.js
│ │ ├── Socket.js
│ │ ├── Stream.js
│ │ ├── utils
│ │ │ ├── Base64.js
│ │ │ ├── ConnectionHelpers.js
│ │ │ ├── ErizoMap.js
│ │ │ ├── FunctionQueue.js
│ │ │ ├── Logger.js
│ │ │ ├── Random.js
│ │ │ └── SdpHelpers.js
│ │ ├── views
│ │ │ ├── AudioPlayer.js
│ │ │ ├── Bar.js
│ │ │ ├── Speaker.js
│ │ │ ├── VideoPlayer.js
│ │ │ └── View.js
│ │ └── webrtc-stacks
│ │ │ ├── BaseStack.js
│ │ │ ├── ChromeStableStack.js
│ │ │ ├── FcStack.js
│ │ │ ├── FirefoxStack.js
│ │ │ ├── PeerConnectionFsm.js
│ │ │ └── SafariStack.js
│ ├── webpack.config.erizo.js
│ └── webpack.config.erizofc.js
├── erizoController
│ ├── StreamManager.js
│ ├── ch_policies
│ │ └── default_policy.js
│ ├── ecCloudHandler.js
│ ├── erizoController.js
│ ├── models
│ │ ├── Channel.js
│ │ ├── Client.js
│ │ ├── ErizoList.js
│ │ ├── Room.js
│ │ └── Stream.js
│ ├── nuveProxy.js
│ ├── permission.js
│ ├── roomController.js
│ ├── rpc
│ │ └── rpcPublic.js
│ └── tokenAuthenticator.js
├── erizoJS
│ ├── adapt_schemes
│ │ ├── notify-break-recover.js
│ │ ├── notify-break.js
│ │ ├── notify-slideshow.js
│ │ ├── notify-stop-feedback.js
│ │ ├── notify.js
│ │ └── schemeHelpers.js
│ ├── erizoJS.js
│ ├── erizoJSController.js
│ └── models
│ │ ├── Client.js
│ │ ├── Helpers.js
│ │ ├── Node.js
│ │ ├── Publisher.js
│ │ ├── PublisherManager.js
│ │ ├── RTCPeerConnection.js
│ │ ├── SessionDescription.js
│ │ ├── Subscriber.js
│ │ └── WebRtcConnection.js
├── initErizo_agent.sh
├── initErizo_controller.sh
├── installErizoTest.sh
├── installErizo_controller.sh
├── log4js_configuration.json
├── package-lock.json
├── package.json
└── test
│ ├── erizoAgent
│ ├── erizoAgent.js
│ └── erizoList.js
│ ├── erizoClient
│ ├── Room.js
│ └── Stream.js
│ ├── erizoController
│ ├── Client.js
│ ├── ecCloudHandler.js
│ ├── erizoController.js
│ ├── roomController.js
│ └── tokenAuthenticator.js
│ ├── erizoJS
│ ├── FullRtcPeerConnection.js
│ ├── RtcPeerConnection.js
│ └── erizoJSController.js
│ ├── sdps.js
│ └── utils.js
├── extras
├── basic_example
│ ├── basicServer.js
│ ├── log4js_configuration.json
│ ├── package-lock.json
│ ├── package.json
│ └── public
│ │ ├── connection_test.html
│ │ ├── connection_test.js
│ │ ├── index.html
│ │ ├── lib
│ │ └── highcharts.js
│ │ ├── quality_layers.html
│ │ ├── quality_layers.js
│ │ └── script.js
├── docker
│ └── initDockerLicode.sh
└── vagrant
│ ├── Vagrantfile
│ └── bootstrap.sh
├── feature-review
└── single-peer-connection.md
├── mkdocs.yml
├── nuve
├── .gitignore
├── initNuve.sh
├── installNuve.sh
├── log4js_configuration.json
├── nuveAPI
│ ├── .DS_Store
│ ├── auth
│ │ ├── mauthParser.js
│ │ └── nuveAuthenticator.js
│ ├── ch_policies
│ │ └── default_policy.js
│ ├── cloudHandler.js
│ ├── logger.js
│ ├── mdb
│ │ ├── dataBase.js
│ │ ├── erizoControllerRegistry.js
│ │ ├── roomRegistry.js
│ │ ├── serviceRegistry.js
│ │ └── tokenRegistry.js
│ ├── nuve.js
│ ├── resource
│ │ ├── roomResource.js
│ │ ├── roomsResource.js
│ │ ├── serviceResource.js
│ │ ├── servicesResource.js
│ │ ├── tokensResource.js
│ │ ├── userResource.js
│ │ └── usersResource.js
│ ├── rpc
│ │ ├── rpc.js
│ │ └── rpcPublic.js
│ ├── test
│ │ ├── auth
│ │ │ ├── mauthParser.js
│ │ │ └── nuveAuthenticator.js
│ │ ├── ch_policies
│ │ │ └── default_policy.js
│ │ ├── cloudHandler.js
│ │ ├── mdb
│ │ │ ├── dataBase.js
│ │ │ ├── erizoControllerRegistry.js
│ │ │ ├── roomRegistry.js
│ │ │ ├── serviceRegistry.js
│ │ │ └── tokenRegistry.js
│ │ ├── resource
│ │ │ ├── roomResource.js
│ │ │ ├── roomsResource.js
│ │ │ ├── serviceResource.js
│ │ │ ├── servicesResource.js
│ │ │ ├── tokensResource.js
│ │ │ ├── userResource.js
│ │ │ └── usersResource.js
│ │ ├── rpc
│ │ │ ├── rpc.js
│ │ │ └── rpcPublic.js
│ │ └── utils.js
│ └── views
│ │ └── test.ejs
├── nuveClient
│ ├── lib
│ │ └── xmlhttprequest.js
│ ├── src
│ │ ├── N.API.js
│ │ └── N.js
│ └── tools
│ │ ├── compile.sh
│ │ └── compileDist.sh
├── nuveClient_python
│ └── nuve.py
├── nuveClient_ruby
│ └── nuve.rb
├── package-lock.json
└── package.json
├── package-lock.json
├── package.json
├── scripts
├── bw_distributor_config_default.js
├── checkNvm.sh
├── initBasicExample.sh
├── initLicode.sh
├── installBasicExample.sh
├── installErizo.sh
├── installMacDeps.sh
├── installNuve.sh
├── installUbuntuDeps.sh
├── libnice-014.patch0
├── licode_default.js
└── rtp_media_config_default.js
├── spine
├── Events.js
├── NativeConnectionHelpers.js
├── NativeConnectionManager.js
├── NativeStream.js
├── Spine.js
├── installSpine.sh
├── log4cxx.properties
├── log4js_configuration.json
├── logger.js
├── nativeClient.js
├── package-lock.json
├── package.json
├── runSpineClients.js
├── simpleNativeConnection.js
└── spineClientsConfig.json
├── test
├── .eslintrc.json
├── karma.conf.js
├── licode_default.js
├── log4cxx.properties
├── log4js_configuration.json
├── negotiation
│ ├── index.js
│ ├── log4cxx.properties
│ ├── log4js_configuration.json
│ └── utils
│ │ ├── BrowserInstaller.js
│ │ ├── ClientConnection.js
│ │ ├── ClientStream.js
│ │ ├── ErizoConnection.js
│ │ ├── NegotiationTest.js
│ │ └── SdpUtils.js
├── nuve-api-spec.js
├── package-lock.json
├── package.json
├── perf-tests.js
├── rtp_media_config_default.js
├── runSpineTest.sh
├── spine-tests.js
└── utils
│ └── remote-spine.js
└── utils
└── release.sh
/.dockerignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | .project
3 | .cproject
4 | .git
5 | .circleci
6 | licode_config.js
7 | rtp_media_config.js
8 | utils/release.sh
9 | build/
10 | node_modules/
11 | erizo/build
12 | erizoAPI/build
13 | erizoAPI/.lock-wscript
14 | erizo_controller/erizoClient/dist/erizofc.js
15 | erizo_controller/erizoClient/build/erizofc.js
16 | erizo_controller/erizoClient/dist/erizo.js
17 | erizo_controller/erizoController/node_modules/
18 | erizo_controller/test/public/erizo.js
19 | erizo_controller/erizoAgent/out.log
20 | erizo_controller/erizoAgent/erizo-*.log
21 | extras/basic_example/node_modules
22 | extras/basic_example/public/assets/
23 | extras/basic_example/public/erizo.js
24 | extras/basic_example/nuve.js
25 | extras/vagrant/.vagrant
26 | extras/vagrant/licode/
27 | nuve/.DS_Store
28 | nuve/nuveClient/build
29 | nuve/nuveClient/dist
30 | nuve/nuveClient/dist
31 | nuve/cloudHandler/node_modules/
32 | nuve/nuveAPI/node_modules/
33 | libdeps/
34 | scripts/libdeps/
35 | spine/erizofc.js
36 | site
37 |
--------------------------------------------------------------------------------
/.eslintignore:
--------------------------------------------------------------------------------
1 | nuve/nuveClient/build/**/*.js
2 | nuve/nuveClient/dist/**/*.js
3 | erizo_controller/erizoClient/**/*.js
4 | spine/**/*.js
5 | extras/basic_example/public/erizo.js
6 | extras/basic_example/nuve.js
7 | extras/basic_example/public/lib/
8 |
--------------------------------------------------------------------------------
/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "airbnb",
3 | "rules": {
4 | "no-cond-assign": ["error", "except-parens"],
5 | "no-underscore-dangle": "off",
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | # Auto detect text files and perform LF normalization
2 | * text=auto
3 |
4 | # Custom for Visual Studio
5 | *.cs diff=csharp
6 | *.sln merge=union
7 | *.csproj merge=union
8 | *.vbproj merge=union
9 | *.fsproj merge=union
10 | *.dbproj merge=union
11 |
12 | # Standard to msysgit
13 | *.doc diff=astextplain
14 | *.DOC diff=astextplain
15 | *.docx diff=astextplain
16 | *.DOCX diff=astextplain
17 | *.dot diff=astextplain
18 | *.DOT diff=astextplain
19 | *.pdf diff=astextplain
20 | *.PDF diff=astextplain
21 | *.rtf diff=astextplain
22 | *.RTF diff=astextplain
23 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE.md:
--------------------------------------------------------------------------------
1 |
11 |
12 | **Description**
13 |
14 |
17 |
18 | **Steps to reproduce the issue:**
19 | 1.
20 | 2.
21 | 3.
22 |
23 | **Describe the results you received:**
24 |
25 |
26 | **Describe the results you expected:**
27 |
28 |
29 | **Additional information you deem important (e.g. issue happens only occasionally):**
30 |
31 |
32 | **Licode commit/release where the issue is happening**
33 |
34 |
35 | **Additional environment details (Local, AWS, Docker, etc.):**
36 |
--------------------------------------------------------------------------------
/.github/PULL_REQUEST_TEMPLATE.md:
--------------------------------------------------------------------------------
1 |
5 |
6 | **Description**
7 |
8 |
12 |
13 | [] It needs and includes Unit Tests
14 |
15 | **Changes in Client or Server public APIs**
16 |
17 |
21 |
22 | [] It includes documentation for these changes in `/doc`.
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | build/
2 | licode_config.js
3 | bw_distributor_config.js
4 | extras/basic_example/node_modules
5 | extras/basic_example/public/erizo.js
6 | extras/basic_example/public/erizo.js.map
7 | extras/basic_example/nuve.js
8 | node_modules/
9 | site
10 | .DS_Store
11 | scripts/libdeps/
12 | libdeps/
13 | extras/vagrant/.vagrant
14 | extras/vagrant/licode/
15 | erizo_controller/erizoAgent/out.log
16 | erizo_controller/erizoAgent/erizo-*.log
17 | .project
18 | .cproject
19 | .idea
20 | spine/erizofc.js
21 | spine/testResult.json
22 | extras/basic_example/public/assets/
23 | rtp_media_config.js
24 | bw_distribution_config.js
25 | erizo/FindIncludePathsGenerator.cmake
26 | erizo/Findboost.cmake
27 | erizo/Findbzip2.cmake
28 | erizo/Findzlib.cmake
29 | erizo/conan.lock
30 | erizo/conan_paths.cmake
31 | erizo/conanbuildinfo.args
32 | erizo/conanbuildinfo.cmake
33 | erizo/conanbuildinfo.txt
34 | erizo/conaninfo.txt
35 | erizo/graph_info.json
36 |
37 |
--------------------------------------------------------------------------------
/.nvmrc:
--------------------------------------------------------------------------------
1 | v20.18.1
2 |
--------------------------------------------------------------------------------
/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | # Contributing to Licode
2 |
3 | Thank you for considering contributing to Licode!
4 | We keep an up-to-date guide in the [Licode web](http://lynckia.com/licode/contribute.html).
5 |
--------------------------------------------------------------------------------
/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM ubuntu:20.04
2 |
3 | LABEL maintainer="Lynckia"
4 |
5 | WORKDIR /opt
6 |
7 | #Configure tzdata
8 | ENV TZ=Europe/Madrid
9 | RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
10 |
11 | # Download latest version of the code and install dependencies
12 | RUN apt-get update && apt-get install -y git wget curl
13 |
14 | COPY .nvmrc package.json /opt/licode/
15 |
16 | COPY scripts/installUbuntuDeps.sh scripts/checkNvm.sh scripts/libnice-014.patch0 /opt/licode/scripts/
17 |
18 | WORKDIR /opt/licode/scripts
19 |
20 | RUN ./installUbuntuDeps.sh --cleanup --fast
21 |
22 | WORKDIR /opt
23 |
24 | COPY . /opt/licode
25 |
26 | RUN mkdir /opt/licode/.git
27 |
28 | # Clone and install licode
29 | WORKDIR /opt/licode/scripts
30 |
31 | RUN ./installErizo.sh -dfEAcs && \
32 | ./../nuve/installNuve.sh && \
33 | ./installBasicExample.sh
34 |
35 | RUN ldconfig /opt/licode/build/libdeps/build/lib
36 |
37 | WORKDIR /opt/licode
38 |
39 | ARG COMMIT
40 |
41 | RUN echo $COMMIT > RELEASE
42 | RUN date --rfc-3339='seconds' >> RELEASE
43 | RUN cat RELEASE
44 |
45 | WORKDIR /opt
46 |
47 | ENTRYPOINT ["./licode/extras/docker/initDockerLicode.sh"]
48 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2012 Universidad Politécnica de Madrid
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/cert/cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICnjCCAgegAwIBAgIJAOYd7/RgO22iMA0GCSqGSIb3DQEBBQUAMD8xCzAJBgNV
3 | BAYTAlNQMQowCAYDVQQIEwFNMQ4wDAYDVQQHEwVTcGFpbjEUMBIGA1UEAxMLbHlu
4 | Y2tpYS5jb20wHhcNMTIxMjA1MTAzODM1WhcNMTMxMjA1MTAzODM1WjA/MQswCQYD
5 | VQQGEwJTUDEKMAgGA1UECBMBTTEOMAwGA1UEBxMFU3BhaW4xFDASBgNVBAMTC2x5
6 | bmNraWEuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDWu9cfQydDBahN
7 | Hy8Xk0YLWaMmLqfjF7vvu2JzqLQY76lMIhkw7Mmdljbbdh0Mxi6RtfMhcZslpZNi
8 | 96Zb1CX543dccBzjWcCT5FWKWHRmUMbuTQHo0M4mavwQtK+HTYPpFhpc8AJDJPdr
9 | caTD1jLt1+T3548M193pKn5O86zGpQIDAQABo4GhMIGeMB0GA1UdDgQWBBSHD+cK
10 | foY1RCNJ+uR0w//K8cTjGzBvBgNVHSMEaDBmgBSHD+cKfoY1RCNJ+uR0w//K8cTj
11 | G6FDpEEwPzELMAkGA1UEBhMCU1AxCjAIBgNVBAgTAU0xDjAMBgNVBAcTBVNwYWlu
12 | MRQwEgYDVQQDEwtseW5ja2lhLmNvbYIJAOYd7/RgO22iMAwGA1UdEwQFMAMBAf8w
13 | DQYJKoZIhvcNAQEFBQADgYEAVpQ7AB/9LdDT+1qivXZdhPtYEMENkyHRkjnaJPLK
14 | H/13RdkdKJlLgD8bGUO43Z8efl8y7K0aH2cXDHQ1jR4kIgSCgNQDY+wC/RNsZPu/
15 | DvNQBlR57zuFqCgj4FFW+RbyHCUB5AzDkEMNIWjo46vMdPUq+3s8G1ETF5ruXEYB
16 | rhU=
17 | -----END CERTIFICATE-----
18 |
--------------------------------------------------------------------------------
/cert/key.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN RSA PRIVATE KEY-----
2 | MIICXAIBAAKBgQDWu9cfQydDBahNHy8Xk0YLWaMmLqfjF7vvu2JzqLQY76lMIhkw
3 | 7Mmdljbbdh0Mxi6RtfMhcZslpZNi96Zb1CX543dccBzjWcCT5FWKWHRmUMbuTQHo
4 | 0M4mavwQtK+HTYPpFhpc8AJDJPdrcaTD1jLt1+T3548M193pKn5O86zGpQIDAQAB
5 | AoGAF6CFdAgkishVk17KBLMMsvUC8ZGSoXccE62vkIBQiKneG+VoliyHppI/qPgf
6 | DCfGOfwmK1jftE26oNoU8Oev4dJc5Yht09ceB+MqtkdA3VmdwJilfj6AuzVZ6TE6
7 | vbGqCKIQQvJKjsgnMX8yU+5vXkTDDm6UQiho9UFdEHtgQiECQQDvfifh9hORS+W3
8 | s90NQRsPBp+9EcbE4aELi4XoWjMXFUJypX8FukqSgatZ0SeKmYGm/LGhcYgw0hEY
9 | Dbzs5wGdAkEA5YjP05RS2xk6kzWGLCrJqPMsN+Q+cqFNz3EpctY8qS6hqjSb7yB9
10 | rUOroWaCq/mJA3Q/01m83OXMaorq+iSuqQJAMcSinxdW+6OtCh7LefykldvHiC/Q
11 | gYttvwtweVd9NHfLhi2UFumeo5FkvVZ0hB3gToZGl4kTRynwOXJpZ0WeFQJBAKaV
12 | Oxd33wYp8iviPYUSbJaUHTRXDsdMr9bsbsNsHkw+jo+jbMQIVY2Ivif96Ln8+OYr
13 | 2SJ/TyUWFdwBA/YU5zkCQGef95sS7g3gCrqe4CoLkNalIzfnovFcNtEe6h9OqH5b
14 | KK8yWZVjrffpzuD1d6d3+U7QeTlDh5/nHL1hZKA3gtY=
15 | -----END RSA PRIVATE KEY-----
16 |
--------------------------------------------------------------------------------
/doc/custom_theme/404.html:
--------------------------------------------------------------------------------
1 | {% extends "base.html" %}
2 |
3 | {% block content %}
4 |
5 |
6 |
7 |
404
8 |
Page not found
9 |
10 |
11 |
12 | {% endblock %}
13 |
--------------------------------------------------------------------------------
/doc/custom_theme/content.html:
--------------------------------------------------------------------------------
1 | {% if page.meta.source %}
2 |
3 | {% for filename in page.meta.source %}
4 | {{ filename }}
5 | {% endfor %}
6 |
7 | {% endif %}
8 |
9 | {{ page.content }}
10 |
--------------------------------------------------------------------------------
/doc/custom_theme/fonts/FontAwesome.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lynckia/licode/97938a0f98f8fbda0136a6bac0fd8e63dd790282/doc/custom_theme/fonts/FontAwesome.otf
--------------------------------------------------------------------------------
/doc/custom_theme/fonts/fontawesome-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lynckia/licode/97938a0f98f8fbda0136a6bac0fd8e63dd790282/doc/custom_theme/fonts/fontawesome-webfont.eot
--------------------------------------------------------------------------------
/doc/custom_theme/fonts/fontawesome-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lynckia/licode/97938a0f98f8fbda0136a6bac0fd8e63dd790282/doc/custom_theme/fonts/fontawesome-webfont.ttf
--------------------------------------------------------------------------------
/doc/custom_theme/fonts/fontawesome-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lynckia/licode/97938a0f98f8fbda0136a6bac0fd8e63dd790282/doc/custom_theme/fonts/fontawesome-webfont.woff
--------------------------------------------------------------------------------
/doc/custom_theme/fonts/fontawesome-webfont.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lynckia/licode/97938a0f98f8fbda0136a6bac0fd8e63dd790282/doc/custom_theme/fonts/fontawesome-webfont.woff2
--------------------------------------------------------------------------------
/doc/custom_theme/img/01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lynckia/licode/97938a0f98f8fbda0136a6bac0fd8e63dd790282/doc/custom_theme/img/01.png
--------------------------------------------------------------------------------
/doc/custom_theme/img/02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lynckia/licode/97938a0f98f8fbda0136a6bac0fd8e63dd790282/doc/custom_theme/img/02.png
--------------------------------------------------------------------------------
/doc/custom_theme/img/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lynckia/licode/97938a0f98f8fbda0136a6bac0fd8e63dd790282/doc/custom_theme/img/3.png
--------------------------------------------------------------------------------
/doc/custom_theme/img/4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lynckia/licode/97938a0f98f8fbda0136a6bac0fd8e63dd790282/doc/custom_theme/img/4.png
--------------------------------------------------------------------------------
/doc/custom_theme/img/5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lynckia/licode/97938a0f98f8fbda0136a6bac0fd8e63dd790282/doc/custom_theme/img/5.png
--------------------------------------------------------------------------------
/doc/custom_theme/img/6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lynckia/licode/97938a0f98f8fbda0136a6bac0fd8e63dd790282/doc/custom_theme/img/6.png
--------------------------------------------------------------------------------
/doc/custom_theme/img/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lynckia/licode/97938a0f98f8fbda0136a6bac0fd8e63dd790282/doc/custom_theme/img/favicon.ico
--------------------------------------------------------------------------------
/doc/custom_theme/img/github-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lynckia/licode/97938a0f98f8fbda0136a6bac0fd8e63dd790282/doc/custom_theme/img/github-logo.png
--------------------------------------------------------------------------------
/doc/custom_theme/img/grid.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lynckia/licode/97938a0f98f8fbda0136a6bac0fd8e63dd790282/doc/custom_theme/img/grid.png
--------------------------------------------------------------------------------
/doc/custom_theme/img/routing.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lynckia/licode/97938a0f98f8fbda0136a6bac0fd8e63dd790282/doc/custom_theme/img/routing.png
--------------------------------------------------------------------------------
/doc/custom_theme/js/base.js:
--------------------------------------------------------------------------------
1 | function getSearchTerm()
2 | {
3 | var sPageURL = window.location.search.substring(1);
4 | var sURLVariables = sPageURL.split('&');
5 | for (var i = 0; i < sURLVariables.length; i++)
6 | {
7 | var sParameterName = sURLVariables[i].split('=');
8 | if (sParameterName[0] == 'q')
9 | {
10 | return sParameterName[1];
11 | }
12 | }
13 | }
14 |
15 | $(document).ready(function() {
16 |
17 | var search_term = getSearchTerm(),
18 | $search_modal = $('#mkdocs_search_modal');
19 |
20 | if(search_term){
21 | $search_modal.modal();
22 | }
23 |
24 | // make sure search input gets autofocus everytime modal opens.
25 | $search_modal.on('shown.bs.modal', function () {
26 | $search_modal.find('#mkdocs-search-query').focus();
27 | });
28 |
29 | // Highlight.js
30 | hljs.initHighlightingOnLoad();
31 | $('table').addClass('table table-striped table-hover');
32 | });
33 |
34 |
35 | $('body').scrollspy({
36 | target: '.bs-sidebar',
37 | });
38 |
39 | /* Prevent disabled links from causing a page reload */
40 | $("li.disabled a").click(function() {
41 | event.preventDefault();
42 | });
43 |
--------------------------------------------------------------------------------
/doc/custom_theme/js/script.js:
--------------------------------------------------------------------------------
1 | $(function(){
2 |
3 | var $window = $(window);
4 |
5 | // side bar
6 | $('.bs-sidebar').affix({
7 | offset: {
8 | top: function () { return $window.width() <= 980 ? 290 : 210 }, bottom: 270
9 | }
10 | });
11 |
12 | // Binding for RTD control panel
13 | bindClick();
14 | });
15 |
16 | var bindClick = function () {
17 | if ($('.rst-current-version').length) {
18 | $('.rst-current-version').click(function() {
19 | $('.rst-other-versions').toggle()
20 | });
21 | } else {
22 | // Waiting to RTD for inserting the panel
23 | setTimeout(bindClick, 500);
24 | }
25 | }
--------------------------------------------------------------------------------
/doc/custom_theme/nav-sub.html:
--------------------------------------------------------------------------------
1 | {% if not nav_item.children %}
2 |
3 | {{ nav_item.title }}
4 |
5 | {% else %}
6 | {% for nav_item in nav_item.children %}
7 | {% include "nav-sub.html" %}
8 | {% endfor %}
9 | {% endif %}
10 |
--------------------------------------------------------------------------------
/doc/custom_theme/toc.html:
--------------------------------------------------------------------------------
1 |
37 |
--------------------------------------------------------------------------------
/erizo/.gitignore:
--------------------------------------------------------------------------------
1 | build
2 |
--------------------------------------------------------------------------------
/erizo/buildProject.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | set -e
4 |
5 | BIN_DIR="build"
6 | OBJ_DIR="CMakeFiles"
7 |
8 | buildAll() {
9 | if [ -d $BIN_DIR ]; then
10 | cd $BIN_DIR
11 | for d in */ ; do
12 | echo "Building $d - $*"
13 | cd $d
14 | make $*
15 | cd ..
16 | done
17 | cd ..
18 | else
19 | echo "Error, build directory does not exist, run generateProject.sh first"
20 | fi
21 | }
22 |
23 |
24 |
25 | buildAll $*
26 |
--------------------------------------------------------------------------------
/erizo/cleanObjectFiles.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | set -e
4 |
5 | BIN_DIR="build"
6 | OBJ_DIR="CMakeFiles"
7 |
8 | maybeRemoveObjDir() {
9 | if [ -d $OBJ_DIR ]; then
10 | rm -rf $OBJ_DIR
11 | fi
12 | }
13 |
14 | cleanAll() {
15 | if [ -d $BIN_DIR ]; then
16 | cd $BIN_DIR
17 | for RELEASE_DIR in */ ; do
18 | echo "cleaning $RELEASE_DIR"
19 | cd $RELEASE_DIR
20 | maybeRemoveObjDir
21 | for INTERNAL_DIR in */ ; do
22 | cd $INTERNAL_DIR
23 | maybeRemoveObjDir
24 | cd ..
25 | done
26 | cd ..
27 | done
28 | cd ..
29 | fi
30 | }
31 |
32 | cleanAll
33 |
--------------------------------------------------------------------------------
/erizo/conanfile.txt:
--------------------------------------------------------------------------------
1 | [requires]
2 | libiconv/1.17
3 | boost/1.84.0
4 | apr/1.7.0
5 | apr-util/1.6.1
6 | abseil/20211102.0
7 |
8 | IncludePathsGenerator/0.1@lynckia/includes
9 |
10 | [generators]
11 | cmake
12 | cmake_find_package
13 | cmake_paths
14 | IncludePathsGenerator
15 |
16 | [options]
17 |
18 |
--------------------------------------------------------------------------------
/erizo/generateEclipseProject.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | set -e
3 |
4 | SCRIPT=`pwd`/$0
5 | FILENAME=`basename $SCRIPT`
6 | PATHNAME=`dirname $SCRIPT`
7 | BASE_BIN_DIR="build"
8 |
9 |
10 | generateVersion() {
11 | echo "generating $1"
12 | BIN_DIR="$BASE_BIN_DIR/$1"
13 | if [ -d $BIN_DIR ]; then
14 | cd $BIN_DIR
15 | else
16 | mkdir -p $BIN_DIR
17 | cd $BIN_DIR
18 | fi
19 | cmake ../../src "-DERIZO_BUILD_TYPE=$1" -G"Eclipse CDT4 - Unix Makefiles"
20 | cd $PATHNAME
21 | }
22 |
23 |
24 | generateVersion debug
25 | generateVersion release
26 |
--------------------------------------------------------------------------------
/erizo/generateProject.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | set -e
3 |
4 | SCRIPT=`pwd`/$0
5 | FILENAME=`basename $SCRIPT`
6 | PATHNAME=`dirname $SCRIPT`
7 | BASE_BIN_DIR="build"
8 |
9 | usage()
10 | {
11 | cat << EOF
12 | usage: $0 options
13 | Generate Erizo projects. It will generate all builds if no option is passed.
14 | OPTIONS:
15 | -h Show this message
16 | -d Generate debug
17 | -r Generate release
18 | EOF
19 | }
20 |
21 |
22 | generateVersion() {
23 | echo "generating $1"
24 | BIN_DIR="$BASE_BIN_DIR/$1"
25 | if [ -d $BIN_DIR ]; then
26 | cd $BIN_DIR
27 | else
28 | mkdir -p $BIN_DIR
29 | cd $BIN_DIR
30 | fi
31 | cmake ../../src "-DERIZO_BUILD_TYPE=$1"
32 | cd $PATHNAME
33 | }
34 |
35 | if [ "$#" -eq 0 ]
36 | then
37 | generateVersion debug
38 | generateVersion release
39 | else
40 | while getopts “hdr” OPTION
41 | do
42 | case $OPTION in
43 | h)
44 | usage
45 | exit 1
46 | ;;
47 | d)
48 | generateVersion debug
49 | ;;
50 | r)
51 | generateVersion release
52 | ;;
53 | ?)
54 | usage
55 | exit
56 | ;;
57 | esac
58 | done
59 | fi
60 |
61 | generateVersion release
62 |
--------------------------------------------------------------------------------
/erizo/runTests.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | set -e
4 |
5 | runcmake() {
6 | cmake ../src
7 | echo "Done"
8 | }
9 | BIN_DIR="build"
10 | if [ -d $BIN_DIR ]; then
11 | cd $BIN_DIR
12 | make lint
13 | RET_LINT=`echo $?`
14 | make check
15 | RET_TEST=`echo $?`
16 | exit $(($RET_LINT + $RET_TEST))
17 | else
18 | echo "Error, build directory does not exist, run generateProject.sh first"
19 | fi
20 |
--------------------------------------------------------------------------------
/erizo/src/erizo/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | cmake_minimum_required(VERSION 2.8)
2 |
3 | project (ERIZO)
4 |
5 | set(ERIZO_VERSION_MAJOR 0)
6 | set(ERIZO_VERSION_MINOR 1)
7 | if(${ERIZO_BUILD_TYPE} STREQUAL "debug")
8 | message("Generating DEBUG project")
9 | set(CMAKE_CXX_FLAGS "-g -Wall -std=c++17 ${ERIZO_CMAKE_CXX_FLAGS}")
10 | elseif(${ERIZO_BUILD_TYPE} STREQUAL "sanitizer")
11 | message("Generating SANITIZER project")
12 | set(CMAKE_CXX_FLAGS "-g -Wall -std=c++17 ${ERIZO_CMAKE_CXX_FLAGS} -Wdeprecated-declarations -O1 -fno-omit-frame-pointer -fsanitize=address -fno-optimize-sibling-calls")
13 | else()
14 | message("Generating RELEASE project")
15 | set(CMAKE_CXX_FLAGS "-g -Wall -O3 -Wdeprecated-declarations -std=c++17 ${ERIZO_CMAKE_CXX_FLAGS}")
16 | endif()
17 |
18 |
19 | include_directories("${ERIZO_SOURCE_DIR}" "${THIRD_PARTY_INCLUDE}" "${NICER_INCLUDE}" "${LOG4CXX_BUILD}/include")
20 |
21 | file(GLOB_RECURSE ERIZO_SOURCES "${ERIZO_SOURCE_DIR}/*.h" "${ERIZO_SOURCE_DIR}/*.c" "${ERIZO_SOURCE_DIR}/*.cpp" "${ERIZO_SOURCE_DIR}/*.cc")
22 |
23 | add_library(erizo SHARED ${ERIZO_SOURCES})
24 |
25 |
26 | target_link_libraries(erizo ${GLIB_LIBRARIES} ${Boost_LIBRARIES} ${apr_LIBRARIES} ${apr-util_LIBRARIES} ${SRTP} ${NICE} ${GTHREAD} ${SSL} ${CRYPTO} ${LIBS} webrtc nicer nrappkit log4cxx)
27 | add_dependencies(erizo log4cxxInstall)
28 |
--------------------------------------------------------------------------------
/erizo/src/erizo/DefaultValues.h:
--------------------------------------------------------------------------------
1 | /*
2 | * defaultvalues.h
3 | */
4 | #ifndef ERIZO_SRC_ERIZO_DEFAULTVALUES_H_
5 | #define ERIZO_SRC_ERIZO_DEFAULTVALUES_H_
6 |
7 | namespace erizo {
8 | constexpr uint32_t kDefaultMaxVideoBWInKbps = 30000;
9 | constexpr uint32_t kDefaultMaxVideoBWInBitsps = kDefaultMaxVideoBWInKbps * 1000;
10 | } // namespace erizo
11 |
12 | #endif // ERIZO_SRC_ERIZO_DEFAULTVALUES_H_
13 |
--------------------------------------------------------------------------------
/erizo/src/erizo/Stats.cpp:
--------------------------------------------------------------------------------
1 | /*
2 | * Stats.cpp
3 | *
4 | */
5 |
6 | #include
7 | #include
8 |
9 | #include "Stats.h"
10 | #include "MediaStream.h"
11 | #include "lib/ClockUtils.h"
12 |
13 | namespace erizo {
14 |
15 | DEFINE_LOGGER(Stats, "Stats");
16 |
17 | Stats::Stats() : listener_{nullptr} {
18 | }
19 |
20 | Stats::~Stats() {
21 | }
22 |
23 | StatNode& Stats::getNode() {
24 | return root_;
25 | }
26 |
27 | std::string Stats::getStats() {
28 | return root_.toString();
29 | }
30 |
31 | void Stats::setStatsListener(MediaStreamStatsListener* listener) {
32 | boost::mutex::scoped_lock lock(listener_mutex_);
33 | listener_ = listener;
34 | }
35 |
36 | void Stats::sendStats() {
37 | boost::mutex::scoped_lock lock(listener_mutex_);
38 | if (listener_) listener_->notifyStats(getStats());
39 | }
40 | } // namespace erizo
41 |
--------------------------------------------------------------------------------
/erizo/src/erizo/Stats.h:
--------------------------------------------------------------------------------
1 | /*
2 | * Stats.h
3 | */
4 | #ifndef ERIZO_SRC_ERIZO_STATS_H_
5 | #define ERIZO_SRC_ERIZO_STATS_H_
6 |
7 | #include
8 | #include