Create an Obj-C wrapper of the RtpReceiverObserverInterface.

Create the RTCRtpReceiverDelegate which is a wrapper over
webrtc::RtpReceiverObserverInterface.
The callback will be called whenever the first rtp packet is received.

Related CL: https://codereview.webrtc.org/2531333003/

BUG=webrtc:6742

Review-Url: https://codereview.webrtc.org/2641923003
Cr-Commit-Position: refs/heads/master@{#16501}
This commit is contained in:
zhihuang
2017-02-08 10:41:20 -08:00
committed by Commit bot
parent bb46b95dbe
commit 4da058c0dd
3 changed files with 83 additions and 0 deletions

View File

@ -14,6 +14,20 @@
NS_ASSUME_NONNULL_BEGIN
namespace webrtc {
class RtpReceiverDelegateAdapter : public RtpReceiverObserverInterface {
public:
RtpReceiverDelegateAdapter(RTCRtpReceiver* receiver);
void OnFirstPacketReceived(cricket::MediaType media_type) override;
private:
__weak RTCRtpReceiver* receiver_;
};
} // namespace webrtc
@interface RTCRtpReceiver ()
@property(nonatomic, readonly)
@ -24,6 +38,8 @@ NS_ASSUME_NONNULL_BEGIN
(rtc::scoped_refptr<webrtc::RtpReceiverInterface>)nativeRtpReceiver
NS_DESIGNATED_INITIALIZER;
+ (RTCRtpMediaType)mediaTypeForNativeMediaType:(cricket::MediaType)nativeMediaType;
@end
NS_ASSUME_NONNULL_END

View File

@ -17,10 +17,31 @@
#include "webrtc/api/mediastreaminterface.h"
namespace webrtc {
RtpReceiverDelegateAdapter::RtpReceiverDelegateAdapter(
RTCRtpReceiver *receiver) {
RTC_CHECK(receiver);
receiver_ = receiver;
}
void RtpReceiverDelegateAdapter::OnFirstPacketReceived(
cricket::MediaType media_type) {
RTCRtpMediaType packet_media_type =
[RTCRtpReceiver mediaTypeForNativeMediaType:media_type];
RTCRtpReceiver *receiver = receiver_;
[receiver.delegate rtpReceiver:receiver didReceiveFirstPacketForMediaType:packet_media_type];
}
} // namespace webrtc
@implementation RTCRtpReceiver {
rtc::scoped_refptr<webrtc::RtpReceiverInterface> _nativeRtpReceiver;
std::unique_ptr<webrtc::RtpReceiverDelegateAdapter> _observer;
}
@synthesize delegate = _delegate;
- (NSString *)receiverId {
return [NSString stringForStdString:_nativeRtpReceiver->id()];
}
@ -81,8 +102,22 @@
_nativeRtpReceiver = nativeRtpReceiver;
RTCLogInfo(
@"RTCRtpReceiver(%p): created receiver: %@", self, self.description);
_observer.reset(new webrtc::RtpReceiverDelegateAdapter(self));
_nativeRtpReceiver->SetObserver(_observer.get());
}
return self;
}
+ (RTCRtpMediaType)mediaTypeForNativeMediaType:
(cricket::MediaType)nativeMediaType {
switch (nativeMediaType) {
case cricket::MEDIA_TYPE_AUDIO:
return RTCRtpMediaTypeAudio;
case cricket::MEDIA_TYPE_VIDEO:
return RTCRtpMediaTypeVideo;
case cricket::MEDIA_TYPE_DATA:
return RTCRtpMediaTypeData;
}
}
@end