Expose parameterless setLocalDescription() in iOS SDK.
Parameterless setLocalDescription is used to implement perfect negotiation algorithm. Bug: None Change-Id: I89c39ee175fec5b09d9ca1700ef682e3cf20fe94 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/209700 Commit-Queue: Kári Helgason <kthelgason@webrtc.org> Reviewed-by: Kári Helgason <kthelgason@webrtc.org> Cr-Commit-Position: refs/heads/master@{#33401}
This commit is contained in:

committed by
Commit Bot

parent
f00cd533ae
commit
d67253532f
@ -300,6 +300,11 @@ RTC_OBJC_EXPORT
|
||||
- (void)setLocalDescription:(RTC_OBJC_TYPE(RTCSessionDescription) *)sdp
|
||||
completionHandler:(nullable void (^)(NSError *_Nullable error))completionHandler;
|
||||
|
||||
/** Creates an offer or answer (depending on current signaling state) and sets
|
||||
* it as the local session description. */
|
||||
- (void)setLocalDescriptionWithCompletionHandler:
|
||||
(nullable void (^)(NSError *_Nullable error))completionHandler;
|
||||
|
||||
/** Apply the supplied RTCSessionDescription as the remote description. */
|
||||
- (void)setRemoteDescription:(RTC_OBJC_TYPE(RTCSessionDescription) *)sdp
|
||||
completionHandler:(nullable void (^)(NSError *_Nullable error))completionHandler;
|
||||
|
@ -29,12 +29,58 @@
|
||||
|
||||
#include "api/jsep_ice_candidate.h"
|
||||
#include "api/rtc_event_log_output_file.h"
|
||||
#include "api/set_local_description_observer_interface.h"
|
||||
#include "api/set_remote_description_observer_interface.h"
|
||||
#include "rtc_base/checks.h"
|
||||
#include "rtc_base/numerics/safe_conversions.h"
|
||||
|
||||
NSString *const kRTCPeerConnectionErrorDomain = @"org.webrtc.RTC_OBJC_TYPE(RTCPeerConnection)";
|
||||
int const kRTCPeerConnnectionSessionDescriptionError = -1;
|
||||
|
||||
typedef void (^RTCSetSessionDescriptionCompletionHandler)(NSError *_Nullable error);
|
||||
|
||||
namespace {
|
||||
|
||||
class SetSessionDescriptionObserver : public webrtc::SetLocalDescriptionObserverInterface,
|
||||
public webrtc::SetRemoteDescriptionObserverInterface {
|
||||
public:
|
||||
SetSessionDescriptionObserver(
|
||||
RTCSetSessionDescriptionCompletionHandler _Nullable completionHandler) {
|
||||
completion_handler_ = completionHandler;
|
||||
}
|
||||
|
||||
virtual void OnSetLocalDescriptionComplete(webrtc::RTCError error) override {
|
||||
if (completion_handler_ != nil) {
|
||||
OnCompelete(error);
|
||||
}
|
||||
}
|
||||
|
||||
virtual void OnSetRemoteDescriptionComplete(webrtc::RTCError error) override {
|
||||
if (completion_handler_ != nil) {
|
||||
OnCompelete(error);
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
void OnCompelete(webrtc::RTCError error) {
|
||||
RTC_DCHECK(completion_handler_);
|
||||
if (error.ok()) {
|
||||
completion_handler_(nil);
|
||||
} else {
|
||||
// TODO(hta): Add handling of error.type()
|
||||
NSString *str = [NSString stringForStdString:error.message()];
|
||||
NSError *err = [NSError errorWithDomain:kRTCPeerConnectionErrorDomain
|
||||
code:kRTCPeerConnnectionSessionDescriptionError
|
||||
userInfo:@{NSLocalizedDescriptionKey : str}];
|
||||
completion_handler_(err);
|
||||
}
|
||||
completion_handler_ = nil;
|
||||
}
|
||||
RTCSetSessionDescriptionCompletionHandler completion_handler_;
|
||||
};
|
||||
|
||||
} // anonymous namespace
|
||||
|
||||
namespace webrtc {
|
||||
|
||||
class CreateSessionDescriptionObserverAdapter
|
||||
@ -74,38 +120,6 @@ class CreateSessionDescriptionObserverAdapter
|
||||
NSError *error);
|
||||
};
|
||||
|
||||
class SetSessionDescriptionObserverAdapter :
|
||||
public SetSessionDescriptionObserver {
|
||||
public:
|
||||
SetSessionDescriptionObserverAdapter(void (^completionHandler)
|
||||
(NSError *error)) {
|
||||
completion_handler_ = completionHandler;
|
||||
}
|
||||
|
||||
~SetSessionDescriptionObserverAdapter() override { completion_handler_ = nil; }
|
||||
|
||||
void OnSuccess() override {
|
||||
RTC_DCHECK(completion_handler_);
|
||||
completion_handler_(nil);
|
||||
completion_handler_ = nil;
|
||||
}
|
||||
|
||||
void OnFailure(RTCError error) override {
|
||||
RTC_DCHECK(completion_handler_);
|
||||
// TODO(hta): Add handling of error.type()
|
||||
NSString *str = [NSString stringForStdString:error.message()];
|
||||
NSError* err =
|
||||
[NSError errorWithDomain:kRTCPeerConnectionErrorDomain
|
||||
code:kRTCPeerConnnectionSessionDescriptionError
|
||||
userInfo:@{ NSLocalizedDescriptionKey : str }];
|
||||
completion_handler_(err);
|
||||
completion_handler_ = nil;
|
||||
}
|
||||
|
||||
private:
|
||||
void (^completion_handler_)(NSError *error);
|
||||
};
|
||||
|
||||
PeerConnectionDelegateAdapter::PeerConnectionDelegateAdapter(RTC_OBJC_TYPE(RTCPeerConnection) *
|
||||
peerConnection) {
|
||||
peer_connection_ = peerConnection;
|
||||
@ -548,19 +562,24 @@ void PeerConnectionDelegateAdapter::OnRemoveTrack(
|
||||
}
|
||||
|
||||
- (void)setLocalDescription:(RTC_OBJC_TYPE(RTCSessionDescription) *)sdp
|
||||
completionHandler:(void (^)(NSError *error))completionHandler {
|
||||
rtc::scoped_refptr<webrtc::SetSessionDescriptionObserverAdapter> observer(
|
||||
new rtc::RefCountedObject<webrtc::SetSessionDescriptionObserverAdapter>(
|
||||
completionHandler));
|
||||
_peerConnection->SetLocalDescription(observer, sdp.nativeDescription);
|
||||
completionHandler:(nullable void (^)(NSError *error))completionHandler {
|
||||
rtc::scoped_refptr<webrtc::SetLocalDescriptionObserverInterface> observer(
|
||||
new rtc::RefCountedObject<::SetSessionDescriptionObserver>(completionHandler));
|
||||
_peerConnection->SetLocalDescription(sdp.nativeDescription->Clone(), observer);
|
||||
}
|
||||
|
||||
- (void)setLocalDescriptionWithCompletionHandler:
|
||||
(nullable void (^)(NSError *error))completionHandler {
|
||||
rtc::scoped_refptr<webrtc::SetLocalDescriptionObserverInterface> observer(
|
||||
new rtc::RefCountedObject<::SetSessionDescriptionObserver>(completionHandler));
|
||||
_peerConnection->SetLocalDescription(observer);
|
||||
}
|
||||
|
||||
- (void)setRemoteDescription:(RTC_OBJC_TYPE(RTCSessionDescription) *)sdp
|
||||
completionHandler:(void (^)(NSError *error))completionHandler {
|
||||
rtc::scoped_refptr<webrtc::SetSessionDescriptionObserverAdapter> observer(
|
||||
new rtc::RefCountedObject<webrtc::SetSessionDescriptionObserverAdapter>(
|
||||
completionHandler));
|
||||
_peerConnection->SetRemoteDescription(observer, sdp.nativeDescription);
|
||||
completionHandler:(nullable void (^)(NSError *error))completionHandler {
|
||||
rtc::scoped_refptr<webrtc::SetRemoteDescriptionObserverInterface> observer(
|
||||
new rtc::RefCountedObject<::SetSessionDescriptionObserver>(completionHandler));
|
||||
_peerConnection->SetRemoteDescription(sdp.nativeDescription->Clone(), observer);
|
||||
}
|
||||
|
||||
- (BOOL)setBweMinBitrateBps:(nullable NSNumber *)minBitrateBps
|
||||
|
Reference in New Issue
Block a user