realtime bitrate adjustment with Sunshine-Foundation (experimental)

This commit is contained in:
TrueZhuanjia
2025-08-25 10:07:38 +08:00
parent e10691e2b7
commit 31ab333f5b
5 changed files with 41 additions and 1 deletions
+1
View File
@@ -29,6 +29,7 @@
- (NSURLRequest*) newLaunchOrResumeRequest:(NSString*)verb config:(StreamConfiguration*)config;
- (NSURLRequest*) newQuitAppRequest;
- (NSURLRequest*) newAppAssetRequestWithAppId:(NSString*)appId;
- (NSURLRequest*) newBirateRequest:(NSInteger)bitrateKbps forClient:(NSString* )clientName;
- (void) executeRequestSynchronously:(HttpRequest*)request;
@end
+14
View File
@@ -231,6 +231,7 @@
}
NSString* urlString = [NSString stringWithFormat:@"%@/applist?uniqueid=%@", _baseHTTPSURL, _uniqueId];
NSLog(@"urlString: %@", urlString);
return [self createRequestFromString:urlString timeout:NORMAL_TIMEOUT_SEC];
}
@@ -292,9 +293,22 @@
}
NSString* urlString = [NSString stringWithFormat:@"%@/cancel?uniqueid=%@", _baseHTTPSURL, _uniqueId];
NSLog(@"urlString print: %@", urlString);
return [self createRequestFromString:urlString timeout:LONG_TIMEOUT_SEC];
}
- (NSURLRequest*)newBirateRequest:(NSInteger)bitrateKbps forClient:(NSString* )clientName {
if (![self ensureHttpsUrlPopulated:NO]) {
return nil;
}
NSString* urlString = [NSString stringWithFormat:@"%@/bitrate?clientname=%@&bitrate=%@&uniqueid=%@", _baseHTTPSURL, clientName, [NSString stringWithFormat:@"%ld", (long)bitrateKbps], _uniqueId];
NSLog(@"bitrate urlString print: %@", urlString);
return [self createRequestFromString:urlString timeout:LONG_TIMEOUT_SEC];
}
- (NSURLRequest*) newAppAssetRequestWithAppId:(NSString *)appId {
if (![self ensureHttpsUrlPopulated:NO]) {
return nil;
@@ -34,6 +34,7 @@
- (void)reloadStreamConfig;
- (bool)isIPhonePortrait;
- (void)quitRunningApp;
- (NSInteger)requestForBitrate:(NSInteger)bitrateKbps;
#endif
- (void)fillResolutionTable:(CGSize*)resolutionTable externalDisplayMode:(NSInteger)externalDisplayMode;
@@ -915,6 +915,15 @@ static NSMutableSet* hostList;
#endif
}
- (NSInteger)requestForBitrate:(NSInteger)bitrateKbps{
HttpManager* hMan = [[HttpManager alloc] initWithHost:launchedApp.host];
HttpResponse* bitrateResponse = [[HttpResponse alloc] init];
HttpRequest* bitrateRequest = [HttpRequest requestForResponse: bitrateResponse withUrlRequest:[hMan newBirateRequest:bitrateKbps forClient:@"unknown"]];
[hMan executeRequestSynchronously:bitrateRequest];
NSLog(@"bitrate request status code: %ld", (long)bitrateResponse.statusCode);
return bitrateResponse.statusCode;
}
- (HttpResponse* )requestToQuitApp:(TemporaryApp* )app{
HttpManager* hMan = [[HttpManager alloc] initWithHost:app.host];
HttpResponse* quitResponse = [[HttpResponse alloc] init];
@@ -1168,7 +1177,7 @@ static NSMutableSet* hostList;
[streamFrameViewController setUserInteractionEnabledForStreamView:!_settingsExpandedInStreamView || position == FrontViewPositionLeft];
[settingsViewController setHidden:_settingsExpandedInStreamView forStack:settingsViewController.resolutionStack];
[settingsViewController setHidden:_settingsExpandedInStreamView forStack:settingsViewController.fpsStack];
[settingsViewController widget:settingsViewController.bitrateSlider setEnabled:!self.settingsExpandedInStreamView];
// [settingsViewController widget:settingsViewController.bitrateSlider setEnabled:!self.settingsExpandedInStreamView];
[settingsViewController setHidden:_settingsExpandedInStreamView forStack:settingsViewController.optimizeGamesStack];
[settingsViewController setHidden:_settingsExpandedInStreamView forStack:settingsViewController.audioOnPcStack];
[settingsViewController.codecSelector setEnabled:!_settingsExpandedInStreamView];
@@ -292,6 +292,15 @@ BOOL isCustomResolution(int resolutionSelected) {
selector:@selector(deviceOrientationDidChange:) // handle orientation change since i made portrait mode available
name:UIDeviceOrientationDidChangeNotification
object:nil];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
if(self.mainFrameViewController.settingsExpandedInStreamView){
NSInteger responseCode = [self.mainFrameViewController requestForBitrate:self->_bitrate];
dispatch_async(dispatch_get_main_queue(), ^{
[self widget:self.bitrateSlider setEnabled:responseCode == 200];
});
}
});
}
- (void)viewDidAppear:(BOOL)animated{
@@ -1785,6 +1794,7 @@ BOOL isCustomResolution(int resolutionSelected) {
[touchAndControlSection updateViewForFoldState];
}
- (void) updateBitrate {
NSInteger fps = [self getChosenFrameRate];
NSInteger width = [self getChosenStreamWidth];
@@ -2111,6 +2121,11 @@ BOOL isCustomResolution(int resolutionSelected) {
}
- (void) saveSettings {
if(self.mainFrameViewController.settingsExpandedInStreamView){
[self.mainFrameViewController requestForBitrate:(uint32_t)_bitrate];
}
DataManager* dataMan = [[DataManager alloc] init];
Settings* currentSettings = [dataMan retrieveSettings];