feat: server sdk (#47)

* New webrtc build scripts (Still not integrated within the SDK)
* New livekit-api crate (Integrate the server sdk protocol of livekit)
* Moved livekit-utils to livekit-protocol
This commit is contained in:
Théo Monnom
2023-04-19 12:33:39 +02:00
committed by GitHub
parent 459a42bf12
commit 180864e953
62 changed files with 2621 additions and 635 deletions
+5
View File
@@ -1,3 +1,8 @@
.cipd
src
.gclient_*
depot_tools
# builds
macos
linux
+77
View File
@@ -0,0 +1,77 @@
#!/bin/bash
if [ ! -e "$(pwd)/depot_tools" ]
then
git clone --depth 1 https://chromium.googlesource.com/chromium/tools/depot_tools.git
fi
export COMMAND_DIR=$(cd $(dirname $0); pwd)
export PATH="$(pwd)/depot_tools:$PATH"
export OUTPUT_DIR="$(pwd)/src/out"
export ARTIFACTS_DIR="$(pwd)/linux"
if [ ! -e "$(pwd)/src" ]
then
gclient sync
fi
cd src
git apply "$COMMAND_DIR/patches/add_license_dav1d.patch" -v
git apply "$COMMAND_DIR/patches/ssl_verify_callback_with_native_handle.patch" -v
git apply "$COMMAND_DIR/patches/fix_mocks.patch" -v
cd ..
mkdir -p "$ARTIFACTS_DIR/lib"
for is_debug in "true" "false"
do
for target_cpu in "x64" "arm64"
do
args="is_debug=${is_debug} \
target_os=\"linux\" \
target_cpu=\"${target_cpu}\" \
rtc_enable_protobuf=false \
treat_warnings_as_errors=false \
use_custom_libcxx=false \
rtc_include_tests=false \
rtc_build_tools=false \
rtc_build_examples=false \
rtc_libvpx_build_vp9=true \
is_component_build=false \
enable_stripping=true \
use_goma=false \
rtc_use_h264=false \
rtc_use_pipewire=false \
symbol_level=0 \
enable_iterator_debugging=false \
use_rtti=true \
rtc_use_x11=false"
if [ $is_debug = "true" ]; then
args="${args} is_asan=true is_lsan=true";
fi
# generate ninja files
gn gen "$OUTPUT_DIR" --root="src" --args="${args}"
# build static library
ninja -C "$OUTPUT_DIR" webrtc
filename="libwebrtc.a"
if [ $is_debug = "true" ]; then
filename="libwebrtcd.a"
fi
# cppy static library
mkdir -p "$ARTIFACTS_DIR/lib/${target_cpu}"
cp "$OUTPUT_DIR/obj/libwebrtc.a" "$ARTIFACTS_DIR/lib/${target_cpu}/${filename}"
done
done
python3 "./src/tools_webrtc/libs/generate_licenses.py" \
--target :webrtc "$OUTPUT_DIR" "$OUTPUT_DIR"
cd src
find . -name "*.h" -print | cpio -pd "$ARTIFACTS_DIR/include"
cp "$OUTPUT_DIR/LICENSE.md" "$ARTIFACTS_DIR"
+75
View File
@@ -0,0 +1,75 @@
#!/bin/bash -eu
if [ ! -e "$(pwd)/depot_tools" ]
then
git clone --depth 1 https://chromium.googlesource.com/chromium/tools/depot_tools.git
fi
export COMMAND_DIR=$(cd $(dirname $0); pwd)
export PATH="$(pwd)/depot_tools:$PATH"
export OUTPUT_DIR="$(pwd)/src/out"
export ARTIFACTS_DIR="$(pwd)/macos"
if [ ! -e "$(pwd)/src" ]
then
gclient sync
fi
cd src
git apply "$COMMAND_DIR/patches/add_license_dav1d.patch" -v
git apply "$COMMAND_DIR/patches/ssl_verify_callback_with_native_handle.patch" -v
git apply "$COMMAND_DIR/patches/fix_mocks.patch" -v
cd ..
mkdir -p "$ARTIFACTS_DIR/lib"
for is_debug in "true" "false"
do
for target_cpu in "x64" "arm64"
do
# generate ninja files
gn gen "$OUTPUT_DIR" --root="src" \
--args="is_debug=${is_debug} \
enable_dsyms=${is_debug} \
target_os=\"mac\" \
target_cpu=\"${target_cpu}\" \
mac_deployment_target=\"10.11\" \
treat_warnings_as_errors=false \
rtc_enable_protobuf=false \
rtc_include_tests=false \
rtc_build_examples=false \
rtc_build_tools=false \
rtc_libvpx_build_vp9=true \
is_component_build=false \
enable_stripping=true \
use_goma=false \
rtc_use_h264=false \
rtc_enable_symbol_export=true \
rtc_enable_objc_symbol_export=false \
clang_use_chrome_plugins=false \
symbol_level=0 \
enable_iterator_debugging=false \
use_rtti=true"
# build static library
ninja -C "$OUTPUT_DIR" webrtc
filename="libwebrtc.a"
if [ $is_debug = "true" ]; then
filename="libwebrtcd.a"
fi
# cppy static library
mkdir -p "$ARTIFACTS_DIR/lib/${target_cpu}"
cp "$OUTPUT_DIR/obj/libwebrtc.a" "$ARTIFACTS_DIR/lib/${target_cpu}/${filename}"
done
done
python3 "./src/tools_webrtc/libs/generate_licenses.py" \
--target :webrtc "$OUTPUT_DIR" "$OUTPUT_DIR"
cd src
find . -name "*.h" -print | cpio -pd "$ARTIFACTS_DIR/include"
cp "$OUTPUT_DIR/LICENSE.md" "$ARTIFACTS_DIR"
+63
View File
@@ -0,0 +1,63 @@
@echo off
if not exist depot_tools (
git clone --depth 1 https://chromium.googlesource.com/chromium/tools/depot_tools.git
)
set COMMAND_DIR=%~dp0
set PATH=%cd%\depot_tools;%PATH%
set DEPOT_TOOLS_WIN_TOOLCHAIN=0
set GYP_GENERATORS=ninja,msvs-ninja
set GYP_MSVS_VERSION=2019
set OUTPUT_DIR=src/out
set ARTIFACTS_DIR=%cd%\windows
set vs2019_install=C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional
if not exist src (
call gclient.bat sync
)
cd src
call git apply "%COMMAND_DIR%/patches/add_license_dav1d.patch" -v
call git apply "%COMMAND_DIR%/patches/ssl_verify_callback_with_native_handle.patch" -v
call git apply "%COMMAND_DIR%/patches/fix_mocks.patch" -v
cd ..
mkdir "%ARTIFACTS_DIR%\lib"
setlocal enabledelayedexpansion
for %%i in (x64 arm64) do (
mkdir "%ARTIFACTS_DIR%/lib/%%i"
for %%j in (true false) do (
rem generate ninja for release
call gn.bat gen %OUTPUT_DIR% --root="src" ^
--args="is_debug=%%j is_clang=true target_cpu=\"%%i\" use_custom_libcxx=false rtc_include_tests=false rtc_build_examples=false rtc_use_h264=false symbol_level=0 enable_iterator_debugging=false"
rem build
ninja.exe -C %OUTPUT_DIR% webrtc
set filename=
if true==%%j (
set filename=webrtcd.lib
) else (
set filename=webrtc.lib
)
rem copy static library for release build
copy "%OUTPUT_DIR%\obj\webrtc.lib" "%ARTIFACTS_DIR%\lib\%%i\!filename!"
)
)
endlocal
rem generate license
call python3 "%cd%\src\tools_webrtc\libs\generate_licenses.py" ^
--target :webrtc %OUTPUT_DIR% %OUTPUT_DIR%
rem copy header
xcopy src\*.h "%ARTIFACTS_DIR%\include" /C /S /I /F /H
rem copy license
copy "%OUTPUT_DIR%\LICENSE.md" "%ARTIFACTS_DIR%\LICENSE.md"
@@ -0,0 +1,17 @@
diff --git a/tools_webrtc/libs/generate_licenses.py b/tools_webrtc/libs/generate_licenses.py
index 86b4cd01f0..cf927670ee 100755
--- a/tools_webrtc/libs/generate_licenses.py
+++ b/tools_webrtc/libs/generate_licenses.py
@@ -91,6 +91,12 @@ LIB_TO_LICENSES_DICT = {
'yasm': [],
'ow2_asm': [],
'jdk': [],
+
+ 'dav1d': ['third_party/dav1d/LICENSE'],
+ 'catapult': [],
+ 'google_benchmark': [],
+ 'googletest': [],
+ 'vinn': [],
}
# Third_party library _regex_ to licences mapping. Keys are regular expression
@@ -0,0 +1,25 @@
diff --git a/modules/audio_device/include/mock_audio_device.h b/modules/audio_device/include/mock_audio_device.h
index 8483aa3da8..f66cdca0ba 100644
--- a/modules/audio_device/include/mock_audio_device.h
+++ b/modules/audio_device/include/mock_audio_device.h
@@ -149,6 +149,7 @@ class MockAudioDeviceModule : public AudioDeviceModule {
(AudioParameters * params),
(const, override));
#endif // WEBRTC_IOS
+ MOCK_METHOD(int32_t, SetAudioDeviceSink, (AudioDeviceSink* sink), (const, override));
};
} // namespace test
} // namespace webrtc
diff --git a/pc/test/fake_audio_capture_module.h b/pc/test/fake_audio_capture_module.h
index fd13a85f89..81bdbf9f8c 100644
--- a/pc/test/fake_audio_capture_module.h
+++ b/pc/test/fake_audio_capture_module.h
@@ -140,6 +140,8 @@ class FakeAudioCaptureModule : public webrtc::AudioDeviceModule,
int32_t EnableBuiltInNS(bool enable) override { return -1; }
int32_t GetPlayoutUnderrunCount() const override { return -1; }
+
+ int32_t SetAudioDeviceSink(webrtc::AudioDeviceSink* sink) const override { return 0; }
#if defined(WEBRTC_IOS)
int GetPlayoutAudioParameters(
webrtc::AudioParameters* params) const override {
@@ -0,0 +1,76 @@
diff --git a/rtc_base/boringssl_certificate.cc b/rtc_base/boringssl_certificate.cc
index 99b2ab3e24..c37d6d963f 100644
--- a/rtc_base/boringssl_certificate.cc
+++ b/rtc_base/boringssl_certificate.cc
@@ -253,6 +253,12 @@ BoringSSLCertificate::BoringSSLCertificate(
RTC_DCHECK(cert_buffer_ != nullptr);
}
+BoringSSLCertificate::BoringSSLCertificate(
+ bssl::UniquePtr<CRYPTO_BUFFER> cert_buffer, SSL* ssl)
+ : cert_buffer_(std::move(cert_buffer)), ssl_(ssl) {
+ RTC_DCHECK(cert_buffer_ != nullptr);
+}
+
std::unique_ptr<BoringSSLCertificate> BoringSSLCertificate::Generate(
OpenSSLKeyPair* key_pair,
const SSLIdentityParams& params) {
diff --git a/rtc_base/boringssl_certificate.h b/rtc_base/boringssl_certificate.h
index 8b4577a17c..e1fe26cba5 100644
--- a/rtc_base/boringssl_certificate.h
+++ b/rtc_base/boringssl_certificate.h
@@ -33,6 +33,7 @@ class OpenSSLKeyPair;
class BoringSSLCertificate final : public SSLCertificate {
public:
explicit BoringSSLCertificate(bssl::UniquePtr<CRYPTO_BUFFER> cert_buffer);
+ BoringSSLCertificate(bssl::UniquePtr<CRYPTO_BUFFER> cert_buffer, SSL* ssl);
static std::unique_ptr<BoringSSLCertificate> Generate(
OpenSSLKeyPair* key_pair,
@@ -74,6 +75,11 @@ class BoringSSLCertificate final : public SSLCertificate {
private:
// A handle to the DER encoded certificate data.
bssl::UniquePtr<CRYPTO_BUFFER> cert_buffer_;
+
+ private:
+ SSL* ssl_ = nullptr;
+ public:
+ SSL* ssl() const { return ssl_; }
};
} // namespace rtc
diff --git a/rtc_base/openssl_adapter.cc b/rtc_base/openssl_adapter.cc
index bc10e619eb..836ef9ea18 100644
--- a/rtc_base/openssl_adapter.cc
+++ b/rtc_base/openssl_adapter.cc
@@ -822,7 +822,7 @@ enum ssl_verify_result_t OpenSSLAdapter::SSLVerifyInternal(SSL* ssl,
return ssl_verify_invalid;
}
- BoringSSLCertificate cert(bssl::UpRef(sk_CRYPTO_BUFFER_value(chain, 0)));
+ BoringSSLCertificate cert(bssl::UpRef(sk_CRYPTO_BUFFER_value(chain, 0)), ssl);
if (!ssl_cert_verifier_->Verify(cert)) {
RTC_LOG(LS_WARNING) << "Failed to verify certificate using custom callback";
return ssl_verify_invalid;
@@ -894,7 +894,7 @@ int OpenSSLAdapter::SSLVerifyInternal(int previous_status,
RTC_LOG(LS_ERROR) << "Failed to allocate CRYPTO_BUFFER.";
return previous_status;
}
- const BoringSSLCertificate cert(std::move(crypto_buffer));
+ const BoringSSLCertificate cert(std::move(crypto_buffer), ssl);
#else
const OpenSSLCertificate cert(X509_STORE_CTX_get_current_cert(store));
#endif
diff --git a/rtc_base/openssl_stream_adapter.cc b/rtc_base/openssl_stream_adapter.cc
index dd82e4f061..6d7e39c534 100644
--- a/rtc_base/openssl_stream_adapter.cc
+++ b/rtc_base/openssl_stream_adapter.cc
@@ -1154,7 +1154,7 @@ enum ssl_verify_result_t OpenSSLStreamAdapter::SSLVerifyCallback(
// Creates certificate chain.
std::vector<std::unique_ptr<SSLCertificate>> cert_chain;
for (CRYPTO_BUFFER* cert : chain) {
- cert_chain.emplace_back(new BoringSSLCertificate(bssl::UpRef(cert)));
+ cert_chain.emplace_back(new BoringSSLCertificate(bssl::UpRef(cert), ssl));
}
stream->peer_cert_chain_.reset(new SSLCertChain(std::move(cert_chain)));