Commit c5784b21 by 徐利超

update 多人音视频demo 完成

parent b1ccf7e8
......@@ -65,6 +65,9 @@
40F6FA6223D6CCCF00EC3737 /* NMCBasicModuleFramework.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 40F6F9D723D6A08A00EC3737 /* NMCBasicModuleFramework.framework */; };
40F6FA6323D6CCCF00EC3737 /* NMCBasicModuleFramework.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 40F6F9D723D6A08A00EC3737 /* NMCBasicModuleFramework.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
40F6FA7623D6E58E00EC3737 /* MutiFaceViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 40F6FA7523D6E58E00EC3737 /* MutiFaceViewController.m */; };
40F6FA7B23E8285300EC3737 /* nim_server .conf in Resources */ = {isa = PBXBuildFile; fileRef = 40F6FA7A23E8285300EC3737 /* nim_server .conf */; };
40F6FA7E23E973F500EC3737 /* MutiFaceContainerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 40F6FA7D23E973F500EC3737 /* MutiFaceContainerView.m */; };
40F6FA8023E97F0300EC3737 /* Settings.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 40F6FA7F23E97F0300EC3737 /* Settings.bundle */; };
901AFCC6973CC2B29B1AFF5C /* Pods_MutiFaceDemo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9E636B910955FD5DD32F0DCE /* Pods_MutiFaceDemo.framework */; };
/* End PBXBuildFile section */
......@@ -201,6 +204,10 @@
40F6FA3F23D6B36A00EC3737 /* ijksdl_timer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ijksdl_timer.c; sourceTree = "<group>"; };
40F6FA7423D6E58E00EC3737 /* MutiFaceViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MutiFaceViewController.h; sourceTree = "<group>"; };
40F6FA7523D6E58E00EC3737 /* MutiFaceViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MutiFaceViewController.m; sourceTree = "<group>"; };
40F6FA7A23E8285300EC3737 /* nim_server .conf */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "nim_server .conf"; sourceTree = "<group>"; };
40F6FA7C23E973F500EC3737 /* MutiFaceContainerView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MutiFaceContainerView.h; sourceTree = "<group>"; };
40F6FA7D23E973F500EC3737 /* MutiFaceContainerView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MutiFaceContainerView.m; sourceTree = "<group>"; };
40F6FA7F23E97F0300EC3737 /* Settings.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = Settings.bundle; sourceTree = "<group>"; };
9E636B910955FD5DD32F0DCE /* Pods_MutiFaceDemo.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_MutiFaceDemo.framework; sourceTree = BUILT_PRODUCTS_DIR; };
E8FDB7899269DB88599AB6D9 /* Pods-MutiFaceDemo.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MutiFaceDemo.debug.xcconfig"; path = "Target Support Files/Pods-MutiFaceDemo/Pods-MutiFaceDemo.debug.xcconfig"; sourceTree = "<group>"; };
/* End PBXFileReference section */
......@@ -271,6 +278,8 @@
40F6F99523D696CF00EC3737 /* MutiFaceDemo */ = {
isa = PBXGroup;
children = (
40F6FA7F23E97F0300EC3737 /* Settings.bundle */,
40F6FA7A23E8285300EC3737 /* nim_server .conf */,
40F6F9D123D6A08A00EC3737 /* ThirdPartLibs */,
40F6F9CB23D6987D00EC3737 /* Application */,
40F6F99623D696CF00EC3737 /* AppDelegate.h */,
......@@ -319,6 +328,8 @@
children = (
40F6FA7423D6E58E00EC3737 /* MutiFaceViewController.h */,
40F6FA7523D6E58E00EC3737 /* MutiFaceViewController.m */,
40F6FA7C23E973F500EC3737 /* MutiFaceContainerView.h */,
40F6FA7D23E973F500EC3737 /* MutiFaceContainerView.m */,
);
path = faceViewController;
sourceTree = "<group>";
......@@ -666,9 +677,11 @@
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
40F6FA7B23E8285300EC3737 /* nim_server .conf in Resources */,
40F6F9DB23D6A08A00EC3737 /* NMCVideoFilter.bundle in Resources */,
40F6F9A623D696D600EC3737 /* LaunchScreen.storyboard in Resources */,
40F6F9A323D696D600EC3737 /* Assets.xcassets in Resources */,
40F6FA8023E97F0300EC3737 /* Settings.bundle in Resources */,
40F6F9A123D696CF00EC3737 /* Main.storyboard in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
......@@ -752,6 +765,7 @@
40F6FA4823D6B36A00EC3737 /* NTESPinyinConverter.m in Sources */,
40F6FA4023D6B36A00EC3737 /* MBProgressHUD.m in Sources */,
40F6FA5023D6B36A00EC3737 /* renderer_yuv420p.c in Sources */,
40F6FA7E23E973F500EC3737 /* MutiFaceContainerView.m in Sources */,
40F6FA5423D6B36A00EC3737 /* yuv444p10le.fsh.c in Sources */,
40F6FA4123D6B36A00EC3737 /* UIView+NTES.m in Sources */,
40F6FA4623D6B36A00EC3737 /* NTESBundleSetting.m in Sources */,
......
......@@ -10,7 +10,10 @@
#import <NIMSDK/NIMSDK.h>
#import "LoginViewController.h"
#define NIMAppKey @"4ea930ab3d6fb1f3613e9877332c9dd9"
//本地化key
//#define NIMAppKey @"b6c92438c06f98a909ae45bf21bf2842"
@interface AppDelegate ()
......
//
// MutiFaceContainerView.h
// MutiFaceDemo
//
// Created by Xu Lichao on 2020/2/4.
// Copyright © 2020 Yuwei. All rights reserved.
//
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
@interface MutiFaceContainerView : UIView
- (void)refreshWithRemoteView:(UIView *)remoteView;
@end
NS_ASSUME_NONNULL_END
//
// MutiFaceContainerView.m
// MutiFaceDemo
//
// Created by Xu Lichao on 2020/2/4.
// Copyright © 2020 Yuwei. All rights reserved.
//
#import "MutiFaceContainerView.h"
@interface MutiFaceContainerView ()
@property (nonatomic, strong) UIView *remoteView;
@end
@implementation MutiFaceContainerView
- (instancetype)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self)
{
self.backgroundColor = [UIColor clearColor];
self.remoteView = [[UIView alloc] initWithFrame:self.bounds];
[self addSubview:self.remoteView];
}
return self;
}
- (void)refreshWithRemoteView:(UIView *)remoteView
{
if (_remoteView != remoteView) {
[_remoteView removeFromSuperview];
_remoteView = remoteView;
if (remoteView) {
remoteView.frame = self.bounds;
remoteView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
[self addSubview:remoteView];
}
}
}
@end
......@@ -9,6 +9,7 @@
#import "MutiFaceViewController.h"
#import "NTESBundleSetting.h"
#import "UIAlertView+NTESBlock.h"
#import "MutiFaceContainerView.h"
//网易云相关
#define NTES_USE_CLEAR_BAR - (BOOL)useClearBar{return YES;}
......@@ -33,6 +34,9 @@ dispatch_async(dispatch_get_main_queue(), block);\
@property (nonatomic, strong) UIView *videoView;
@property (nonatomic, strong) UIButton *hangupBtn;
@property (nonatomic, strong) UIView *localView;
@property (nonatomic, strong) UIView *remoteView;
//会议
......@@ -50,6 +54,7 @@ dispatch_async(dispatch_get_main_queue(), block);\
[self setupUI];
self.meeting = [self makeMeeting];
_meeting.name = self.roomName;
[self baseStep];
}
- (void)setupUI
......@@ -58,16 +63,35 @@ dispatch_async(dispatch_get_main_queue(), block);\
[self.view addSubview:self.videoView];
[self.view addSubview:self.hangupBtn];
CGFloat size = SCREEN_WIDTH / 2;
// [self.view addSubview:self.remoteView];
// [self.view addSubview:self.localView];
for (NSInteger i = 0; i < 4; ++i) {
NSInteger x = i % 2;
NSInteger y = i / 2;
UIView *sizeView = [[UIView alloc] initWithFrame:CGRectMake(x * size, y *size, size, size)];
MutiFaceContainerView *sizeView = [[MutiFaceContainerView alloc] initWithFrame:CGRectMake(x * size, y *size, size, size)];
sizeView.tag = 100 + i;
[self.view addSubview:sizeView];
}
}
- (void)baseStep
{
[self checkServiceEnable:^(BOOL enable) {
if (enable) {
if (self.needCreate) {
[self reserveMeetting];
}else {
[self joinMeeting];
}
[self addListeners];
}else {
[self dismissViewControllerAnimated:YES completion:nil];
}
}];
}
#pragma mark - methods
- (void)leaveRoomWithInfo:(NSString *)info
{
......@@ -90,6 +114,22 @@ dispatch_async(dispatch_get_main_queue(), block);\
return isExist;
}
- (NSInteger)findUserIndex:(NSString *)uid
{
NSInteger index = 100;
for (NSString *existUid in self.userArray) {
if ([uid isEqualToString:existUid]) {
break;
}else {
index++;
}
}
if (index >= 100 + self.userArray.count) {
return -1;
}
return index;
}
#pragma mark - NIM相关
- (void)checkServiceEnable:(void(^)(BOOL))result{
......@@ -256,16 +296,29 @@ dispatch_async(dispatch_get_main_queue(), block);\
- (void)onLocalDisplayviewReady:(UIView *)displayView
{
MutiFaceContainerView *containerView = (MutiFaceContainerView *)[self.view viewWithTag:100];
[containerView refreshWithRemoteView:displayView];
// displayView.frame = self.localView.bounds;
// [self.localView addSubview:displayView];
}
- (void)onRemoteDisplayviewReady:(UIView *)displayView user:(NSString *)user
{
// displayView.frame = self.remoteView.bounds;
// [self.remoteView addSubview:displayView];
if (![self findUserExist:user]) {
[self.userArray addObject:user];
}
NSInteger tag = [self findUserIndex:user];
if (tag != -1) {
MutiFaceContainerView *containerView = (MutiFaceContainerView *)[self.view viewWithTag:tag];
[containerView refreshWithRemoteView:displayView];
}
}
#pragma mark - meeting set
- (NIMNetCallMeeting *)makeMeeting
{
......@@ -285,13 +338,12 @@ dispatch_async(dispatch_get_main_queue(), block);\
- (void)fillUserSetting:(NIMNetCallOption *)option
{
option.autoRotateRemoteVideo = [[NTESBundleSetting sharedConfig] videochatAutoRotateRemoteVideo];
option.remoteViewoShowType = NIMNetCallRemoteVideoShowTypeYuvData;
NIMNetCallServerRecord *serverRecord = [[NIMNetCallServerRecord alloc] init];
serverRecord.enableServerAudioRecording = [[NTESBundleSetting sharedConfig] serverRecordAudio];
serverRecord.enableServerVideoRecording = [[NTESBundleSetting sharedConfig] serverRecordVideo];
serverRecord.enableServerHostRecording = [[NTESBundleSetting sharedConfig] serverRecordHost];
serverRecord.serverRecordingMode = [[NTESBundleSetting sharedConfig] serverRecordMode];
serverRecord.enableServerAudioRecording = YES;
serverRecord.enableServerVideoRecording = YES;
serverRecord.enableServerHostRecording = YES;
serverRecord.serverRecordingMode = NIMNetCallServerRecordModeDefault;
option.serverRecord = serverRecord;
......@@ -313,6 +365,8 @@ dispatch_async(dispatch_get_main_queue(), block);\
option.scene = [[NTESBundleSetting sharedConfig] scene];
NIMNetCallVideoCaptureParam *param = [[NIMNetCallVideoCaptureParam alloc] init];
//设置视频方向
param.videoCaptureOrientation = NIMVideoOrientationPortrait;
[self fillVideoCaptureSetting:param];
option.videoCaptureParam = param;
......@@ -357,4 +411,20 @@ dispatch_async(dispatch_get_main_queue(), block);\
return _userArray;
}
- (UIView *)localView
{
if (!_localView) {
_localView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH / 2, SCREEN_WIDTH / 2)];
}
return _localView;
}
- (UIView *)remoteView
{
if (!_remoteView) {
_remoteView = [[UIView alloc] initWithFrame:CGRectMake(SCREEN_WIDTH / 2, 0, SCREEN_WIDTH / 2, SCREEN_WIDTH / 2)];
}
return _remoteView;
}
@end
......@@ -75,7 +75,7 @@
- (void)user1Login
{
CHWEAKSELF
[[[NIMSDK sharedSDK] loginManager] login:@"hzyw1564536238433" token:@"e66363a51c4e260558c45da570248e56" completion:^(NSError * _Nullable error) {
[[[NIMSDK sharedSDK] loginManager] login:@"hzyw1564536238433" token:@"d59bf5af61a25e19e0719f22d53f9728" completion:^(NSError * _Nullable error) {
CHSTRONGSELF
if (error) {
TraceS(@"======>>>>>%@",error);
......@@ -107,7 +107,7 @@
- (void)user3Login
{
CHWEAKSELF
[[[NIMSDK sharedSDK] loginManager] login:@"hzyw1564538246299" token:@"2862bbc024662c2b8f9db0527ff4c085" completion:^(NSError * _Nullable error) {
[[[NIMSDK sharedSDK] loginManager] login:@"hzyw1564538246299" token:@"a3fc7f2d62cc7790728e6c710e9c3b01" completion:^(NSError * _Nullable error) {
CHSTRONGSELF
if (error) {
TraceS(@"%@",error);
......@@ -252,7 +252,7 @@
{
if (!_textField) {
_textField = [[UITextField alloc] initWithFrame:CGRectMake(20, 10, 200, 30)];
_textField.text = @"YWTestRoomName_1";
_textField.text = @"YWTestRoomName_2";
_textField.font = kFont(14);
_textField.layer.borderWidth = 1;
_textField.layer.borderColor = [UIColor blackColor].CGColor;
......
......@@ -22,6 +22,18 @@
<true/>
<key>UILaunchStoryboardName</key>
<string>LaunchScreen</string>
<key>NSCameraUsageDescription</key>
<string>亲,我们需要访问您的相机来拍摄身份证信息并上传以便核实信息,可以吗?</string>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>亲,我们需要访问您的位置信息来获取当前您正在进行面签的地点,可以吗?</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>亲,我们需要访问您的位置信息来获取当前您正在进行面签的地点,可以吗?</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>亲,我们需要访问您的位置信息来获取当前您正在进行面签的地点,可以吗?</string>
<key>NSMicrophoneUsageDescription</key>
<string>亲,我们需要访问您的麦克风以便同业务员进行通话和录制实时面签,可以吗?</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>亲,我们需要访问您的相册选取身份证照片并上传以便核实信息,可以吗?</string>
<key>UIRequiredDeviceCapabilities</key>
<array>
<string>armv7</string>
......
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>StringsTable</key>
<string>Root</string>
<key>PreferenceSpecifiers</key>
<array>
<dict>
<key>Type</key>
<string>PSGroupSpecifier</string>
<key>Title</key>
<string>API参数设置</string>
</dict>
<dict>
<key>Type</key>
<string>PSChildPaneSpecifier</string>
<key>Title</key>
<string>私有化配置</string>
<key>File</key>
<string>private</string>
</dict>
<dict>
<key>Type</key>
<string>PSToggleSwitchSpecifier</string>
<key>Title</key>
<string>删除所有消息时同时移除会话</string>
<key>Key</key>
<string>enabled_remove_recent_session</string>
<key>DefaultValue</key>
<false/>
</dict>
<dict>
<key>Type</key>
<string>PSTextFieldSpecifier</string>
<key>DefaultValue</key>
<string>7</string>
<key>Title</key>
<string>日志存在天数</string>
<key>Key</key>
<string>maximum_log_days</string>
</dict>
<dict>
<key>Type</key>
<string>PSToggleSwitchSpecifier</string>
<key>Title</key>
<string>删除所有消息时同时移除消息表</string>
<key>Key</key>
<string>enabled_drop_msg_table</string>
<key>DefaultValue</key>
<false/>
</dict>
<dict>
<key>Type</key>
<string>PSToggleSwitchSpecifier</string>
<key>Title</key>
<string>逆序查询消息记录</string>
<key>Key</key>
<string>local_search_time_order_desc</string>
<key>DefaultValue</key>
<false/>
</dict>
<dict>
<key>Type</key>
<string>PSToggleSwitchSpecifier</string>
<key>Title</key>
<string>删除会话时同时删除服务器会话</string>
<key>Key</key>
<string>auto_remove_remote_session</string>
<key>DefaultValue</key>
<false/>
</dict>
<dict>
<key>Type</key>
<string>PSToggleSwitchSpecifier</string>
<key>Title</key>
<string>删除好友同时删除备注</string>
<key>Key</key>
<string>auto_remove_alias</string>
<key>DefaultValue</key>
<false/>
</dict>
<dict>
<key>Type</key>
<string>PSToggleSwitchSpecifier</string>
<key>Title</key>
<string>获取远程消息的时候同步到本地</string>
<key>Key</key>
<string>sync_when_remote_fetch_messages</string>
<key>DefaultValue</key>
<false/>
</dict>
<dict>
<key>Type</key>
<string>PSToggleSwitchSpecifier</string>
<key>Title</key>
<string>阅后即焚后删除消息</string>
<key>Key</key>
<string>auto_remove_snap_message</string>
<key>DefaultValue</key>
<false/>
</dict>
<dict>
<key>Type</key>
<string>PSToggleSwitchSpecifier</string>
<key>Title</key>
<string>需要验证才能添加好友</string>
<key>Key</key>
<string>add_friend_need_verify</string>
<key>DefaultValue</key>
<false/>
</dict>
<dict>
<key>Type</key>
<string>PSToggleSwitchSpecifier</string>
<key>Title</key>
<string>群通知是否计入未读</string>
<key>Key</key>
<string>count_team_notification</string>
<key>DefaultValue</key>
<false/>
</dict>
<dict>
<key>Type</key>
<string>PSToggleSwitchSpecifier</string>
<key>Title</key>
<string>远程缩略图支持动图</string>
<key>Key</key>
<string>animated_image_thumbnail_enabled</string>
<key>DefaultValue</key>
<false/>
</dict>
<dict>
<key>Type</key>
<string>PSToggleSwitchSpecifier</string>
<key>Title</key>
<string>开启FPS监测</string>
<key>Key</key>
<string>show_fps_for_app</string>
<key>DefaultValue</key>
<false/>
</dict>
<dict>
<key>Type</key>
<string>PSToggleSwitchSpecifier</string>
<key>Title</key>
<string>禁用贴耳自动切换听筒模式</string>
<key>Key</key>
<string>disable_proxmity_monitor</string>
<key>DefaultValue</key>
<false/>
</dict>
<dict>
<key>Type</key>
<string>PSToggleSwitchSpecifier</string>
<key>Title</key>
<string>支持旋转(需要重启)</string>
<key>Key</key>
<string>enable_rotate</string>
<key>DefaultValue</key>
<false/>
</dict>
<dict>
<key>Type</key>
<string>PSToggleSwitchSpecifier</string>
<key>Title</key>
<string>自动下载附件</string>
<key>Key</key>
<string>auto_fetch_attachment</string>
<key>DefaultValue</key>
<true/>
</dict>
<dict>
<key>Type</key>
<string>PSToggleSwitchSpecifier</string>
<key>Title</key>
<string>使用 amr 格式</string>
<key>Key</key>
<string>using_amr</string>
<key>DefaultValue</key>
<false/>
</dict>
<dict>
<key>Type</key>
<string>PSToggleSwitchSpecifier</string>
<key>Title</key>
<string>打开文件快传</string>
<key>Key</key>
<string>enable_file_quick_transfer</string>
<key>DefaultValue</key>
<true/>
</dict>
<dict>
<key>Type</key>
<string>PSToggleSwitchSpecifier</string>
<key>Title</key>
<string>推送开启带昵称</string>
<key>Key</key>
<string>enable_apns_prefix</string>
<key>DefaultValue</key>
<true/>
</dict>
<dict>
<key>Type</key>
<string>PSToggleSwitchSpecifier</string>
<key>Title</key>
<string>群消息强制推送</string>
<key>Key</key>
<string>enable_team_apns_force</string>
<key>DefaultValue</key>
<false/>
</dict>
<dict>
<key>Type</key>
<string>PSTextFieldSpecifier</string>
<key>Title</key>
<string>需要忽略的群通知 (示范用)</string>
<key>Key</key>
<string>ignore_team_types</string>
<key>KeyboardType</key>
<string>NumbersAndPunctuation</string>
</dict>
<dict>
<key>Type</key>
<string>PSTextFieldSpecifier</string>
<key>Title</key>
<string>聊天室进入重试次数</string>
<key>Key</key>
<string>chatroom_enter_retry_count</string>
</dict>
<dict>
<key>Type</key>
<string>PSGroupSpecifier</string>
<key>Title</key>
<string>网络通话和白板参数设置</string>
</dict>
<dict>
<key>Type</key>
<string>PSMultiValueSpecifier</string>
<key>Title</key>
<string>服务器录制模式</string>
<key>Titles</key>
<array>
<string>默认(混合+单人录制)</string>
<string>只参与混合录制</string>
<string>只录制文件</string>
</array>
<key>Values</key>
<array>
<integer>0</integer>
<integer>1</integer>
<integer>2</integer>
</array>
<key>Key</key>
<string>server_record_mode</string>
<key>DefaultValue</key>
<integer>0</integer>
</dict>
<dict>
<key>Type</key>
<string>PSToggleSwitchSpecifier</string>
<key>Title</key>
<string>服务器录制视频</string>
<key>Key</key>
<string>server_record_video</string>
<key>DefaultValue</key>
<false/>
</dict>
<dict>
<key>Type</key>
<string>PSToggleSwitchSpecifier</string>
<key>Title</key>
<string>服务器录制声音</string>
<key>Key</key>
<string>server_record_audio</string>
<key>DefaultValue</key>
<false/>
</dict>
<dict>
<key>Type</key>
<string>PSToggleSwitchSpecifier</string>
<key>Title</key>
<string>服务器录制主讲人</string>
<key>Key</key>
<string>server_record_host</string>
<key>DefaultValue</key>
<false/>
</dict>
<dict>
<key>Type</key>
<string>PSToggleSwitchSpecifier</string>
<key>Title</key>
<string>服务器录制白板数据</string>
<key>Key</key>
<string>server_record_whiteboard_data</string>
<key>DefaultValue</key>
<false/>
</dict>
<dict>
<key>Type</key>
<string>PSMultiValueSpecifier</string>
<key>Title</key>
<string>发送画面裁剪</string>
<key>Titles</key>
<array>
<string>16:9</string>
<string>4:3</string>
<string>1:1</string>
<string>不裁剪</string>
</array>
<key>Values</key>
<array>
<integer>0</integer>
<integer>1</integer>
<integer>2</integer>
<integer>3</integer>
</array>
<key>Key</key>
<string>videochat_video_crop</string>
<key>DefaultValue</key>
<integer>0</integer>
</dict>
<dict>
<key>Type</key>
<string>PSToggleSwitchSpecifier</string>
<key>Title</key>
<string>自动旋转对端画面</string>
<key>Key</key>
<string>videochat_auto_rotate_remote_video</string>
<key>DefaultValue</key>
<false/>
</dict>
<dict>
<key>Type</key>
<string>PSMultiValueSpecifier</string>
<key>Title</key>
<string>对端画面填充模式</string>
<key>Titles</key>
<array>
<string>缩放填满</string>
<string>缩放不填满</string>
</array>
<key>Values</key>
<array>
<integer>0</integer>
<integer>1</integer>
</array>
<key>Key</key>
<string>videochat_remote_video_content_mode</string>
<key>DefaultValue</key>
<integer>0</integer>
</dict>
<dict>
<key>Type</key>
<string>PSMultiValueSpecifier</string>
<key>Title</key>
<string>画面质量</string>
<key>Titles</key>
<array>
<string>默认</string>
<string></string>
<string></string>
<string></string>
<string>480P</string>
<string>540P</string>
<string>720P</string>
</array>
<key>Values</key>
<array>
<integer>0</integer>
<integer>1</integer>
<integer>2</integer>
<integer>3</integer>
<integer>4</integer>
<integer>5</integer>
<integer>6</integer>
</array>
<key>Key</key>
<string>videochat_preferred_video_quality</string>
<key>DefaultValue</key>
<integer>0</integer>
</dict>
<dict>
<key>Type</key>
<string>PSToggleSwitchSpecifier</string>
<key>Title</key>
<string>后置摄像头</string>
<key>Key</key>
<string>videochat_start_with_back_camera</string>
<key>DefaultValue</key>
<false/>
</dict>
<dict>
<key>Type</key>
<string>PSMultiValueSpecifier</string>
<key>Title</key>
<string>视频编码器</string>
<key>Titles</key>
<array>
<string>默认</string>
<string>软编码</string>
<string>硬编码</string>
</array>
<key>Values</key>
<array>
<string>0</string>
<string>1</string>
<string>2</string>
</array>
<key>Key</key>
<string>videochat_preferred_video_encoder</string>
<key>DefaultValue</key>
<string>0</string>
</dict>
<dict>
<key>Type</key>
<string>PSMultiValueSpecifier</string>
<key>Title</key>
<string>视频解码器</string>
<key>Titles</key>
<array>
<string>默认</string>
<string>软解码</string>
<string>硬解码</string>
</array>
<key>Values</key>
<array>
<string>0</string>
<string>1</string>
<string>2</string>
</array>
<key>Key</key>
<string>videochat_preferred_video_decoder</string>
<key>DefaultValue</key>
<string>0</string>
</dict>
<dict>
<key>Type</key>
<string>PSTextFieldSpecifier</string>
<key>Title</key>
<string>视频最大编码码率(kbps)</string>
<key>KeyboardType</key>
<string>NumberPad</string>
<key>Key</key>
<string>videochat_video_encode_max_kbps</string>
</dict>
<dict>
<key>Type</key>
<string>PSTextFieldSpecifier</string>
<key>Title</key>
<string>本地录制码率(kbps)</string>
<key>KeyboardType</key>
<string>NumberPad</string>
<key>Key</key>
<string>videochat_local_record_video_kbps</string>
</dict>
<dict>
<key>Type</key>
<string>PSToggleSwitchSpecifier</string>
<key>Title</key>
<string>自动结束AudioSession</string>
<key>Key</key>
<string>videochat_auto_disable_audiosession</string>
<key>DefaultValue</key>
<true/>
</dict>
<dict>
<key>Type</key>
<string>PSToggleSwitchSpecifier</string>
<key>Title</key>
<string>语音降噪</string>
<key>Key</key>
<string>videochat_audio_denoise</string>
<key>DefaultValue</key>
<true/>
</dict>
<dict>
<key>Type</key>
<string>PSToggleSwitchSpecifier</string>
<key>Title</key>
<string>人声检测</string>
<key>Key</key>
<string>videochat_voice_detect</string>
<key>DefaultValue</key>
<true/>
</dict>
<dict>
<key>Type</key>
<string>PSToggleSwitchSpecifier</string>
<key>Title</key>
<string>期望高清语音</string>
<key>Key</key>
<string>videochat_prefer_hd_audio</string>
<key>DefaultValue</key>
<false/>
</dict>
<dict>
<key>Type</key>
<string>PSMultiValueSpecifier</string>
<key>Title</key>
<string>场景</string>
<key>Titles</key>
<array>
<string>默认</string>
<string>高清音乐</string>
<string>自适应高清音乐</string>
</array>
<key>Values</key>
<array>
<integer>0</integer>
<integer>1</integer>
<integer>2</integer>
</array>
<key>Key</key>
<string>avchat_scene</string>
<key>DefaultValue</key>
<integer>0</integer>
</dict>
<dict>
<key>Type</key>
<string>PSGroupSpecifier</string>
<key>Title</key>
<string>音视频代理</string>
</dict>
<dict>
<key>Type</key>
<string>PSToggleSwitchSpecifier</string>
<key>Title</key>
<string>是否使用音视频代理</string>
<key>Key</key>
<string>use_socks5</string>
<key>DefaultValue</key>
<false/>
</dict>
<dict>
<key>Type</key>
<string>PSMultiValueSpecifier</string>
<key>Title</key>
<string>类型</string>
<key>Titles</key>
<array>
<string>默认(Socks5)</string>
<string>NRTC_PROXY</string>
</array>
<key>Values</key>
<array>
<integer>0</integer>
<integer>1</integer>
</array>
<key>Key</key>
<string>socks5_type</string>
<key>DefaultValue</key>
<integer>0</integer>
</dict>
<dict>
<key>Type</key>
<string>PSTextFieldSpecifier</string>
<key>Title</key>
<string>sock5地址</string>
<key>KeyboardType</key>
<string>Alphabet</string>
<key>Key</key>
<string>socks5_addr</string>
<key>DefaultValue</key>
<string>10.240.76.102:1082</string>
</dict>
<dict>
<key>Type</key>
<string>PSTextFieldSpecifier</string>
<key>Title</key>
<string>sock5用户名</string>
<key>KeyboardType</key>
<string>Alphabet</string>
<key>Key</key>
<string>socks5_username</string>
<key>DefaultValue</key>
<string>User-003</string>
</dict>
<dict>
<key>Type</key>
<string>PSTextFieldSpecifier</string>
<key>Title</key>
<string>sock5密码</string>
<key>KeyboardType</key>
<string>Alphabet</string>
<key>Key</key>
<string>socks5_password</string>
<key>DefaultValue</key>
<string>123</string>
</dict>
<dict>
<key>Type</key>
<string>PSGroupSpecifier</string>
<key>Title</key>
<string>全局代理(白板+音视频)</string>
</dict>
<dict>
<key>Type</key>
<string>PSToggleSwitchSpecifier</string>
<key>Title</key>
<string>是否使用全局代理</string>
<key>Key</key>
<string>use_rts_socks5</string>
<key>DefaultValue</key>
<false/>
</dict>
<dict>
<key>Type</key>
<string>PSMultiValueSpecifier</string>
<key>Title</key>
<string>类型</string>
<key>Titles</key>
<array>
<string>默认(Socks5)</string>
<string>NRTC_PROXY</string>
</array>
<key>Values</key>
<array>
<integer>0</integer>
<integer>1</integer>
</array>
<key>Key</key>
<string>rts_socks5_type</string>
<key>DefaultValue</key>
<integer>0</integer>
</dict>
<dict>
<key>Type</key>
<string>PSTextFieldSpecifier</string>
<key>Title</key>
<string>sock5地址</string>
<key>KeyboardType</key>
<string>Alphabet</string>
<key>Key</key>
<string>rts_socks5_addr</string>
<key>DefaultValue</key>
<string>10.240.76.102:1080</string>
</dict>
<dict>
<key>Type</key>
<string>PSTextFieldSpecifier</string>
<key>Title</key>
<string>sock5用户名</string>
<key>KeyboardType</key>
<string>Alphabet</string>
<key>Key</key>
<string>rts_socks5_username</string>
<key>DefaultValue</key>
<string>User-003</string>
</dict>
<dict>
<key>Type</key>
<string>PSTextFieldSpecifier</string>
<key>Title</key>
<string>sock5密码</string>
<key>KeyboardType</key>
<string>Alphabet</string>
<key>Key</key>
<string>rts_socks5_password</string>
<key>DefaultValue</key>
<string></string>
</dict>
</array>
</dict>
</plist>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>New item</key>
<string></string>
<key>StringsTable</key>
<string>Root</string>
<key>PreferenceSpecifiers</key>
<array>
<dict>
<key>Type</key>
<string>PSGroupSpecifier</string>
<key>Title</key>
<string></string>
<key>FooterText</key>
<string>私有化配置的修改将在app下次启动时生效,请注销登录并退出应用。</string>
</dict>
<dict>
<key>Type</key>
<string>PSTextFieldSpecifier</string>
<key>DefaultValue</key>
<string></string>
<key>Title</key>
<string>配置文件URL</string>
<key>Key</key>
<string>privatization_url</string>
</dict>
<dict>
<key>Type</key>
<string>PSToggleSwitchSpecifier</string>
<key>Title</key>
<string>私有化开关</string>
<key>Key</key>
<string>privatization_enabled</string>
<key>DefaultValue</key>
<false/>
</dict>
<dict>
<key>Type</key>
<string>PSToggleSwitchSpecifier</string>
<key>Title</key>
<string>密码转MD5</string>
<key>Key</key>
<string>privatization_password_md5_enabled</string>
<key>DefaultValue</key>
<false/>
</dict>
</array>
</dict>
</plist>
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册登录 后发表评论