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)
|> deliverOn(self.queue)).start(next: { [weak self] data in
self?.withContext { context in
if let context = context as? OngoingCallThreadLocalContextWebrtc {
context.addSignaling(data)
self.signalingDataDisposable = (callSessionManager.callSignalingData(internalId: internalId)).start(next: { [weak self] data in
print("data received")
queue.async {
self?.withContext { context in
if let context = context as? OngoingCallThreadLocalContextWebrtc {
context.addSignaling(data)
}
}
}
})

View File

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

View File

@ -51,13 +51,13 @@ Manager::~Manager() {
void Manager::start() {
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(
getNetworkThread(),
encryptionKey,
enableP2P,
[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();
if (strongThis == nullptr) {
return;
@ -86,14 +86,8 @@ void Manager::start() {
});
});
},
[thread, weakThis](const std::vector<uint8_t> &data) {
thread->PostTask(RTC_FROM_HERE, [weakThis, data]() {
auto strongThis = weakThis.lock();
if (strongThis == nullptr) {
return;
}
strongThis->_signalingDataEmitted(data);
});
[signalingDataEmitted](const std::vector<uint8_t> &data) {
signalingDataEmitted(data);
}
);
}));

View File

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

View File

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

View File

@ -23,7 +23,7 @@ if [ "$ARCH" == "x64" ]; then
OUT_DIR="ios_sim"
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
popd

View File

@ -27,7 +27,7 @@ if [ "$ARCH" == "x64" ]; then
OUT_DIR="ios_sim"
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
popd

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