You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

689 lines
21 KiB

# Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.
#
# Use of this source code is governed by a BSD-style license
# that can be found in the LICENSE file in the root of the source
# tree. An additional intellectual property rights grant can be found
# in the file PATENTS. All contributing project authors may
# be found in the AUTHORS file in the root of the source tree.
import("../webrtc.gni")
if (is_android) {
import("//build/config/android/config.gni")
import("//build/config/android/rules.gni")
}
group("pc") {
deps = [ ":rtc_pc" ]
}
config("rtc_pc_config") {
defines = []
if (rtc_enable_sctp) {
defines += [ "HAVE_SCTP" ]
}
}
rtc_library("rtc_pc_base") {
visibility = [ "*" ]
defines = []
sources = [
"channel.cc",
"channel.h",
"channel_interface.h",
"channel_manager.cc",
"channel_manager.h",
"composite_rtp_transport.cc",
"composite_rtp_transport.h",
"dtls_srtp_transport.cc",
"dtls_srtp_transport.h",
"dtls_transport.cc",
"dtls_transport.h",
"external_hmac.cc",
"external_hmac.h",
"ice_transport.cc",
"ice_transport.h",
"jsep_transport.cc",
"jsep_transport.h",
"jsep_transport_controller.cc",
"jsep_transport_controller.h",
"media_session.cc",
"media_session.h",
"rtcp_mux_filter.cc",
"rtcp_mux_filter.h",
"rtp_media_utils.cc",
"rtp_media_utils.h",
"rtp_transport.cc",
"rtp_transport.h",
"rtp_transport_internal.h",
"sctp_data_channel_transport.cc",
"sctp_data_channel_transport.h",
"sctp_transport.cc",
"sctp_transport.h",
"sctp_utils.cc",
"sctp_utils.h",
"session_description.cc",
"session_description.h",
"simulcast_description.cc",
"simulcast_description.h",
"srtp_filter.cc",
"srtp_filter.h",
"srtp_session.cc",
"srtp_session.h",
"srtp_transport.cc",
"srtp_transport.h",
"transport_stats.cc",
"transport_stats.h",
"used_ids.h",
]
deps = [
":media_protocol_names",
"../api:array_view",
"../api:audio_options_api",
"../api:call_api",
"../api:function_view",
"../api:ice_transport_factory",
"../api:libjingle_peerconnection_api",
"../api:priority",
"../api:rtc_error",
"../api:rtp_headers",
"../api:rtp_parameters",
"../api:rtp_parameters",
"../api:scoped_refptr",
"../api/crypto:options",
"../api/rtc_event_log",
"../api/transport:datagram_transport_interface",
"../api/video:builtin_video_bitrate_allocator_factory",
"../api/video:video_frame",
"../api/video:video_rtp_headers",
"../call:call_interfaces",
"../call:rtp_interfaces",
"../call:rtp_receiver",
"../common_video",
"../common_video:common_video",
"../logging:ice_log",
"../media:rtc_data",
"../media:rtc_h264_profile_id",
"../media:rtc_media_base",
"../media:rtc_media_config",
"../modules/rtp_rtcp:rtp_rtcp",
"../modules/rtp_rtcp:rtp_rtcp_format",
"../p2p:rtc_p2p",
"../rtc_base",
"../rtc_base:checks",
"../rtc_base:deprecation",
"../rtc_base:rtc_task_queue",
"../rtc_base:stringutils",
"../rtc_base/synchronization:mutex",
"../rtc_base/system:file_wrapper",
"../rtc_base/system:rtc_export",
"../rtc_base/third_party/base64",
"../rtc_base/third_party/sigslot",
"../system_wrappers:field_trial",
"../system_wrappers:metrics",
]
absl_deps = [
"//third_party/abseil-cpp/absl/algorithm:container",
"//third_party/abseil-cpp/absl/base:core_headers",
"//third_party/abseil-cpp/absl/memory",
"//third_party/abseil-cpp/absl/strings",
"//third_party/abseil-cpp/absl/types:optional",
]
if (rtc_build_libsrtp) {
deps += [ "//third_party/libsrtp" ]
}
public_configs = [ ":rtc_pc_config" ]
}
rtc_source_set("rtc_pc") {
visibility = [ "*" ]
allow_poison = [ "audio_codecs" ] # TODO(bugs.webrtc.org/8396): Remove.
deps = [
":rtc_pc_base",
"../media:rtc_audio_video",
]
}
rtc_library("media_protocol_names") {
sources = [
"media_protocol_names.cc",
"media_protocol_names.h",
]
}
rtc_library("peerconnection") {
visibility = [ "*" ]
cflags = []
sources = [
"audio_rtp_receiver.cc",
"audio_rtp_receiver.h",
"audio_track.cc",
"audio_track.h",
"data_channel_controller.cc",
"data_channel_controller.h",
"data_channel_utils.cc",
"data_channel_utils.h",
"dtmf_sender.cc",
"dtmf_sender.h",
"ice_server_parsing.cc",
"ice_server_parsing.h",
"jitter_buffer_delay.cc",
"jitter_buffer_delay.h",
"jitter_buffer_delay_interface.h",
"jitter_buffer_delay_proxy.h",
"jsep_ice_candidate.cc",
"jsep_session_description.cc",
"local_audio_source.cc",
"local_audio_source.h",
"media_stream.cc",
"media_stream.h",
"media_stream_observer.cc",
"media_stream_observer.h",
"media_stream_track.h",
"peer_connection.cc",
"peer_connection.h",
"peer_connection_factory.cc",
"peer_connection_factory.h",
"peer_connection_internal.h",
"remote_audio_source.cc",
"remote_audio_source.h",
"rtc_stats_collector.cc",
"rtc_stats_collector.h",
"rtc_stats_traversal.cc",
"rtc_stats_traversal.h",
"rtp_data_channel.cc",
"rtp_data_channel.h",
"rtp_parameters_conversion.cc",
"rtp_parameters_conversion.h",
"rtp_receiver.cc",
"rtp_receiver.h",
"rtp_sender.cc",
"rtp_sender.h",
"rtp_transceiver.cc",
"rtp_transceiver.h",
"sctp_data_channel.cc",
"sctp_data_channel.h",
"sdp_serializer.cc",
"sdp_serializer.h",
"sdp_utils.cc",
"sdp_utils.h",
"stats_collector.cc",
"stats_collector.h",
"stream_collection.h",
"track_media_info_map.cc",
"track_media_info_map.h",
"video_rtp_receiver.cc",
"video_rtp_receiver.h",
"video_rtp_track_source.cc",
"video_rtp_track_source.h",
"video_track.cc",
"video_track.h",
"video_track_source.cc",
"video_track_source.h",
"webrtc_sdp.cc",
"webrtc_sdp.h",
"webrtc_session_description_factory.cc",
"webrtc_session_description_factory.h",
]
deps = [
":rtc_pc_base",
"../api:array_view",
"../api:audio_options_api",
"../api:call_api",
"../api:fec_controller_api",
"../api:frame_transformer_interface",
"../api:ice_transport_factory",
"../api:libjingle_peerconnection_api",
"../api:media_stream_interface",
"../api:network_state_predictor_api",
"../api:priority",
"../api:rtc_error",
"../api:rtc_event_log_output_file",
"../api:rtc_stats_api",
"../api:rtp_parameters",
"../api:scoped_refptr",
"../api/crypto:frame_decryptor_interface",
"../api/rtc_event_log",
"../api/task_queue",
"../api/transport:datagram_transport_interface",
"../api/transport:field_trial_based_config",
"../api/units:data_rate",
"../api/video:builtin_video_bitrate_allocator_factory",
"../api/video:video_frame",
"../api/video:video_rtp_headers",
"../api/video_codecs:video_codecs_api",
"../call:call_interfaces",
"../common_video",
"../logging:ice_log",
"../media:rtc_data",
"../media:rtc_media_base",
"../modules/rtp_rtcp:rtp_rtcp_format",
"../p2p:rtc_p2p",
"../rtc_base",
"../rtc_base:checks",
"../rtc_base:rtc_base_approved",
"../rtc_base:rtc_operations_chain",
"../rtc_base:safe_minmax",
"../rtc_base:weak_ptr",
"../rtc_base/experiments:field_trial_parser",
"../rtc_base/synchronization:mutex",
"../rtc_base/system:file_wrapper",
"../rtc_base/system:rtc_export",
"../rtc_base/third_party/base64",
"../rtc_base/third_party/sigslot",
"../stats",
"../system_wrappers",
"../system_wrappers:field_trial",
"../system_wrappers:metrics",
]
absl_deps = [
"//third_party/abseil-cpp/absl/algorithm:container",
"//third_party/abseil-cpp/absl/strings",
"//third_party/abseil-cpp/absl/types:optional",
]
}
rtc_source_set("libjingle_peerconnection") {
visibility = [ "*" ]
deps = [
":peerconnection",
"../api:libjingle_peerconnection_api",
]
}
if (rtc_include_tests) {
rtc_test("rtc_pc_unittests") {
testonly = true
sources = [
"channel_manager_unittest.cc",
"channel_unittest.cc",
"composite_rtp_transport_test.cc",
"dtls_srtp_transport_unittest.cc",
"dtls_transport_unittest.cc",
"ice_transport_unittest.cc",
"jsep_transport_controller_unittest.cc",
"jsep_transport_unittest.cc",
"media_session_unittest.cc",
"rtcp_mux_filter_unittest.cc",
"rtp_transport_unittest.cc",
"sctp_transport_unittest.cc",
"session_description_unittest.cc",
"srtp_filter_unittest.cc",
"srtp_session_unittest.cc",
"srtp_transport_unittest.cc",
"test/rtp_transport_test_util.h",
"test/srtp_test_util.h",
"used_ids_unittest.cc",
"video_rtp_receiver_unittest.cc",
]
include_dirs = [ "//third_party/libsrtp/srtp" ]
if (is_win) {
libs = [ "strmiids.lib" ]
}
deps = [
":libjingle_peerconnection",
":pc_test_utils",
":peerconnection",
":rtc_pc",
":rtc_pc_base",
"../api:array_view",
"../api:audio_options_api",
"../api:ice_transport_factory",
"../api:libjingle_peerconnection_api",
"../api:rtc_error",
"../api:rtp_headers",
"../api:rtp_parameters",
"../api/video:builtin_video_bitrate_allocator_factory",
"../api/video/test:mock_recordable_encoded_frame",
"../call:rtp_interfaces",
"../call:rtp_receiver",
"../media:rtc_data",
"../media:rtc_media_base",
"../media:rtc_media_tests_utils",
"../modules/rtp_rtcp:rtp_rtcp_format",
"../p2p:fake_ice_transport",
"../p2p:fake_port_allocator",
"../p2p:p2p_test_utils",
"../p2p:rtc_p2p",
"../rtc_base",
"../rtc_base:checks",
"../rtc_base:gunit_helpers",
"../rtc_base:rtc_base_approved",
"../rtc_base:rtc_base_tests_utils",
"../rtc_base/third_party/sigslot",
"../system_wrappers:metrics",
"../test:test_main",
"../test:test_support",
"//third_party/abseil-cpp/absl/algorithm:container",
"//third_party/abseil-cpp/absl/memory",
"//third_party/abseil-cpp/absl/strings",
]
if (rtc_build_libsrtp) {
deps += [ "//third_party/libsrtp" ]
}
if (is_android) {
deps += [ "//testing/android/native_test:native_test_support" ]
}
}
rtc_library("peerconnection_perf_tests") {
testonly = true
sources = [ "peer_connection_rampup_tests.cc" ]
deps = [
":pc_test_utils",
":peerconnection_wrapper",
"../api:audio_options_api",
"../api:create_peerconnection_factory",
"../api:libjingle_peerconnection_api",
"../api:media_stream_interface",
"../api:rtc_stats_api",
"../api:scoped_refptr",
"../api/audio:audio_mixer_api",
"../api/audio_codecs:audio_codecs_api",
"../api/audio_codecs:builtin_audio_decoder_factory",
"../api/audio_codecs:builtin_audio_encoder_factory",
"../api/video_codecs:builtin_video_decoder_factory",
"../api/video_codecs:builtin_video_encoder_factory",
"../api/video_codecs:video_codecs_api",
"../media:rtc_media_tests_utils",
"../modules/audio_device:audio_device_api",
"../modules/audio_processing:api",
"../p2p:p2p_test_utils",
"../p2p:rtc_p2p",
"../pc:peerconnection",
"../rtc_base",
"../rtc_base:checks",
"../rtc_base:gunit_helpers",
"../rtc_base:rtc_base_tests_utils",
"../system_wrappers",
"../test:perf_test",
"../test:test_support",
]
absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
}
rtc_library("peerconnection_wrapper") {
testonly = true
sources = [
"peer_connection_wrapper.cc",
"peer_connection_wrapper.h",
]
deps = [
":pc_test_utils",
"../api:function_view",
"../api:libjingle_peerconnection_api",
"../api:media_stream_interface",
"../api:rtc_error",
"../api:rtc_stats_api",
"../api:rtp_parameters",
"../api:scoped_refptr",
"../pc:peerconnection",
"../rtc_base:checks",
"../rtc_base:gunit_helpers",
"../rtc_base:rtc_base_approved",
"../test:test_support",
]
}
rtc_library("pc_test_utils") {
testonly = true
sources = [
"test/fake_audio_capture_module.cc",
"test/fake_audio_capture_module.h",
"test/fake_data_channel_provider.h",
"test/fake_peer_connection_base.h",
"test/fake_peer_connection_for_stats.h",
"test/fake_periodic_video_source.h",
"test/fake_periodic_video_track_source.h",
"test/fake_rtc_certificate_generator.h",
"test/fake_sctp_transport.h",
"test/fake_video_track_renderer.h",
"test/fake_video_track_source.h",
"test/frame_generator_capturer_video_track_source.h",
"test/mock_channel_interface.h",
"test/mock_data_channel.h",
"test/mock_delayable.h",
"test/mock_peer_connection_observers.h",
"test/mock_rtp_receiver_internal.h",
"test/mock_rtp_sender_internal.h",
"test/peer_connection_test_wrapper.cc",
"test/peer_connection_test_wrapper.h",
"test/rtc_stats_obtainer.h",
"test/test_sdp_strings.h",
]
deps = [
":libjingle_peerconnection",
":peerconnection",
":rtc_pc_base",
"../api:audio_options_api",
"../api:create_frame_generator",
"../api:create_peerconnection_factory",
"../api:libjingle_peerconnection_api",
"../api:media_stream_interface",
"../api:rtc_error",
"../api:rtc_stats_api",
"../api:scoped_refptr",
"../api/audio:audio_mixer_api",
"../api/audio_codecs:audio_codecs_api",
"../api/task_queue",
"../api/task_queue:default_task_queue_factory",
"../api/video:builtin_video_bitrate_allocator_factory",
"../api/video:video_frame",
"../api/video:video_rtp_headers",
"../api/video_codecs:builtin_video_decoder_factory",
"../api/video_codecs:builtin_video_encoder_factory",
"../api/video_codecs:video_codecs_api",
"../call:call_interfaces",
"../media:rtc_data",
"../media:rtc_media",
"../media:rtc_media_base",
"../media:rtc_media_tests_utils",
"../modules/audio_device",
"../modules/audio_processing",
"../modules/audio_processing:api",
"../p2p:fake_port_allocator",
"../p2p:p2p_test_utils",
"../p2p:rtc_p2p",
"../rtc_base",
"../rtc_base:checks",
"../rtc_base:gunit_helpers",
"../rtc_base:rtc_base_approved",
"../rtc_base:rtc_task_queue",
"../rtc_base:task_queue_for_test",
"../rtc_base/synchronization:mutex",
"../rtc_base/synchronization:sequence_checker",
"../rtc_base/task_utils:repeating_task",
"../rtc_base/third_party/sigslot",
"../test:test_support",
"../test:video_test_common",
]
absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
}
rtc_test("peerconnection_unittests") {
testonly = true
sources = [
"data_channel_unittest.cc",
"dtmf_sender_unittest.cc",
"ice_server_parsing_unittest.cc",
"jitter_buffer_delay_unittest.cc",
"jsep_session_description_unittest.cc",
"local_audio_source_unittest.cc",
"media_stream_unittest.cc",
"peer_connection_adaptation_integrationtest.cc",
"peer_connection_bundle_unittest.cc",
"peer_connection_crypto_unittest.cc",
"peer_connection_data_channel_unittest.cc",
"peer_connection_end_to_end_unittest.cc",
"peer_connection_factory_unittest.cc",
"peer_connection_header_extension_unittest.cc",
"peer_connection_histogram_unittest.cc",
"peer_connection_ice_unittest.cc",
"peer_connection_integrationtest.cc",
"peer_connection_interface_unittest.cc",
"peer_connection_jsep_unittest.cc",
"peer_connection_media_unittest.cc",
"peer_connection_rtp_unittest.cc",
"peer_connection_signaling_unittest.cc",
"peer_connection_simulcast_unittest.cc",
"peer_connection_wrapper.cc",
"peer_connection_wrapper.h",
"proxy_unittest.cc",
"rtc_stats_collector_unittest.cc",
"rtc_stats_integrationtest.cc",
"rtc_stats_traversal_unittest.cc",
"rtp_media_utils_unittest.cc",
"rtp_parameters_conversion_unittest.cc",
"rtp_sender_receiver_unittest.cc",
"rtp_transceiver_unittest.cc",
"sctp_utils_unittest.cc",
"sdp_serializer_unittest.cc",
"stats_collector_unittest.cc",
"test/fake_audio_capture_module_unittest.cc",
"test/test_sdp_strings.h",
"track_media_info_map_unittest.cc",
"video_rtp_track_source_unittest.cc",
"video_track_unittest.cc",
"webrtc_sdp_unittest.cc",
]
if (rtc_enable_sctp) {
defines = [ "HAVE_SCTP" ]
}
deps = [
":peerconnection",
":rtc_pc_base",
"../api:array_view",
"../api:audio_options_api",
"../api:create_peerconnection_factory",
"../api:fake_frame_decryptor",
"../api:fake_frame_encryptor",
"../api:function_view",
"../api:libjingle_logging_api",
"../api:libjingle_peerconnection_api",
"../api:media_stream_interface",
"../api:mock_rtp",
"../api:rtc_error",
"../api:scoped_refptr",
"../api/audio:audio_mixer_api",
"../api/crypto:frame_decryptor_interface",
"../api/crypto:frame_encryptor_interface",
"../api/crypto:options",
"../api/rtc_event_log",
"../api/rtc_event_log:rtc_event_log_factory",
"../api/task_queue:default_task_queue_factory",
"../api/transport/rtp:rtp_source",
"../api/units:time_delta",
"../api/video:builtin_video_bitrate_allocator_factory",
"../call/adaptation:resource_adaptation_test_utilities",
"../logging:fake_rtc_event_log",
"../media:rtc_media_config",
"../media:rtc_media_engine_defaults",
"../modules/audio_device:audio_device_api",
"../modules/audio_processing:audio_processing_statistics",
"../modules/audio_processing:audioproc_test_utils",
"../modules/rtp_rtcp:rtp_rtcp_format",
"../p2p:fake_ice_transport",
"../p2p:fake_port_allocator",
"../rtc_base:checks",
"../rtc_base:gunit_helpers",
"../rtc_base:rtc_base_tests_utils",
"../rtc_base:rtc_json",
"../rtc_base/synchronization:mutex",
"../rtc_base/third_party/base64",
"../rtc_base/third_party/sigslot",
"../system_wrappers:metrics",
"../test:field_trial",
"../test:fileutils",
"../test:rtp_test_utils",
"./scenario_tests:pc_scenario_tests",
"//third_party/abseil-cpp/absl/algorithm:container",
"//third_party/abseil-cpp/absl/memory",
"//third_party/abseil-cpp/absl/strings",
"//third_party/abseil-cpp/absl/types:optional",
]
if (is_android) {
deps += [ ":android_black_magic" ]
}
deps += [
":libjingle_peerconnection",
":pc_test_utils",
"../api:callfactory_api",
"../api:rtc_event_log_output_file",
"../api:rtc_stats_api",
"../api:rtp_parameters",
"../api/audio_codecs:audio_codecs_api",
"../api/audio_codecs:builtin_audio_decoder_factory",
"../api/audio_codecs:builtin_audio_encoder_factory",
"../api/audio_codecs:opus_audio_decoder_factory",
"../api/audio_codecs:opus_audio_encoder_factory",
"../api/audio_codecs/L16:audio_decoder_L16",
"../api/audio_codecs/L16:audio_encoder_L16",
"../api/video_codecs:builtin_video_decoder_factory",
"../api/video_codecs:builtin_video_encoder_factory",
"../api/video_codecs:video_codecs_api",
"../call:call_interfaces",
"../media:rtc_audio_video",
"../media:rtc_data", # TODO(phoglund): AFAIK only used for one sctp
# constant.
"../media:rtc_media_base",
"../media:rtc_media_tests_utils",
"../modules/audio_processing",
"../modules/audio_processing:api",
"../modules/utility",
"../p2p:p2p_test_utils",
"../p2p:rtc_p2p",
"../pc:rtc_pc",
"../rtc_base",
"../rtc_base:rtc_base_approved",
"../rtc_base:rtc_task_queue",
"../rtc_base:safe_conversions",
"../test:audio_codec_mocks",
"../test:test_main",
"../test:test_support",
]
if (is_android) {
deps += [
"//testing/android/native_test:native_test_support",
# We need to depend on this one directly, or classloads will fail for
# the voice engine BuildInfo, for instance.
"../sdk/android:libjingle_peerconnection_java",
]
shard_timeout = 900
}
}
if (is_android) {
rtc_library("android_black_magic") {
# The android code uses hacky includes to chromium-base and the ssl code;
# having this in a separate target enables us to keep the peerconnection
# unit tests clean.
check_includes = false
testonly = true
sources = [
"test/android_test_initializer.cc",
"test/android_test_initializer.h",
]
deps = [
"../sdk/android:libjingle_peerconnection_jni",
"//testing/android/native_test:native_test_support",
]
}
}
}