rffi: Set a bandwidth limit on the lowest layer of a group call

This commit is contained in:
Jordan Rose 2023-03-13 13:15:00 -07:00
parent 19492d2279
commit e84a116428
2 changed files with 14 additions and 4 deletions

View file

@ -66,6 +66,12 @@ typedef struct {
size_t urls_size;
} RffiIceServer;
enum class RffiPeerConnectionKind: uint8_t {
kDirect,
kRelayed,
kGroupCall,
};
// Returns an owned RC.
// You can create more than one, but you should probably only have one unless
// you want to test separate endpoints that are as independent as possible.
@ -85,7 +91,7 @@ RUSTEXPORT webrtc::rffi::InjectableNetwork* Rust_getInjectableNetwork(
RUSTEXPORT webrtc::PeerConnectionInterface* Rust_createPeerConnection(
webrtc::PeerConnectionFactoryOwner* factory_owner_borrowed_rc,
webrtc::rffi::PeerConnectionObserverRffi* observer_borrowed,
bool hide_ip,
RffiPeerConnectionKind kind,
RffiIceServer ice_server,
webrtc::AudioTrackInterface* outgoing_audio_track_borrowed_rc,
webrtc::VideoTrackInterface* outgoing_video_track_borrowed_rc);

View file

@ -296,7 +296,7 @@ RUSTEXPORT PeerConnectionFactoryOwner* Rust_createPeerConnectionFactoryWrapper(
RUSTEXPORT PeerConnectionInterface* Rust_createPeerConnection(
PeerConnectionFactoryOwner* factory_owner_borrowed_rc,
PeerConnectionObserverRffi* observer_borrowed,
bool hide_ip,
RffiPeerConnectionKind kind,
RffiIceServer ice_server,
webrtc::AudioTrackInterface* outgoing_audio_track_borrowed_rc,
webrtc::VideoTrackInterface* outgoing_video_track_borrowed_rc) {
@ -306,7 +306,7 @@ RUSTEXPORT PeerConnectionInterface* Rust_createPeerConnection(
config.bundle_policy = PeerConnectionInterface::kBundlePolicyMaxBundle;
config.rtcp_mux_policy = PeerConnectionInterface::kRtcpMuxPolicyRequire;
config.tcp_candidate_policy = PeerConnectionInterface::kTcpCandidatePolicyDisabled;
if (hide_ip) {
if (kind == RffiPeerConnectionKind::kRelayed) {
config.type = PeerConnectionInterface::kRelay;
}
config.sdp_semantics = SdpSemantics::kPlanB_DEPRECATED;
@ -358,7 +358,11 @@ RUSTEXPORT PeerConnectionInterface* Rust_createPeerConnection(
}
if (outgoing_video_track_borrowed_rc) {
auto result = pc->AddTrack(inc_rc(outgoing_video_track_borrowed_rc), stream_ids);
std::vector<webrtc::RtpEncodingParameters> rtp_parameters = {{}};
if (kind == RffiPeerConnectionKind::kGroupCall) {
rtp_parameters[0].max_bitrate_bps = 100000;
}
auto result = pc->AddTrack(inc_rc(outgoing_video_track_borrowed_rc), stream_ids, rtp_parameters);
if (result.ok()) {
if (observer_borrowed->enable_frame_encryption()) {
auto rtp_sender = result.MoveValue();