Skip to content
This repository was archived by the owner on Oct 23, 2024. It is now read-only.

Commit f50c2ed

Browse files
authored
Merge pull request #1026 from starwarfan/mst-88
Upgrade sdk to m88 for webrtc node
2 parents 26533ac + d2538e5 commit f50c2ed

File tree

13 files changed

+175
-113
lines changed

13 files changed

+175
-113
lines changed

scripts/installCommonDeps.sh

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -236,16 +236,18 @@ install_libexpat() {
236236
fi
237237
}
238238

239-
install_webrtc79(){
240-
$INCR_INSTALL && [[ -s $ROOT/third_party/webrtc-m79/libwebrtc.a ]] && \
239+
install_webrtc88(){
240+
local OWT_WEBRTC_PATH="$ROOT/third_party/webrtc-m88"
241+
242+
$INCR_INSTALL && [[ -s $OWT_WEBRTC_PATH/libwebrtc.a ]] && \
241243
echo "libwebrtc already installed." && return 0
242244

243-
[[ ! -d $ROOT/third_party/webrtc-m79 ]] && \
244-
mkdir $ROOT/third_party/webrtc-m79
245+
[[ ! -d $OWT_WEBRTC_PATH ]] && \
246+
mkdir $OWT_WEBRTC_PATH
245247

246-
pushd ${ROOT}/third_party/webrtc-m79 >/dev/null
247-
. $PATHNAME/installWebrtc.sh
248-
popd
248+
pushd $OWT_WEBRTC_PATH >/dev/null
249+
. $PATHNAME/installWebrtc.sh
250+
popd >/dev/null
249251
}
250252

251253
install_webrtc(){
@@ -272,7 +274,7 @@ install_webrtc(){
272274
./src/tools-woogeen/build.sh
273275
popd
274276

275-
install_webrtc79
277+
install_webrtc88
276278
}
277279

278280
install_licode(){

scripts/installWebrtc.sh

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#!/bin/bash -e
22

3-
SSL_GNI=$(cat <<-END
3+
GNI_APPEND=$(cat <<-END
44
declare_args() {
55
build_with_owt = false
66
owt_use_openssl = false
@@ -29,6 +29,7 @@ END
2929
# comment is_debug=false for debugging
3030
GN_ARGS=$(cat <<-END
3131
rtc_use_h264=true
32+
rtc_use_h265=true
3233
ffmpeg_branding="Chrome"
3334
is_component_build=false
3435
use_lld=false
@@ -41,6 +42,7 @@ is_clang=false
4142
treat_warnings_as_errors=false
4243
rtc_enable_libevent=false
4344
rtc_build_libevent=false
45+
fatal_linker_warnings=false
4446
is_debug=false
4547
4648
END
@@ -68,9 +70,13 @@ download_and_build(){
6870
if [ -d src ]; then
6971
echo "src already exists."
7072
else
71-
git clone -b 79-sdk https://github.com/open-webrtc-toolkit/owt-deps-webrtc.git src
73+
git clone -b 88-sdk https://github.com/open-webrtc-toolkit/owt-deps-webrtc.git src
74+
pushd src >/dev/null
75+
git reset --hard 0d230afe9c7a968c0f2d966ef9d4d396fee489bf
76+
popd >/dev/null
7277
mkdir -p src/build_overrides/ssl
73-
echo $SSL_GNI > src/build_overrides/ssl/ssl.gni
78+
echo "" > src/build_overrides/ssl/ssl.gni
79+
echo $GNI_APPEND >> src/build_overrides/build.gni
7480
echo $GCLIENT_CONFIG > .gclient
7581
fi
7682

@@ -81,7 +87,7 @@ download_and_build(){
8187

8288
export PATH="$PATH:$DEPOT_TOOLS"
8389
gclient sync --no-history
84-
pushd src >/dev/null
90+
pushd src >/dev/null
8591
gn gen out --args="$GN_ARGS"
8692
ninja -C out call default_task_queue_factory
8793
all=`find ./out/obj/ -name "*.o"`

source/agent/webrtc/rtcFrame/binding.gyp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@
6363
'variables': {
6464
'source_rel_dir': '../../..', # relative source dir path
6565
'source_abs_dir%': '<(module_root_dir)/../../..', # absolute source dir path
66-
'webrtc_abs_dir%': '<(module_root_dir)/../../../../third_party/webrtc-m79' # absolute webrtc dir path
66+
'webrtc_abs_dir%': '<(module_root_dir)/../../../../third_party/webrtc-m88' # absolute webrtc dir path
6767
},
6868
'sources': [
6969
'<(source_rel_dir)/core/rtc_adapter/RtcAdapter.cc',

source/core/owt_base/SsrcGenerator.cc

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,24 +14,29 @@ SsrcGenerator* SsrcGenerator::GetSsrcGenerator() {
1414
}
1515

1616
uint32_t SsrcGenerator::CreateSsrc() {
17-
rtc::CritScope lock(&crit_);
17+
mutex_.Lock();
1818

1919
while (true) { // Try until get a new ssrc.
2020
uint32_t ssrc = random_.Rand(1u, 0xfffffffe);
2121
if (ssrcs_.insert(ssrc).second) {
22+
mutex_.Unlock();
2223
return ssrc;
2324
}
2425
}
26+
mutex_.Unlock();
2527
}
2628

2729
void SsrcGenerator::RegisterSsrc(uint32_t ssrc) {
28-
rtc::CritScope lock(&crit_);
30+
mutex_.Lock();
2931
ssrcs_.insert(ssrc);
32+
mutex_.Unlock();
33+
3034
}
3135

3236
void SsrcGenerator::ReturnSsrc(uint32_t ssrc) {
33-
rtc::CritScope lock(&crit_);
37+
mutex_.Lock();
3438
ssrcs_.erase(ssrc);
39+
mutex_.Unlock();
3540
}
3641

3742
SsrcGenerator::SsrcGenerator() : random_(rtc::TimeMicros()) {}

source/core/owt_base/SsrcGenerator.h

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@
77

88
#include <set>
99

10-
#include "rtc_base/critical_section.h"
1110
#include "rtc_base/random.h"
12-
#include "base/thread_annotations.h"
11+
#include "rtc_base/synchronization/mutex.h"
12+
#include "rtc_base/thread_annotations.h"
1313

1414
namespace owt_base {
1515

@@ -26,9 +26,9 @@ class SsrcGenerator {
2626
~SsrcGenerator();
2727

2828
private:
29-
rtc::CriticalSection crit_;
30-
webrtc::Random random_ GUARDED_BY(crit_);
31-
std::set<uint32_t> ssrcs_ GUARDED_BY(crit_);
29+
mutable webrtc::Mutex mutex_;
30+
webrtc::Random random_ RTC_GUARDED_BY(mutex_);
31+
std::set<uint32_t> ssrcs_ RTC_GUARDED_BY(mutex_);
3232
};
3333
} // namespace owt_base
3434

source/core/rtc_adapter/RtcAdapter.cc

Lines changed: 58 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
#include <mutex>
1515

1616
#include <system_wrappers/include/clock.h>
17+
#include <system_wrappers/include/field_trial.h>
1718

1819
namespace rtc_adapter {
1920

@@ -37,10 +38,26 @@ class RTCProcessThread {
3738
std::unique_ptr<webrtc::ProcessThread> m_processThread;
3839
};
3940

40-
static std::unique_ptr<RTCProcessThread> g_moduleThread
41-
= std::make_unique<RTCProcessThread>("ModuleProcessThread");
42-
static std::unique_ptr<RTCProcessThread> g_pacerThread
43-
= std::make_unique<RTCProcessThread>("PacerThread");
41+
static rtc::scoped_refptr<webrtc::SharedModuleThread> g_moduleThread;
42+
43+
static std::unique_ptr<RTCProcessThread> g_pacerThread;
44+
45+
static std::unique_ptr<webrtc::FieldTrialBasedConfig> g_fieldTrial= []()
46+
{
47+
auto config = std::make_unique<webrtc::FieldTrialBasedConfig>();
48+
// webrtc::field_trial::InitFieldTrialsFromString("WebRTC-TaskQueuePacer/Enabled/");
49+
return config;
50+
}();
51+
52+
static std::shared_ptr<webrtc::RtcEventLog> g_eventLog =
53+
std::make_shared<webrtc::RtcEventLogNull>();
54+
55+
static std::shared_ptr<webrtc::TaskQueueFactory> g_taskQueueFactory =
56+
createStaticTaskQueueFactory();
57+
static std::shared_ptr<rtc::TaskQueue> g_taskQueue =
58+
std::make_shared<rtc::TaskQueue>(g_taskQueueFactory->CreateTaskQueue(
59+
"CallTaskQueue",
60+
webrtc::TaskQueueFactory::Priority::NORMAL));
4461

4562
class RtcAdapterImpl : public RtcAdapter,
4663
public CallOwner {
@@ -58,52 +75,67 @@ class RtcAdapterImpl : public RtcAdapter,
5875
AudioSendAdapter* createAudioSender(const Config&) override;
5976
void destoryAudioSender(AudioSendAdapter*) override;
6077

78+
79+
typedef std::shared_ptr<webrtc::Call> CallPtr;
80+
6181
// Implement CallOwner
62-
std::shared_ptr<webrtc::Call> call() override { return m_call; }
82+
std::shared_ptr<webrtc::Call> call() override
83+
{
84+
return m_callPtr ? (*m_callPtr) : nullptr;
85+
}
6386
std::shared_ptr<webrtc::TaskQueueFactory> taskQueueFactory() override
6487
{
65-
return m_taskQueueFactory;
88+
return g_taskQueueFactory;
6689
}
67-
std::shared_ptr<rtc::TaskQueue> taskQueue() override { return m_taskQueue; }
68-
std::shared_ptr<webrtc::RtcEventLog> eventLog() override { return m_eventLog; }
90+
std::shared_ptr<rtc::TaskQueue> taskQueue() override { return g_taskQueue; }
91+
std::shared_ptr<webrtc::RtcEventLog> eventLog() override { return g_eventLog; }
6992

7093
private:
7194
void initCall();
7295

73-
std::shared_ptr<webrtc::TaskQueueFactory> m_taskQueueFactory;
74-
std::shared_ptr<rtc::TaskQueue> m_taskQueue;
75-
std::shared_ptr<webrtc::RtcEventLog> m_eventLog;
76-
std::shared_ptr<webrtc::Call> m_call;
96+
std::shared_ptr<CallPtr> m_callPtr;
7797
};
7898

7999
RtcAdapterImpl::RtcAdapterImpl()
80-
: m_taskQueueFactory(createStaticTaskQueueFactory())
81-
, m_taskQueue(std::make_shared<rtc::TaskQueue>(m_taskQueueFactory->CreateTaskQueue(
82-
"CallTaskQueue",
83-
webrtc::TaskQueueFactory::Priority::NORMAL)))
84-
, m_eventLog(std::make_shared<webrtc::RtcEventLogNull>())
85100
{
86101
}
87102

88103
RtcAdapterImpl::~RtcAdapterImpl()
89104
{
105+
if (m_callPtr) {
106+
std::shared_ptr<CallPtr> pCallPtr = m_callPtr;
107+
m_callPtr.reset();
108+
g_taskQueue->PostTask([pCallPtr]() {
109+
if (*pCallPtr) {
110+
(*pCallPtr).reset();
111+
}
112+
});
113+
}
90114
}
91115

92116
void RtcAdapterImpl::initCall()
93117
{
94-
m_taskQueue->PostTask([this]() {
118+
m_callPtr.reset(new CallPtr());
119+
std::shared_ptr<CallPtr> pCallPtr = m_callPtr;
120+
g_taskQueue->PostTask([pCallPtr]() {
95121
// Initialize call
96-
if (!m_call) {
97-
webrtc::Call::Config call_config(m_eventLog.get());
98-
call_config.task_queue_factory = m_taskQueueFactory.get();
122+
if (!(*pCallPtr)) {
123+
webrtc::Call::Config call_config(g_eventLog.get());
124+
call_config.task_queue_factory = g_taskQueueFactory.get();
125+
call_config.trials = g_fieldTrial.get();
126+
127+
if (!g_moduleThread) {
128+
g_moduleThread = webrtc::SharedModuleThread::Create(
129+
webrtc::ProcessThread::Create("ModuleProcessThread"), nullptr);
130+
}
99131

100-
std::unique_ptr<webrtc::ProcessThread> moduleThreadProxy =
101-
std::make_unique<ProcessThreadProxy>(g_moduleThread->unwrap());
132+
// Empty thread for pacer
102133
std::unique_ptr<webrtc::ProcessThread> pacerThreadProxy =
103-
std::make_unique<ProcessThreadProxy>(g_pacerThread->unwrap());
104-
m_call.reset(webrtc::Call::Create(
134+
std::make_unique<ProcessThreadProxy>(nullptr);
135+
136+
(*pCallPtr).reset(webrtc::Call::Create(
105137
call_config, webrtc::Clock::GetRealTimeClock(),
106-
std::move(moduleThreadProxy),
138+
g_moduleThread,
107139
std::move(pacerThreadProxy)));
108140
}
109141
});

source/core/rtc_adapter/VideoReceiveAdapter.cc

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44

55
#include "VideoReceiveAdapter.h"
66

7-
#include <common_types.h>
87
#include <future>
98
#include <modules/video_coding/include/video_error_codes.h>
109
#include <modules/video_coding/timing.h>
@@ -210,6 +209,7 @@ void VideoReceiveAdapterImpl::CreateReceiveVideo()
210209
default_config.renderer = this;
211210

212211
webrtc::VideoReceiveStream::Config video_recv_config(default_config.Copy());
212+
video_recv_config.decoder_factory = this;
213213
video_recv_config.decoders.clear();
214214
/*
215215
if (!video_send_config.rtp.rtx.ssrcs.empty()) {
@@ -219,7 +219,6 @@ void VideoReceiveAdapterImpl::CreateReceiveVideo()
219219
}
220220
*/
221221
webrtc::VideoReceiveStream::Decoder decoder;
222-
decoder.decoder_factory = this;
223222
// Add VP8 decoder
224223
decoder.payload_type = VP8_90000_PT;
225224
decoder.video_format = webrtc::SdpVideoFormat(

0 commit comments

Comments
 (0)