[feat] add video adaptation preference setting

This commit is contained in:
dijunkun
2026-09-02 01:05:30 +08:00
parent 58f2daa9c1
commit b7e1adbec6
14 changed files with 203 additions and 6 deletions
@@ -35,6 +35,12 @@ typedef NS_ENUM(NSInteger, CrossDeskPointerAction) {
CrossDeskPointerActionMiddleUp,
};
typedef NS_ENUM(NSInteger, CrossDeskVideoAdaptationPolicy) {
CrossDeskVideoAdaptationPolicyFrameRatePriority = 0,
CrossDeskVideoAdaptationPolicyQualityPriority,
CrossDeskVideoAdaptationPolicyBalanced,
};
@class CrossDeskRTCBridge;
@protocol CrossDeskRTCBridgeDelegate <NSObject>
@@ -96,6 +102,7 @@ typedef NS_ENUM(NSInteger, CrossDeskPointerAction) {
turnPort:(NSInteger)turnPort
enableSRTP:(BOOL)enableSRTP;
- (void)setHardwareAccelerationEnabled:(BOOL)enabled;
- (void)setVideoAdaptationPolicy:(CrossDeskVideoAdaptationPolicy)policy;
- (void)requestPresenceForRemoteIDs:(NSArray<NSString *> *)remoteIDs
NS_SWIFT_NAME(requestPresence(remoteIDs:));
@@ -72,6 +72,8 @@ struct RTCState {
int turn_port = 0;
bool enable_srtp = false;
bool hardware_acceleration = true;
VideoDegradationPreference video_adaptation_policy =
VideoDegradationPreference::MaintainResolution;
bool identity_ready = false;
bool identity_recovery_attempted = false;
std::string identity_with_password;
@@ -334,8 +336,7 @@ Params MakeParams(const RTCState &state, const std::string &user_id,
params.video_content_type = VideoContentType::ScreenContent;
params.video_quality = VideoQuality::QualityHigh;
params.video_frame_rate = 60;
params.video_degradation_preference =
VideoDegradationPreference::MaintainResolution;
params.video_degradation_preference = state.video_adaptation_policy;
params.on_receive_video_buffer = nullptr;
params.on_receive_audio_buffer = OnAudioBuffer;
params.on_receive_data_buffer = OnDataBuffer;
@@ -496,6 +497,26 @@ Params MakeParams(const RTCState &state, const std::string &user_id,
});
}
- (void)setVideoAdaptationPolicy:(CrossDeskVideoAdaptationPolicy)policy {
dispatch_async(_rtcQueue, ^{
switch (policy) {
case CrossDeskVideoAdaptationPolicyFrameRatePriority:
self->_state->video_adaptation_policy =
VideoDegradationPreference::MaintainFrameRate;
break;
case CrossDeskVideoAdaptationPolicyBalanced:
self->_state->video_adaptation_policy =
VideoDegradationPreference::Balanced;
break;
case CrossDeskVideoAdaptationPolicyQualityPriority:
default:
self->_state->video_adaptation_policy =
VideoDegradationPreference::MaintainResolution;
break;
}
});
}
- (void)requestPresenceForRemoteIDs:(NSArray<NSString *> *)remoteIDs {
NSArray<NSString *> *owned_ids = [remoteIDs copy];
dispatch_async(_rtcQueue, ^{