This commit is contained in:
Ali 2020-06-17 18:36:54 +04:00
parent b31e1dfb8b
commit d1da4e2c65
8 changed files with 37 additions and 69 deletions

View File

@ -514,11 +514,13 @@ public final class OngoingCallContext {
} }
})) }))
self.signalingDataDisposable = (callSessionManager.callSignalingData(internalId: internalId) self.signalingDataDisposable = (callSessionManager.callSignalingData(internalId: internalId)).start(next: { [weak self] data in
|> deliverOn(self.queue)).start(next: { [weak self] data in print("data received")
self?.withContext { context in queue.async {
if let context = context as? OngoingCallThreadLocalContextWebrtc { self?.withContext { context in
context.addSignaling(data) if let context = context as? OngoingCallThreadLocalContextWebrtc {
context.addSignaling(data)
}
} }
} }
}) })

View File

@ -91,7 +91,7 @@
return nil; return nil;
} }
[_videoCapturer startCaptureWithDevice:frontCamera format:bestFormat fps:27]; [_videoCapturer startCaptureWithDevice:frontCamera format:bestFormat fps:30];
} }
return self; return self;
} }

View File

@ -51,13 +51,13 @@ Manager::~Manager() {
void Manager::start() { void Manager::start() {
auto weakThis = std::weak_ptr<Manager>(shared_from_this()); auto weakThis = std::weak_ptr<Manager>(shared_from_this());
_networkManager.reset(new ThreadLocalObject<NetworkManager>(getNetworkThread(), [encryptionKey = _encryptionKey, enableP2P = _enableP2P, thread = _thread, weakThis]() { _networkManager.reset(new ThreadLocalObject<NetworkManager>(getNetworkThread(), [encryptionKey = _encryptionKey, enableP2P = _enableP2P, thread = _thread, weakThis, signalingDataEmitted = _signalingDataEmitted]() {
return new NetworkManager( return new NetworkManager(
getNetworkThread(), getNetworkThread(),
encryptionKey, encryptionKey,
enableP2P, enableP2P,
[thread, weakThis](const NetworkManager::State &state) { [thread, weakThis](const NetworkManager::State &state) {
thread->Invoke<void>(RTC_FROM_HERE, [weakThis, state]() { thread->PostTask(RTC_FROM_HERE, [weakThis, state]() {
auto strongThis = weakThis.lock(); auto strongThis = weakThis.lock();
if (strongThis == nullptr) { if (strongThis == nullptr) {
return; return;
@ -86,14 +86,8 @@ void Manager::start() {
}); });
}); });
}, },
[thread, weakThis](const std::vector<uint8_t> &data) { [signalingDataEmitted](const std::vector<uint8_t> &data) {
thread->PostTask(RTC_FROM_HERE, [weakThis, data]() { signalingDataEmitted(data);
auto strongThis = weakThis.lock();
if (strongThis == nullptr) {
return;
}
strongThis->_signalingDataEmitted(data);
});
} }
); );
})); }));

View File

@ -73,9 +73,6 @@ static std::vector<cricket::VideoCodec> AssignPayloadTypesAndDefaultCodecs(std::
input_formats.push_back(flexfec_format); input_formats.push_back(flexfec_format);
}*/ }*/
bool found = false;
bool useVP9 = true;
std::vector<cricket::VideoCodec> output_codecs; std::vector<cricket::VideoCodec> output_codecs;
for (const webrtc::SdpVideoFormat& format : input_formats) { for (const webrtc::SdpVideoFormat& format : input_formats) {
cricket::VideoCodec codec(format); cricket::VideoCodec codec(format);
@ -83,19 +80,6 @@ static std::vector<cricket::VideoCodec> AssignPayloadTypesAndDefaultCodecs(std::
AddDefaultFeedbackParams(&codec); AddDefaultFeedbackParams(&codec);
output_codecs.push_back(codec); output_codecs.push_back(codec);
if (useVP9 && codec.name == cricket::kVp9CodecName) {
if (!found) {
outCodecId = codec.id;
found = true;
}
}
if (!useVP9 && codec.name == cricket::kH264CodecName) {
if (!found) {
outCodecId = codec.id;
found = true;
}
}
// Increment payload type. // Increment payload type.
++payload_type; ++payload_type;
if (payload_type > kLastDynamicPayloadType) { if (payload_type > kLastDynamicPayloadType) {
@ -122,18 +106,24 @@ static std::vector<cricket::VideoCodec> AssignPayloadTypesAndDefaultCodecs(std::
static absl::optional<cricket::VideoCodec> selectVideoCodec(std::vector<cricket::VideoCodec> &codecs) { static absl::optional<cricket::VideoCodec> selectVideoCodec(std::vector<cricket::VideoCodec> &codecs) {
bool useVP9 = false; bool useVP9 = false;
bool useH265 = true;
for (auto &codec : codecs) { for (auto &codec : codecs) {
if (useVP9) { if (useVP9) {
if (codec.name == cricket::kVp9CodecName) { if (codec.name == cricket::kVp9CodecName) {
return absl::optional<cricket::VideoCodec>(codec); return absl::optional<cricket::VideoCodec>(codec);
} }
} else if (useH265) {
if (codec.name == cricket::kH265CodecName) {
return absl::optional<cricket::VideoCodec>(codec);
}
} else { } else {
if (codec.name == cricket::kH264CodecName) { if (codec.name == cricket::kH264CodecName) {
return absl::optional<cricket::VideoCodec>(codec); return absl::optional<cricket::VideoCodec>(codec);
} }
} }
} }
return absl::optional<cricket::VideoCodec>(); return absl::optional<cricket::VideoCodec>();
} }
@ -210,7 +200,7 @@ _taskQueueFactory(webrtc::CreateDefaultTaskQueueFactory()) {
const uint8_t opusMaxBitrateKbps = 32; const uint8_t opusMaxBitrateKbps = 32;
const uint8_t opusStartBitrateKbps = 6; const uint8_t opusStartBitrateKbps = 6;
const uint8_t opusPTimeMs = 120; const uint8_t opusPTimeMs = 120;
const int opusExtensionSequence = 1; const int extensionSequenceOne = 1;
cricket::AudioCodec opusCodec(opusSdpPayload, opusSdpName, opusClockrate, opusSdpBitrate, opusSdpChannels); cricket::AudioCodec opusCodec(opusSdpPayload, opusSdpName, opusClockrate, opusSdpBitrate, opusSdpChannels);
opusCodec.AddFeedbackParam(cricket::FeedbackParam(cricket::kRtcpFbParamTransportCc)); opusCodec.AddFeedbackParam(cricket::FeedbackParam(cricket::kRtcpFbParamTransportCc));
@ -222,7 +212,7 @@ _taskQueueFactory(webrtc::CreateDefaultTaskQueueFactory()) {
cricket::AudioSendParameters audioSendPrameters; cricket::AudioSendParameters audioSendPrameters;
audioSendPrameters.codecs.push_back(opusCodec); audioSendPrameters.codecs.push_back(opusCodec);
audioSendPrameters.extensions.emplace_back(webrtc::RtpExtension::kTransportSequenceNumberUri, opusExtensionSequence); audioSendPrameters.extensions.emplace_back(webrtc::RtpExtension::kTransportSequenceNumberUri, extensionSequenceOne);
audioSendPrameters.options.echo_cancellation = false; audioSendPrameters.options.echo_cancellation = false;
//audioSendPrameters.options.experimental_ns = false; //audioSendPrameters.options.experimental_ns = false;
audioSendPrameters.options.noise_suppression = false; audioSendPrameters.options.noise_suppression = false;
@ -237,7 +227,7 @@ _taskQueueFactory(webrtc::CreateDefaultTaskQueueFactory()) {
cricket::AudioRecvParameters audioRecvParameters; cricket::AudioRecvParameters audioRecvParameters;
audioRecvParameters.codecs.emplace_back(opusSdpPayload, opusSdpName, opusClockrate, opusSdpBitrate, opusSdpChannels); audioRecvParameters.codecs.emplace_back(opusSdpPayload, opusSdpName, opusClockrate, opusSdpBitrate, opusSdpChannels);
audioRecvParameters.extensions.emplace_back(webrtc::RtpExtension::kTransportSequenceNumberUri, opusExtensionSequence); audioRecvParameters.extensions.emplace_back(webrtc::RtpExtension::kTransportSequenceNumberUri, extensionSequenceOne);
audioRecvParameters.rtcp.reduced_size = true; audioRecvParameters.rtcp.reduced_size = true;
audioRecvParameters.rtcp.remote_estimate = true; audioRecvParameters.rtcp.remote_estimate = true;
_audioChannel->AddRecvStream(cricket::StreamParams::CreateLegacy(_ssrcAudio.incoming)); _audioChannel->AddRecvStream(cricket::StreamParams::CreateLegacy(_ssrcAudio.incoming));
@ -253,15 +243,14 @@ _taskQueueFactory(webrtc::CreateDefaultTaskQueueFactory()) {
auto codec = videoCodec.value(); auto codec = videoCodec.value();
codec.SetParam(cricket::kCodecParamMinBitrate, 64); codec.SetParam(cricket::kCodecParamMinBitrate, 64);
codec.SetParam(cricket::kCodecParamStartBitrate, 256); codec.SetParam(cricket::kCodecParamStartBitrate, 512);
codec.SetParam(cricket::kCodecParamMaxBitrate, 2500); codec.SetParam(cricket::kCodecParamMaxBitrate, 2500);
_videoCapturer = makeVideoCapturer(_nativeVideoSource); _videoCapturer = makeVideoCapturer(_nativeVideoSource);
cricket::VideoSendParameters videoSendParameters; cricket::VideoSendParameters videoSendParameters;
videoSendParameters.codecs.push_back(codec); videoSendParameters.codecs.push_back(codec);
const int videoExtensionSequence = 1; videoSendParameters.extensions.emplace_back(webrtc::RtpExtension::kTransportSequenceNumberUri, extensionSequenceOne);
videoSendParameters.extensions.emplace_back(webrtc::RtpExtension::kTransportSequenceNumberUri, videoExtensionSequence);
//send_parameters.max_bandwidth_bps = 800000; //send_parameters.max_bandwidth_bps = 800000;
//send_parameters.rtcp.reduced_size = true; //send_parameters.rtcp.reduced_size = true;
videoSendParameters.rtcp.remote_estimate = true; videoSendParameters.rtcp.remote_estimate = true;
@ -273,7 +262,7 @@ _taskQueueFactory(webrtc::CreateDefaultTaskQueueFactory()) {
cricket::VideoRecvParameters videoRecvParameters; cricket::VideoRecvParameters videoRecvParameters;
videoRecvParameters.codecs.emplace_back(codec); videoRecvParameters.codecs.emplace_back(codec);
videoRecvParameters.extensions.emplace_back(webrtc::RtpExtension::kTransportSequenceNumberUri, videoExtensionSequence); videoRecvParameters.extensions.emplace_back(webrtc::RtpExtension::kTransportSequenceNumberUri, extensionSequenceOne);
//recv_parameters.rtcp.reduced_size = true; //recv_parameters.rtcp.reduced_size = true;
videoRecvParameters.rtcp.remote_estimate = true; videoRecvParameters.rtcp.remote_estimate = true;
_videoChannel->AddRecvStream(cricket::StreamParams::CreateLegacy(_ssrcVideo.incoming)); _videoChannel->AddRecvStream(cricket::StreamParams::CreateLegacy(_ssrcVideo.incoming));

View File

@ -21,48 +21,31 @@ private:
public: public:
ThreadLocalObject(rtc::Thread *thread, std::function<T *()> generator) : ThreadLocalObject(rtc::Thread *thread, std::function<T *()> generator) :
_thread(thread) { _thread(thread),
_valueHolder(new ThreadLocalObject::ValueHolder<T>()) {
assert(_thread != nullptr); assert(_thread != nullptr);
_valueHolder = new ThreadLocalObject::ValueHolder<T>(); _thread->PostTask(RTC_FROM_HERE, [valueHolder = _valueHolder, generator](){
//ValueHolder<T> *valueHolder = _valueHolder; valueHolder->_value.reset(generator());
_thread->Invoke<void>(RTC_FROM_HERE, [this, generator](){
this->_valueHolder->_value.reset(generator());
}); });
} }
~ThreadLocalObject() { ~ThreadLocalObject() {
ValueHolder<T> *valueHolder = _valueHolder; _thread->PostTask(RTC_FROM_HERE, [valueHolder = _valueHolder](){
_thread->Invoke<void>(RTC_FROM_HERE, [this](){ valueHolder->_value.reset();
this->_valueHolder->_value.reset();
}); });
delete valueHolder;
} }
template <class FunctorT> template <class FunctorT>
void perform(FunctorT&& functor) { void perform(FunctorT&& functor) {
//ValueHolder<T> *valueHolder = _valueHolder; _thread->PostTask(RTC_FROM_HERE, [valueHolder = _valueHolder, f = std::forward<FunctorT>(functor)](){
/*_thread->PostTask(RTC_FROM_HERE, [valueHolder, f = std::forward<std::function<void(T &)>>(f)](){ assert(valueHolder->_value != nullptr);
T *value = valueHolder->_value; f(valueHolder->_value.get());
assert(value != nullptr);
f(*value);
});*/
_thread->Invoke<void>(RTC_FROM_HERE, [this, f = std::forward<FunctorT>(functor)](){
assert(_valueHolder->_value != nullptr);
f(_valueHolder->_value.get());
});
}
template <class FunctorT>
void performSync(FunctorT&& functor) {
_thread->Invoke<void>(RTC_FROM_HERE, [this, f = std::forward<FunctorT>(functor)](){
assert(_valueHolder->_value != nullptr);
f(_valueHolder->_value.get());
}); });
} }
private: private:
rtc::Thread *_thread; rtc::Thread *_thread;
ValueHolder<T> *_valueHolder; std::shared_ptr<ValueHolder<T>> _valueHolder;
}; };
#ifdef TGVOIP_NAMESPACE #ifdef TGVOIP_NAMESPACE

View File

@ -23,7 +23,7 @@ if [ "$ARCH" == "x64" ]; then
OUT_DIR="ios_sim" OUT_DIR="ios_sim"
fi fi
gn gen out/$OUT_DIR --args="use_xcode_clang=true "" target_cpu=\"$ARCH\""' target_os="ios" is_debug=false is_component_build=false rtc_include_tests=false use_rtti=true rtc_use_x11=false use_custom_libcxx=false use_custom_libcxx_for_host=false rtc_build_ssl=false rtc_build_examples=false rtc_build_tools=false ios_deployment_target="9.0" ios_enable_code_signing=false is_unsafe_developer_build=false rtc_enable_protobuf=false rtc_include_builtin_video_codecs=true rtc_build_libvpx=true rtc_libvpx_build_vp9=true rtc_use_gtk=false rtc_use_metal_rendering=true rtc_ssl_root="//openssl"' gn gen out/$OUT_DIR --args="use_xcode_clang=true "" target_cpu=\"$ARCH\""' target_os="ios" is_debug=false is_component_build=false rtc_include_tests=false use_rtti=true rtc_use_x11=false use_custom_libcxx=false use_custom_libcxx_for_host=false rtc_build_ssl=false rtc_build_examples=false rtc_build_tools=false ios_deployment_target="9.0" ios_enable_code_signing=false is_unsafe_developer_build=false rtc_enable_protobuf=false rtc_include_builtin_video_codecs=true rtc_build_libvpx=true rtc_libvpx_build_vp9=true rtc_use_gtk=false rtc_use_metal_rendering=true'
ninja -C out/$OUT_DIR framework_objc_static ninja -C out/$OUT_DIR framework_objc_static
popd popd

View File

@ -27,7 +27,7 @@ if [ "$ARCH" == "x64" ]; then
OUT_DIR="ios_sim" OUT_DIR="ios_sim"
fi fi
buildtools/mac/gn gen out/$OUT_DIR --args="use_xcode_clang=true "" target_cpu=\"$ARCH\""' target_os="ios" is_debug=false is_component_build=false rtc_include_tests=false use_rtti=true rtc_use_x11=false use_custom_libcxx=false use_custom_libcxx_for_host=false rtc_build_ssl=false rtc_build_examples=false rtc_build_tools=false ios_deployment_target="9.0" ios_enable_code_signing=false is_unsafe_developer_build=false rtc_enable_protobuf=false rtc_include_builtin_video_codecs=true rtc_build_libvpx=true rtc_libvpx_build_vp9=true rtc_use_gtk=false rtc_use_metal_rendering=true rtc_ssl_root="//openssl"' buildtools/mac/gn gen out/$OUT_DIR --args="use_xcode_clang=true "" target_cpu=\"$ARCH\""' target_os="ios" is_debug=false is_component_build=false rtc_include_tests=false use_rtti=true rtc_use_x11=false use_custom_libcxx=false use_custom_libcxx_for_host=false rtc_build_ssl=false rtc_build_examples=false rtc_build_tools=false ios_deployment_target="9.0" ios_enable_code_signing=false is_unsafe_developer_build=false rtc_enable_protobuf=false rtc_include_builtin_video_codecs=true rtc_build_libvpx=true rtc_libvpx_build_vp9=true rtc_use_gtk=false rtc_use_metal_rendering=true'
ninja -C out/$OUT_DIR framework_objc_static ninja -C out/$OUT_DIR framework_objc_static
popd popd

@ -1 +1 @@
Subproject commit 625c777c8ad260cbc4bf9a6409d5b4382d92914b Subproject commit cf2c8a8364b4cfda7ea9eb448671033351851130