Skip to content

Commit ae76f52

Browse files
authored
Feat/expose set codec preferences and get capabilities (#60)
* feat: capabilities. * fix: fix crash. * update. * update.
1 parent 3a92a24 commit ae76f52

12 files changed

+419
-109
lines changed

BUILD.gn

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ rtc_shared_library("libwebrtc") {
7070
"include/rtc_mediaconstraints.h",
7171
"include/rtc_peerconnection.h",
7272
"include/rtc_peerconnection_factory.h",
73+
"include/rtc_rtp_capabilities.h",
7374
"include/rtc_rtp_parameters.h",
7475
"include/rtc_rtp_receiver.h",
7576
"include/rtc_rtp_sender.h",
@@ -109,6 +110,8 @@ rtc_shared_library("libwebrtc") {
109110
"src/rtc_peerconnection_factory_impl.h",
110111
"src/rtc_peerconnection_impl.cc",
111112
"src/rtc_peerconnection_impl.h",
113+
"src/rtc_rtp_capabilities_impl.cc",
114+
"src/rtc_rtp_capabilities_impl.h",
112115
"src/rtc_rtp_parameters_impl.cc",
113116
"src/rtc_rtp_parameters_impl.h",
114117
"src/rtc_rtp_receiver_impl.cc",

include/rtc_peerconnection_factory.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ namespace libwebrtc {
1818
class RTCPeerConnection;
1919
class RTCAudioDevice;
2020
class RTCVideoDevice;
21+
class RTCRtpCapabilities;
2122

2223
class RTCPeerConnectionFactory : public RefCountInterface {
2324
public:
@@ -60,6 +61,12 @@ class RTCPeerConnectionFactory : public RefCountInterface {
6061

6162
virtual scoped_refptr<RTCMediaStream> CreateStream(
6263
const string stream_id) = 0;
64+
65+
virtual scoped_refptr<RTCRtpCapabilities> GetRtpSenderCapabilities(
66+
RTCMediaType media_type) = 0;
67+
68+
virtual scoped_refptr<RTCRtpCapabilities> GetRtpReceiverCapabilities(
69+
RTCMediaType media_type) = 0;
6370
};
6471

6572
} // namespace libwebrtc

include/rtc_rtp_capabilities.h

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
#ifndef LIB_WBBRTC_RTC_RTP_CAPABILITIES_HXX
2+
#define LIB_WBBRTC_RTC_RTP_CAPABILITIES_HXX
3+
4+
#include "base/refcount.h"
5+
#include "base/scoped_ref_ptr.h"
6+
7+
#include "rtc_rtp_parameters.h"
8+
#include "rtc_types.h"
9+
10+
11+
namespace libwebrtc {
12+
13+
class RTCRtpCodecCapability : public RefCountInterface {
14+
public:
15+
LIB_WEBRTC_API static scoped_refptr<RTCRtpCodecCapability> Create();
16+
17+
virtual void set_mime_type(const string& mime_type) = 0;
18+
virtual void set_clock_rate(int clock_rate) = 0;
19+
virtual void set_channels(int channels) = 0;
20+
virtual void set_sdp_fmtp_line(const string& sdp_fmtp_line) = 0;
21+
22+
virtual string mime_type() const = 0;
23+
virtual int clock_rate() const = 0;
24+
virtual int channels() const = 0;
25+
virtual string sdp_fmtp_line() const = 0;
26+
27+
protected:
28+
virtual ~RTCRtpCodecCapability() {}
29+
};
30+
31+
class RTCRtpHeaderExtensionCapability : public RefCountInterface {
32+
public:
33+
virtual const string uri() = 0;
34+
virtual void set_uri(const string uri) = 0;
35+
36+
virtual int preferred_id() = 0;
37+
virtual void set_preferred_id(int value) = 0;
38+
39+
virtual bool preferred_encrypt() = 0;
40+
virtual void set_preferred_encrypt(bool value) = 0;
41+
};
42+
43+
class RTCRtpCapabilities : public RefCountInterface {
44+
public:
45+
virtual const vector<scoped_refptr<RTCRtpCodecCapability>> codecs() = 0;
46+
virtual void set_codecs(
47+
const vector<scoped_refptr<RTCRtpCodecCapability>> codecs) = 0;
48+
49+
virtual const vector<scoped_refptr<RTCRtpHeaderExtensionCapability>>
50+
header_extensions() = 0;
51+
52+
virtual void set_header_extensions(
53+
const vector<scoped_refptr<RTCRtpHeaderExtensionCapability>>
54+
header_extensions) = 0;
55+
56+
//virtual const vector<scoped_refptr<RTCFecMechanism>> fec() = 0;
57+
//virtual void set_fec(const vector<scoped_refptr<RTCFecMechanism>> fec) = 0;
58+
};
59+
60+
} // namespace libwebrtc
61+
62+
#endif // LIB_WBBRTC_RTC_RTP_CAPABILITIES_HXX

include/rtc_rtp_parameters.h

Lines changed: 3 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -59,73 +59,6 @@ class RTCRtcpFeedback : public RefCountInterface {
5959
virtual bool operator!=(scoped_refptr<RTCRtcpFeedback> o) = 0;
6060
};
6161

62-
/* class RTCRtpCodecCapability : public RefCountInterface {
63-
virtual const string mine_type() const = 0;
64-
65-
virtual const string name() = 0;
66-
67-
virtual void set_name(const string name) = 0;
68-
69-
virtual RTCMediaType kind() = 0;
70-
virtual void set_kind(RTCMediaType value) = 0;
71-
72-
virtual int clock_rate() = 0;
73-
virtual void set_clock_rate(int value) = 0;
74-
75-
virtual int preferred_payload_type() = 0;
76-
virtual void set_preferred_payload_type(int value) = 0;
77-
78-
virtual int max_ptime() = 0;
79-
virtual void set_max_ptime(int value) = 0;
80-
81-
virtual int ptime() = 0;
82-
virtual void set_ptime(int value) = 0;
83-
84-
virtual int num_channels() = 0;
85-
virtual void set_num_channels(int value) = 0;
86-
87-
virtual vector<scoped_refptr<RTCRtcpFeedback>> rtcp_feedback() = 0;
88-
virtual void set_rtcp_feedback(vector<scoped_refptr<RTCRtcpFeedback>>
89-
rtcp_feecbacks) = 0;
90-
91-
virtual const map<string,string> parameters() = 0;
92-
virtual void set_parameters(const map<string, string> parameters) = 0;
93-
94-
virtual const map<string, string> ptions() = 0;
95-
virtual void set_options(map<string, string> options) = 0;
96-
97-
virtual int max_temporal_layer_extensions() = 0;
98-
virtual void set_max_temporal_layer_extensions(int value) = 0;
99-
100-
virtual int max_spatial_layer_extensions() = 0;
101-
virtual void set_max_spatial_layer_extensions(int value) = 0;
102-
103-
virtual bool svc_multi_stream_support() = 0;
104-
virtual void set_svc_multi_stream_support(bool value) = 0;
105-
106-
virtual bool operator==(scoped_refptr<RTCRtpCodecCapability> o) const = 0;
107-
virtual bool operator!=(scoped_refptr<RTCRtpCodecCapability> o) const = 0;
108-
};*/
109-
110-
class RTCRtpHeaderExtensionCapability : public RefCountInterface {
111-
virtual const string uri() = 0;
112-
virtual void set_uri(const string uri) = 0;
113-
114-
virtual int preferred_id() = 0;
115-
virtual void set_preferred_id(int value) = 0;
116-
117-
virtual bool preferred_encrypt() = 0;
118-
virtual void set_preferred_encrypt(bool value) = 0;
119-
120-
virtual RTCRtpTransceiverDirection direction() = 0;
121-
virtual void set_direction(RTCRtpTransceiverDirection value) = 0;
122-
123-
virtual bool operator==(
124-
scoped_refptr<RTCRtpHeaderExtensionCapability> o) const = 0;
125-
virtual bool operator!=(
126-
scoped_refptr<RTCRtpHeaderExtensionCapability> o) const = 0;
127-
};
128-
12962
class RTCRtpExtension : public RefCountInterface {
13063
public:
13164
enum RTCFilter {
@@ -201,27 +134,10 @@ class RTCRtpCodecParameters : public RefCountInterface {
201134

202135
virtual bool operator==(scoped_refptr<RTCRtpCodecParameters> o) = 0;
203136
virtual bool operator!=(scoped_refptr<RTCRtpCodecParameters> o) = 0;
204-
};
205-
206-
/*
207-
class RTCRtpCapabilities : public RefCountInterface {
208-
virtual const vector<scoped_refptr<RTCRtpCodecCapability>> codecs() = 0;
209-
virtual void set_codecs(
210-
const vector<scoped_refptr<RTCRtpCodecCapability>> codecs) = 0;
211137

212-
virtual const vector<scoped_refptr<RTCRtpHeaderExtensionCapability>>
213-
header_extensions() = 0;
214-
215-
virtual void set_header_extensions(
216-
const vector<scoped_refptr<RTCRtpHeaderExtensionCapability>>
217-
header_extensions) = 0;
218-
219-
virtual const vector<scoped_refptr<RTCFecMechanism>> fec() = 0;
220-
virtual void set_fec(const vector<scoped_refptr<RTCFecMechanism>> fec) = 0;
221-
222-
virtual bool operator==(scoped_refptr<RTCRtpCapabilities> o) = 0;
223-
virtual bool operator!=(scoped_refptr<RTCRtpCapabilities> o) = 0;
224-
};*/
138+
protected:
139+
virtual ~RTCRtpCodecParameters() {}
140+
};
225141

226142
class RTCRtcpParameters : public RefCountInterface {
227143
public:

include/rtc_rtp_transceiver.h

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
#define LIB_WEBRTC_RTC_RTP_TRANSCEIVER_HXX
33

44
#include "base/refcount.h"
5+
#include "rtc_rtp_capabilities.h"
56
#include "rtc_rtp_parameters.h"
67
#include "rtc_rtp_receiver.h"
78
#include "rtc_rtp_sender.h"
@@ -55,19 +56,8 @@ class RTCRtpTransceiver : public RefCountInterface {
5556

5657
virtual void StopInternal() = 0;
5758

58-
// virtual string set_codec_preferences(vector<RTCRtpCodecCapability> codecs)
59-
// = 0;
60-
61-
// virtual vector<RTCRtpCodecCapability> codec_preferences() const = 0;
62-
63-
// virtual vector<RTCRtpHeaderExtensionCapability> HeaderExtensionsToOffer()
64-
// const = 0;
65-
66-
// virtual std::vector<RTCRtpHeaderExtensionCapability>
67-
// HeaderExtensionsNegotiated() const = 0;
68-
69-
// virtual webrtc::RTCError SetOfferedRtpHeaderExtensions(vector<const
70-
// RTCRtpHeaderExtensionCapability> header_extensions_to_offer);
59+
virtual void SetCodecPreferences(
60+
vector<scoped_refptr<RTCRtpCodecCapability>> codecs) = 0;
7161
};
7262

7363
} // namespace libwebrtc

src/rtc_peerconnection_factory_impl.cc

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,11 @@
33
#include "rtc_media_stream_impl.h"
44
#include "rtc_mediaconstraints_impl.h"
55
#include "rtc_peerconnection_impl.h"
6+
#include "rtc_rtp_capabilities_impl.h"
67
#include "rtc_video_device_impl.h"
78
#include "rtc_video_source_impl.h"
89

10+
911
#include "api/audio_codecs/builtin_audio_decoder_factory.h"
1012
#include "api/audio_codecs/builtin_audio_encoder_factory.h"
1113
#include "api/create_peerconnection_factory.h"
@@ -296,4 +298,61 @@ scoped_refptr<RTCAudioTrack> RTCPeerConnectionFactoryImpl::CreateAudioTrack(
296298
return track;
297299
}
298300

301+
scoped_refptr<RTCRtpCapabilities>
302+
RTCPeerConnectionFactoryImpl::GetRtpSenderCapabilities(
303+
RTCMediaType media_type) {
304+
if (rtc::Thread::Current() != signaling_thread_) {
305+
scoped_refptr<RTCRtpCapabilities> capabilities =
306+
signaling_thread_->Invoke<scoped_refptr<RTCRtpCapabilities>>(
307+
RTC_FROM_HERE, [this, media_type] {
308+
return GetRtpSenderCapabilities(media_type);
309+
});
310+
return capabilities;
311+
}
312+
313+
cricket::MediaType type = cricket::MediaType::MEDIA_TYPE_AUDIO;
314+
switch (media_type) {
315+
case RTCMediaType::AUDIO:
316+
type = cricket::MediaType::MEDIA_TYPE_AUDIO;
317+
break;
318+
case RTCMediaType::VIDEO:
319+
type = cricket::MediaType::MEDIA_TYPE_VIDEO;
320+
break;
321+
default:
322+
break;
323+
}
324+
webrtc::RtpCapabilities rtp_capabilities =
325+
rtc_peerconnection_factory_->GetRtpSenderCapabilities(type);
326+
return scoped_refptr<RTCRtpCapabilities>(
327+
new RefCountedObject<RTCRtpCapabilitiesImpl>(rtp_capabilities));
328+
}
329+
330+
scoped_refptr<RTCRtpCapabilities>
331+
RTCPeerConnectionFactoryImpl::GetRtpReceiverCapabilities(
332+
RTCMediaType media_type) {
333+
if (rtc::Thread::Current() != signaling_thread_) {
334+
scoped_refptr<RTCRtpCapabilities> capabilities =
335+
signaling_thread_->Invoke<scoped_refptr<RTCRtpCapabilities>>(
336+
RTC_FROM_HERE, [this, media_type] {
337+
return GetRtpSenderCapabilities(media_type);
338+
});
339+
return capabilities;
340+
}
341+
cricket::MediaType type = cricket::MediaType::MEDIA_TYPE_AUDIO;
342+
switch (media_type) {
343+
case RTCMediaType::AUDIO:
344+
type = cricket::MediaType::MEDIA_TYPE_AUDIO;
345+
break;
346+
case RTCMediaType::VIDEO:
347+
type = cricket::MediaType::MEDIA_TYPE_VIDEO;
348+
break;
349+
default:
350+
break;
351+
}
352+
webrtc::RtpCapabilities rtp_capabilities =
353+
rtc_peerconnection_factory_->GetRtpReceiverCapabilities(type);
354+
return scoped_refptr<RTCRtpCapabilities>(
355+
new RefCountedObject<RTCRtpCapabilitiesImpl>(rtp_capabilities));
356+
}
357+
299358
} // namespace libwebrtc

src/rtc_peerconnection_factory_impl.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,12 @@ class RTCPeerConnectionFactoryImpl : public RTCPeerConnectionFactory {
7272
return rtc_peerconnection_factory_;
7373
}
7474

75+
scoped_refptr<RTCRtpCapabilities> GetRtpSenderCapabilities(
76+
RTCMediaType media_type) override;
77+
78+
scoped_refptr<RTCRtpCapabilities> GetRtpReceiverCapabilities(
79+
RTCMediaType media_type) override;
80+
7581
protected:
7682
void CreateAudioDeviceModule_w();
7783

0 commit comments

Comments
 (0)