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)
|
||||
|> 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)
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
|
@ -91,7 +91,7 @@
|
||||
return nil;
|
||||
}
|
||||
|
||||
[_videoCapturer startCaptureWithDevice:frontCamera format:bestFormat fps:27];
|
||||
[_videoCapturer startCaptureWithDevice:frontCamera format:bestFormat fps:30];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
);
|
||||
}));
|
||||
|
@ -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));
|
||||
|
@ -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
|
||||
|
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"
|
||||
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
|
||||
|
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"
|
||||
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
|
||||
|
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