rtmp、rtc推拉流支持加密

This commit is contained in:
caleb
2026-04-07 16:35:04 +08:00
parent bc56b7851d
commit 88800334ec
19 changed files with 370 additions and 147 deletions

View File

@@ -4,15 +4,11 @@
//
#import "AVUserManager.h"
#import <AFNetworking/AFNetworking.h>
#import "AVApiService.h"
static NSString * const kUserLoggedInKey = @"AVUserLoggedIn";
static NSString * const kUserUsernameKey = @"AVUserUsername";
@interface AVUserManager ()
@property (nonatomic, strong) AFHTTPSessionManager *sessionManager;
@end
@implementation AVUserManager
+ (instancetype)sharedManager {
@@ -27,15 +23,8 @@ static NSString * const kUserUsernameKey = @"AVUserUsername";
- (instancetype)init {
self = [super init];
if (self) {
// UserDefaults
_isLoggedIn = [[NSUserDefaults standardUserDefaults] boolForKey:kUserLoggedInKey];
_currentUsername = [[NSUserDefaults standardUserDefaults] stringForKey:kUserUsernameKey];
//
self.sessionManager = [AFHTTPSessionManager manager];
self.sessionManager.responseSerializer = [AFJSONResponseSerializer serializer];
self.sessionManager.requestSerializer = [AFJSONRequestSerializer serializer];
self.sessionManager.requestSerializer.timeoutInterval = 10;
}
return self;
}
@@ -43,89 +32,24 @@ static NSString * const kUserUsernameKey = @"AVUserUsername";
- (void)loginWithUsername:(NSString *)username
password:(NSString *)password
completion:(void (^)(BOOL success, NSString * _Nullable errorMessage))completion {
//
if (username.length == 0) {
if (completion) {
completion(NO, @"用户名不能为空");
}
if (completion) completion(NO, @"用户名不能为空");
return;
}
if (password.length == 0) {
if (completion) {
completion(NO, @"密码不能为空");
}
if (completion) completion(NO, @"密码不能为空");
return;
}
// API
NSString *loginURL = @"http://rtmp.sellycloud.io:8089/live/sdk/demo/login";
//
NSDictionary *parameters = @{
@"username": username,
@"password": password
};
NSLog(@"🚀 开始登录请求: %@", username);
// POST
[self.sessionManager POST:loginURL parameters:parameters headers:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
//
NSLog(@"✅ 登录成功,服务器响应: %@", responseObject);
//
[self saveLoginStateWithUsername:username];
// tokenuserId
//
// if (responseObject[@"token"]) {
// [[NSUserDefaults standardUserDefaults] setObject:responseObject[@"token"] forKey:@"AVUserToken"];
// }
//
if (completion) {
completion(YES, nil);
[[AVApiService shared] loginWithUsername:username password:password
success:^(id responseObject) {
[self saveLoginStateWithUsername:username];
if (completion) completion(YES, nil);
}
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
//
NSLog(@"❌ 登录失败: %@", error.localizedDescription);
NSString *errorMessage = @"登录失败,请检查用户名和密码";
// HTTP
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)task.response;
if (httpResponse) {
NSLog(@"❌ HTTP 状态码: %ld", (long)httpResponse.statusCode);
}
//
if (error.userInfo[AFNetworkingOperationFailingURLResponseDataErrorKey]) {
NSData *errorData = error.userInfo[AFNetworkingOperationFailingURLResponseDataErrorKey];
NSDictionary *errorDict = [NSJSONSerialization JSONObjectWithData:errorData options:0 error:nil];
NSLog(@"❌ 服务器错误响应: %@", errorDict);
//
if (errorDict[@"message"]) {
errorMessage = errorDict[@"message"];
} else if (errorDict[@"error"]) {
errorMessage = errorDict[@"error"];
} else if (errorDict[@"msg"]) {
errorMessage = errorDict[@"msg"];
}
} else {
//
errorMessage = [NSString stringWithFormat:@"网络请求失败: %@", error.localizedDescription];
}
//
if (completion) {
completion(NO, errorMessage);
}
}];
failure:^(NSError *error, NSString *serverMessage) {
NSString *msg = serverMessage ?: [NSString stringWithFormat:@"网络请求失败: %@", error.localizedDescription];
if (completion) completion(NO, msg);
}];
}
- (void)saveLoginStateWithUsername:(NSString *)username {