mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
Use h265
This commit is contained in:
parent
b31e1dfb8b
commit
d1da4e2c65
@ -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)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
}));
|
}));
|
||||||
|
@ -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));
|
||||||
|
@ -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
|
||||||
|
2
third-party/webrtc/build-webrtc-bazel.sh
vendored
2
third-party/webrtc/build-webrtc-bazel.sh
vendored
@ -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
|
||||||
|
2
third-party/webrtc/build-webrtc-buck.sh
vendored
2
third-party/webrtc/build-webrtc-buck.sh
vendored
@ -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
|
||||||
|
2
third-party/webrtc/webrtc-ios
vendored
2
third-party/webrtc/webrtc-ios
vendored
@ -1 +1 @@
|
|||||||
Subproject commit 625c777c8ad260cbc4bf9a6409d5b4382d92914b
|
Subproject commit cf2c8a8364b4cfda7ea9eb448671033351851130
|
Loading…
x
Reference in New Issue
Block a user