update .gitignore

This commit is contained in:
2026-03-08 19:13:09 +07:00
parent fa5849fb6f
commit 6ffd924333
632 changed files with 64 additions and 78043 deletions

BIN
.DS_Store vendored

Binary file not shown.

View File

@@ -1,5 +1,5 @@
{
"version": "1.1.8",
"version": "2.1.0",
"forceUpdate": true,
"updateMessage": "修复了一些问题并优化了性能",
"updateUrl": "https://store.yxdim.com/app/yxdIM",

51
config.json Normal file
View File

@@ -0,0 +1,51 @@
{
//项目名字或项目绝对路径
"project": "/Users/seven/work/uniapp-im-shop",
//打包平台 默认值android 值有"android","ios" 如果要打多个逗号隔开打包平台
"platform": "android",
//是否使用自定义基座 默认值false true自定义基座 false自定义证书
"iscustom": false,
//打包方式是否为安心打包默认值false,true安心打包,false传统打包
"safemode": false,
//android打包参数
"android": {
//安卓包名
"packagename": "uni.app.UNID40A151",
//安卓打包类型 默认值0 0 使用自有证书 1 使用公共证书 2 使用老版证书 3 使用云端证书
"androidpacktype": "3",
//安卓使用自有证书自有打包证书参数
//安卓打包证书别名,自有证书打包填写的参数
"certalias": "",
//安卓打包证书文件路径,自有证书打包填写的参数
"certfile": "",
//安卓打包证书密码,自有证书打包填写的参数
"certpassword": "",
//安卓打包证书库密码HBuilderx4.41支持),自有证书打包填写的参数
"storePassword": "",
//安卓平台要打的渠道包 取值有"google","yyb","360","huawei","xiaomi","oppo","vivo",如果要打多个逗号隔开
"channels": ""
},
//ios打包参数
"ios": {
//ios appid
"bundle": "com.test.ios",
//ios打包支持的设备类型 默认值iPhone 值有"iPhone","iPad" 如果要打多个逗号隔开打包平台
"supporteddevice": "iPhone,iPad",
//iOS使用自定义证书打包的profile文件路径
"profile": "",
//iOS使用自定义证书打包的p12文件路径
"certfile": "",
//iOS使用自定义证书打包的证书密码
"certpassword": "123"
},
//是否混淆 true混淆 false关闭
"isconfusion": false,
//开屏广告 true打开 false关闭
"splashads": false,
//悬浮红包广告true打开 false关闭
"rpads": false,
//push广告 true打开 false关闭
"pushads": false,
//加入换量联盟 true加入 false不加入
"exchange": false
}

View File

@@ -1,9 +1,9 @@
{
"name" : "密谈IM",
"name" : "益鑫达",
"appid" : "__UNI__44929DB",
"description" : "",
"versionName" : "1.1.6",
"versionCode" : 115,
"description" : "益鑫达",
"versionName" : "2.1.0",
"versionCode" : 120,
"transformPx" : false,
/* 5+App */
"app-plus" : {
@@ -75,9 +75,9 @@
"splashscreen" : {
"androidStyle" : "default",
"android" : {
"hdpi" : "static/qidong.png",
"xhdpi" : "static/qidong.png",
"xxhdpi" : "static/qidong.png"
"hdpi" : "static/bootstrap.png",
"xhdpi" : "static/bootstrap.png",
"xxhdpi" : "static/bootstrap.png"
}
},
"icons" : {
@@ -112,36 +112,6 @@
}
}
}
},
"nativePlugins" : {
"RongCloud-Call" : {
"__plugin_info__" : {
"name" : "RCUniCall",
"description" : "融云实时音视频 SDK uni 原生插件",
"platforms" : "Android,iOS",
"url" : "https://ext.dcloud.net.cn/plugin?id=6372",
"android_package_name" : "uni.app.UNID40A151",
"ios_bundle_id" : "",
"isCloud" : true,
"bought" : 1,
"pid" : "6372",
"parameters" : {}
}
},
"RongCloud-IM-V2" : {
"__plugin_info__" : {
"name" : "RCUniIMV2",
"description" : "融云即时通讯 SDK uni 原生插件V2",
"platforms" : "Android,iOS",
"url" : "https://ext.dcloud.net.cn/plugin?id=9227",
"android_package_name" : "uni.app.UNID40A151",
"ios_bundle_id" : "",
"isCloud" : true,
"bought" : 1,
"pid" : "9227",
"parameters" : {}
}
}
}
},
"h5" : {
@@ -188,5 +158,6 @@
"enable" : false
},
"vueVersion" : "3",
"fallbackLocale" : "zh-Hans"
"fallbackLocale" : "zh-Hans",
"locale" : "zh-Hans"
}

View File

@@ -1,43 +0,0 @@
<?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>AvailableLibraries</key>
<array>
<dict>
<key>BinaryPath</key>
<string>RCUniCall.framework/RCUniCall</string>
<key>LibraryIdentifier</key>
<string>ios-arm64</string>
<key>LibraryPath</key>
<string>RCUniCall.framework</string>
<key>SupportedArchitectures</key>
<array>
<string>arm64</string>
</array>
<key>SupportedPlatform</key>
<string>ios</string>
</dict>
<dict>
<key>BinaryPath</key>
<string>RCUniCall.framework/RCUniCall</string>
<key>LibraryIdentifier</key>
<string>ios-x86_64-simulator</string>
<key>LibraryPath</key>
<string>RCUniCall.framework</string>
<key>SupportedArchitectures</key>
<array>
<string>x86_64</string>
</array>
<key>SupportedPlatform</key>
<string>ios</string>
<key>SupportedPlatformVariant</key>
<string>simulator</string>
</dict>
</array>
<key>CFBundlePackageType</key>
<string>XFWK</string>
<key>XCFrameworkFormatVersion</key>
<string>1.0</string>
</dict>
</plist>

View File

@@ -1,61 +0,0 @@
<?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>Location</key>
<dict>
<key>LocationImageQuality</key>
<real>0.7</real>
<key>LocationImageWidth</key>
<string>480</string>
<key>LocationImageHeight</key>
<string>240</string>
</dict>
<key>File</key>
<dict>
<key>RelativePath</key>
<string>Documents/MyFile</string>
<key>MaxRangeUnit</key>
<real>1048576</real>
</dict>
<key>Voice</key>
<dict>
<key>AudioEncodingBitRate</key>
<real>7950</real>
</dict>
<key>Image</key>
<dict>
<key>ThumbnailQuality</key>
<string>0.3</string>
<key>ThumbnailMaxSize</key>
<string>240</string>
<key>ThumbnailMinSize</key>
<string>100</string>
<key>ImageQuality</key>
<real>0.85</real>
<key>ImageWidth</key>
<integer>1080</integer>
<key>ImageHeight</key>
<integer>1080</integer>
</dict>
<key>CustomerService</key>
<dict>
<key>SuspendWhenLeave</key>
<true/>
</dict>
<key>Download</key>
<dict>
<key>DownloadSliceSize</key>
<real>20971520</real>
</dict>
<key>Sight</key>
<dict>
<key>SightCompressWidth</key>
<integer>540</integer>
<key>SightCompressHeight</key>
<integer>960</integer>
</dict>
<key>HeartBeatInterval</key>
<integer>15</integer>
</dict>
</plist>

View File

@@ -1,61 +0,0 @@
<?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>Location</key>
<dict>
<key>LocationImageQuality</key>
<real>0.7</real>
<key>LocationImageWidth</key>
<string>480</string>
<key>LocationImageHeight</key>
<string>240</string>
</dict>
<key>File</key>
<dict>
<key>RelativePath</key>
<string>Documents/MyFile</string>
<key>MaxRangeUnit</key>
<real>1048576</real>
</dict>
<key>Voice</key>
<dict>
<key>AudioEncodingBitRate</key>
<real>7950</real>
</dict>
<key>Image</key>
<dict>
<key>ThumbnailQuality</key>
<string>0.3</string>
<key>ThumbnailMaxSize</key>
<string>240</string>
<key>ThumbnailMinSize</key>
<string>100</string>
<key>ImageQuality</key>
<real>0.85</real>
<key>ImageWidth</key>
<integer>1080</integer>
<key>ImageHeight</key>
<integer>1080</integer>
</dict>
<key>CustomerService</key>
<dict>
<key>SuspendWhenLeave</key>
<true/>
</dict>
<key>Download</key>
<dict>
<key>DownloadSliceSize</key>
<real>20971520</real>
</dict>
<key>Sight</key>
<dict>
<key>SightCompressWidth</key>
<integer>540</integer>
<key>SightCompressHeight</key>
<integer>960</integer>
</dict>
<key>HeartBeatInterval</key>
<integer>15</integer>
</dict>
</plist>

View File

@@ -1,147 +0,0 @@
<?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>files</key>
<dict>
<key>Info.plist</key>
<data>
xFG/8Qcxeh4ZjzDwC444w38zYpA=
</data>
<key>RCConfig.plist</key>
<data>
QA7nn/q1j2Y4AJbaGtBBs8g71xE=
</data>
<key>RongRTCLib.bundle/HwAiVadModel.bin</key>
<data>
ATcRMel9IwX111oJWJbEEm8fxLw=
</data>
<key>RongRTCLib.bundle/HwAinrModel.bin</key>
<data>
B8kB+UwS+Djpk42nGs6PsuZb4i4=
</data>
</dict>
<key>files2</key>
<dict>
<key>RCConfig.plist</key>
<dict>
<key>hash</key>
<data>
QA7nn/q1j2Y4AJbaGtBBs8g71xE=
</data>
<key>hash2</key>
<data>
q9qti/DvWdK6nHCUQ3R/b3gsZ4wASUjoeUzGtn7YyXI=
</data>
</dict>
<key>RongRTCLib.bundle/HwAiVadModel.bin</key>
<dict>
<key>hash</key>
<data>
ATcRMel9IwX111oJWJbEEm8fxLw=
</data>
<key>hash2</key>
<data>
rI/0N8nw9Ktvh3flHD50aM1unvKAoT4PXCZogPS4lzo=
</data>
</dict>
<key>RongRTCLib.bundle/HwAinrModel.bin</key>
<dict>
<key>hash</key>
<data>
B8kB+UwS+Djpk42nGs6PsuZb4i4=
</data>
<key>hash2</key>
<data>
wWEpSmpBqk1A1pnvwExjRDLmRm4kLI6s07dug5+9ftg=
</data>
</dict>
</dict>
<key>rules</key>
<dict>
<key>^.*</key>
<true/>
<key>^.*\.lproj/</key>
<dict>
<key>optional</key>
<true/>
<key>weight</key>
<real>1000</real>
</dict>
<key>^.*\.lproj/locversion.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>1100</real>
</dict>
<key>^Base\.lproj/</key>
<dict>
<key>weight</key>
<real>1010</real>
</dict>
<key>^version.plist$</key>
<true/>
</dict>
<key>rules2</key>
<dict>
<key>.*\.dSYM($|/)</key>
<dict>
<key>weight</key>
<real>11</real>
</dict>
<key>^(.*/)?\.DS_Store$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>2000</real>
</dict>
<key>^.*</key>
<true/>
<key>^.*\.lproj/</key>
<dict>
<key>optional</key>
<true/>
<key>weight</key>
<real>1000</real>
</dict>
<key>^.*\.lproj/locversion.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>1100</real>
</dict>
<key>^Base\.lproj/</key>
<dict>
<key>weight</key>
<real>1010</real>
</dict>
<key>^Info\.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>20</real>
</dict>
<key>^PkgInfo$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>20</real>
</dict>
<key>^embedded\.provisionprofile$</key>
<dict>
<key>weight</key>
<real>20</real>
</dict>
<key>^version\.plist$</key>
<dict>
<key>weight</key>
<real>20</real>
</dict>
</dict>
</dict>
</plist>

View File

@@ -1,43 +0,0 @@
<?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>AvailableLibraries</key>
<array>
<dict>
<key>BinaryPath</key>
<string>RongCallLib.framework/RongCallLib</string>
<key>LibraryIdentifier</key>
<string>ios-arm64</string>
<key>LibraryPath</key>
<string>RongCallLib.framework</string>
<key>SupportedArchitectures</key>
<array>
<string>arm64</string>
</array>
<key>SupportedPlatform</key>
<string>ios</string>
</dict>
<dict>
<key>BinaryPath</key>
<string>RongCallLib.framework/RongCallLib</string>
<key>LibraryIdentifier</key>
<string>ios-x86_64-simulator</string>
<key>LibraryPath</key>
<string>RongCallLib.framework</string>
<key>SupportedArchitectures</key>
<array>
<string>x86_64</string>
</array>
<key>SupportedPlatform</key>
<string>ios</string>
<key>SupportedPlatformVariant</key>
<string>simulator</string>
</dict>
</array>
<key>CFBundlePackageType</key>
<string>XFWK</string>
<key>XCFrameworkFormatVersion</key>
<string>1.0</string>
</dict>
</plist>

View File

@@ -1,536 +0,0 @@
//
// RCCallClient.h
// RongCallLib
//
// Created by RongCloud on 16/2/28.
// Copyright © 2016年 RongCloud. All rights reserved.
//
#import <AVFoundation/AVFoundation.h>
#import <Foundation/Foundation.h>
#import <RongIMLibCore/RongIMLibCore.h>
#import <RongRTCLib/RongRTCLib.h>
#import "RCCallClientSignalServer.h"
#import "RCCallCommonDefine.h"
#import "RCCallSession.h"
NS_ASSUME_NONNULL_BEGIN
/*!
CallLib全局通话呼入的监听器
*/
@protocol RCCallReceiveDelegate <NSObject>
@required
/*!
接收到通话呼入的回调
@param callSession 呼入的通话实体
@discussion
接收到通话呼入的回调
@remarks 代理
*/
- (void)didReceiveCall:(RCCallSession *)callSession;
/*!
接收到通话呼入的远程通知的回调
@param callId 呼入通话的唯一值
@param inviterUserId 通话邀请者的UserId
@param mediaType 通话的媒体类型
@param userIdList 被邀请者的UserId列表
@param userDict 远程推送包含的其他扩展信息
@param isVoIPPush 是否 VoIP 推送
@param pushConfig 推送配置
@discussion
接收到通话呼入的远程通知的回调
@remarks 代理
*/
- (void)didReceiveCallRemoteNotification:(nullable NSString *)callId
inviterUserId:(nullable NSString *)inviterUserId
mediaType:(RCCallMediaType)mediaType
userIdList:(nullable NSArray<NSString *> *)userIdList
userDict:(nullable NSDictionary *)userDict
isVoIPPush:(BOOL)isVoIPPush
pushConfig:(nullable RCMessagePushConfig *)pushConfig;
/*!
接收到取消通话的远程通知的回调
@param callId 呼入通话的唯一值
@param inviterUserId 通话邀请者的UserId
@param mediaType 通话的媒体类型
@param userIdList 被邀请者的UserId列表
@param pushConfig 推送配置
@param isRemoteCancel 是否为远端取消呼叫
@discussion
接收到取消通话的远程通知的回调
@remarks 代理
*/
- (void)didCancelCallRemoteNotification:(nullable NSString *)callId
inviterUserId:(nullable NSString *)inviterUserId
mediaType:(RCCallMediaType)mediaType
userIdList:(nullable NSArray<NSString *> *)userIdList
pushConfig:(nullable RCMessagePushConfig *)pushConfig
isRemoteCancel:(BOOL)isRemoteCancel;
@optional
/*!
接收到通话漏接的回调
@param callSession 呼入的通话实体
@discussion
接收到通话漏接的回调
@remarks 代理
*/
- (void)didMissCall:(RCCallSession *)callSession;
/*!
接收到取消通话的远程通知的回调
@param callId 呼入通话的唯一值
@param inviterUserId 通话邀请者的UserId
@param mediaType 通话的媒体类型
@param userIdList 被邀请者的UserId列表
@discussion
接收到取消通话的远程通知的回调
@remarks 代理
*/
- (void)didCancelCallRemoteNotification:(NSString *)callId
inviterUserId:(NSString *)inviterUserId
mediaType:(RCCallMediaType)mediaType
userIdList:(NSArray *)userIdList
DEPRECATED_MSG_ATTRIBUTE(
"use didCancelCallRemoteNotification:inviterUserId:mediaType:userIdList:pushConfig:isRemoteCancel: instead");
/*!
接收到通话呼入的远程通知的回调
@param callId 呼入通话的唯一值
@param inviterUserId 通话邀请者的UserId
@param mediaType 通话的媒体类型
@param userIdList 被邀请者的UserId列表
@param userDict 远程推送包含的其他扩展信息
@discussion
接收到通话呼入的远程通知的回调
@remarks 代理
*/
- (void)didReceiveCallRemoteNotification:(NSString *)callId
inviterUserId:(NSString *)inviterUserId
mediaType:(RCCallMediaType)mediaType
userIdList:(NSArray *)userIdList
userDict:(NSDictionary *)userDict
DEPRECATED_MSG_ATTRIBUTE(
"use didReceiveCallRemoteNotification:inviterUserId:mediaType:userIdList:userDict:isVoIPPush:pushConfig: "
"instead");
/*!
接收到通话呼入的远程通知的回调
@param callId 呼入通话的唯一值
@param inviterUserId 通话邀请者的UserId
@param mediaType 通话的媒体类型
@param userIdList 被邀请者的UserId列表
@param userDict 远程推送包含的其他扩展信息
@param isVoIPPush 是否 VoIP 推送
@discussion
接收到通话呼入的远程通知的回调
@remarks 代理
*/
- (void)didReceiveCallRemoteNotification:(NSString *)callId
inviterUserId:(NSString *)inviterUserId
mediaType:(RCCallMediaType)mediaType
userIdList:(NSArray *)userIdList
userDict:(NSDictionary *)userDict
isVoIPPush:(BOOL)isVoIPPush
DEPRECATED_MSG_ATTRIBUTE(
"use didReceiveCallRemoteNotification:inviterUserId:mediaType:userIdList:userDict:isVoIPPush:pushConfig: "
"instead");
@end
/*!
语音识别监听器
*/
@protocol RCCallASRDelegate <NSObject>
@optional
/*!
语音识别错误通知回调
@remarks 代理
*/
- (void)didASRError:(NSInteger)code;
/*!
语音识别服务开启通知回调
@remarks 代理
*/
- (void)didReceiveStartASR;
/*!
语音识别服务停止通知回调
@remarks 代理
*/
- (void)didReceiveStopASR;
/*!
语音识别信息回调
@param asrContent 语音识别信息
@remarks 代理
*/
- (void)didReceiveASRContent:(RCRTCASRContent *)asrContent;
/*!
语音翻译内容回调
@param content 语音翻译内容
@remarks 代理
*/
- (void)didReceiveRealtimeTranslationContent:(RCRTCRealtimeTranslationContent *)content;
@end
@class RCMessagePushConfig;
/*!
融云CallLib核心类
*/
@interface RCCallClient : NSObject
/*!
自定义push消息. 应在startCall之前调用
*/
@property (nonatomic, strong, nullable) RCMessagePushConfig *invitePushConfig;
/*!
自定义push消息. 应在startCall之前调用
*/
@property (nonatomic, strong, nullable) RCMessagePushConfig *hangupPushConfig;
/*!
呼叫或通话过程中, 当收到手机号系统来电时, 是否挂断当前呼叫或通话, 默认: Yes 挂断
*/
@property (nonatomic, assign) BOOL canHangupSystemPhonecall;
/*!
在开启 IM 链接多端登录的前提下,同一 UserId 的不同端先后加入通话的处理行为 默认: RCCallJoinCallTypeKick 将先加入通话用户踢出通话
*/
@property (nonatomic, assign) RCCallJoinCallType joinCallType;
/*!
获取融云通话能力库 RCCallClient 的核心类单例
@discussion
您可以通过此方法, 获取 RCCallClient 的单例,访问对象中的属性和方法
@remarks 通话设置
@return 融云通话能力库 RCCallClient 的核心类单例
*/
+ (instancetype)sharedRCCallClient;
/*!
设置全局通话呼入的监听器
@param delegate CallLib全局通话呼入的监听器
@discussion
设置全局通话呼入的监听器
@remarks 通话设置
*/
- (void)setDelegate:(id<RCCallReceiveDelegate>)delegate;
/*!
发起一个通话
@param conversationType 会话类型
@param targetId 目标会话ID, 单人呼叫时targetId为被叫端UserId, 多人呼叫时targetId为群组Id, 请不要填写主叫端UserId, 否则无法发起呼叫
@param userIdList 被叫端的用户ID列表, 数组中仅填写被叫端UserId, 请不要填写主叫端UserId, 否则无法发起呼叫
@param type 发起的通话媒体类型
@param delegate 通话监听
@param extra 附件信息
@discussion
发起一个通话
@remarks 通话管理
@return 呼出的通话实体
*/
- (nullable RCCallSession *)startCall:(RCConversationType)conversationType
targetId:(NSString *)targetId
to:(NSArray<NSString *> *)userIdList
mediaType:(RCCallMediaType)type
sessionDelegate:(id<RCCallSessionDelegate>)delegate
extra:(nullable NSString *)extra;
/*!
发起一个跨应用通话
@param conversationType 会话类型 (仅支持单聊)
@param targetId 目标会话ID, 单人呼叫时targetId为被叫端UserId
@param userIdList 被叫端的用户ID列表, 数组中仅填写被叫端UserId, 请不要填写主叫端UserId, 否则无法发起呼叫注意此处ID组成形式为Appkey+UserId, 格式为appkey_userid注意下划线拼接
@param type 发起的通话媒体类型
@param delegate 通话监听
@param extra 附件信息
@discussion
发起一个通话
@remarks 通话管理
@return 呼出的通话实体
*/
- (RCCallSession *)startCrossCall:(RCConversationType)conversationType
targetId:(NSString *)targetId
to:(NSArray *)userIdList
mediaType:(RCCallMediaType)type
sessionDelegate:(id<RCCallSessionDelegate>)delegate
extra:(nullable NSString *)extra;
/*!
发起一个通话
@param conversationType 会话类型
@param targetId 目标会话ID, 单人呼叫时targetId为被叫端UserId, 多人呼叫时targetId为群组Id
@param userIdList 被叫端的用户ID列表, 数组中仅填写被叫端UserId, 请不要填写主叫端UserId, 否则无法发起呼叫
@param observerIdList 主叫端指定需要以观察者身份加入房间的用户ID列表, 如果主叫端需要以观察者身份加入房间也需要填写主叫端UserId
@param type 发起的通话媒体类型
@param delegate 通话监听
@param extra 附件信息
@discussion
发起一个通话
@remarks 通话管理
@return 呼出的通话实体
*/
- (nullable RCCallSession *)startCall:(RCConversationType)conversationType
targetId:(NSString *)targetId
to:(NSArray<NSString *> *)userIdList
observerIdList:(NSArray<NSString *> *)observerIdList
mediaType:(RCCallMediaType)type
sessionDelegate:(id<RCCallSessionDelegate>)delegate
extra:(nullable NSString *)extra;
/*!
当前会话类型是否支持音频通话
@param conversationType 会话类型
@discussion
当前会话类型是否支持音频通话
@remarks 通话设置
@return 是否支持音频通话
*/
- (BOOL)isAudioCallEnabled:(RCConversationType)conversationType;
/*!
当前会话类型是否支持视频通话
@param conversationType 会话类型
@discussion
当前会话类型是否支持视频通话
@remarks 通话设置
@return 是否支持视频通话
*/
- (BOOL)isVideoCallEnabled:(RCConversationType)conversationType;
/*!
设置本地视频分辨率
@param profile 通话视频分辨率
@discussion
设置本地视频分辨率
@remarks 视频设置
*/
- (void)setVideoProfile:(RCVideoProfile)profile;
/*!
设置本地视频属性, 可用此接口设置本地视频方向
@param orientation 视频方向, 默认: AVCaptureVideoOrientationPortrait
@discussion
设置本地视频属性, 可用此接口设置本地视频方向
@remarks 视频设置
*/
- (void)setVideoOrientation:(AVCaptureVideoOrientation)orientation;
/*!
设置码率
@param rate 码率 单位 kbps
@discussion
设置码率
@remarks 视频设置
*/
- (void)setBitRate:(NSUInteger)rate;
/*!
设置外部信令服务器代理
@param signalServerDelegate 外部信令服务器代理
@discussion
默认情况下 app 使用融云消息作为信令即可, 不需要设置此代理, 此时有个限制就是所有的通话必须在某一个会话中进行, 比如群组.
如果您需要摆脱会话的限制, 请使用 server api 服务实现本代理, 然后 startCall 时 conversationType 传 0, targetId 传 nil, calllib 会调用您设置的代理来发送消息.
请务必使用一个全局代理, 确保在拨打和接听 VoIP 的时候代理对象都存活, 这样才能确保正常通话.
@remarks 通话设置
*/
- (void)setSignalServerDelegate:(id<RCCallSignalServerDelegate>)signalServerDelegate;
/*!
当前的通话会话实体
*/
@property (nonatomic, strong, readonly, nullable) RCCallSession *currentCallSession;
/*!
@remarks 上次通话的通话会话静态实体
@discussion
5.8.0版本callLib修改
currentCallSession有效生命周期由开始通话直到下次通话开始为止变为了由开始通话直到这次通话结束为止
为了弥补这个逻辑缺失新增了lastCallSession从这次通话回调结束以后生效直到下次通话结束失效
*/
@property (nonatomic, strong, readonly, nullable) RCCallSessionSnapshot *lastCallSession;
/*!
是否生成通话记录消息默认为YES
*/
@property (nonatomic, assign) BOOL enableCallSummary;
/*!
是否开启多平台模式默认为NO
*/
@property (nonatomic, assign) BOOL enableMultiPlatformMode;
/*!
设置是否使用苹果 PushKit 推送
@param enable YES 使用, NO 不使用
@discussion
是否打开苹果 PushKit 推送, 该推送可以直接激活 App, 注: iOS 13 以后 PushKit 必须结合苹果 CallKit.framework 进行使用, 否则无法正常处理 VoIP 相关推送逻辑,
如果设置为 NO 则使用普通 APNS 消息推送来处理音视频信令逻辑, 默认关闭. 打开之后 App 默认需要自行处理 VoIP 推送唤起 CallKit.framework 的逻辑.
@remarks 通话设置
*/
- (void)setApplePushKitEnable:(BOOL)enable;
/*!
设置是否使用音视频预热
@param preconnectEnabled YES 使用, NO 不使用
@discussion
默认情况下 SDK 内部会在发送通话信令或接听信令成功的时候,主动进行音视频的预热
@remarks 通话设置
*/
- (void)setPreconnectEnabled:(BOOL)preconnectEnabled;
/*!
设置语音识别监听器
@param delegate 语音识别监听器
@discussion
设置语音识别监听器
@remarks 语音识别设置
*/
- (void)setASRDelegate:(id<RCCallASRDelegate>)delegate;
/*!
设置语音识别源语言
@param languageCode 语言代码
@discussion
设置语音识别源语言
@remarks 语音识别设置
*/
- (void)setSrcLanguageCode:(NSString *)languageCode;
/*!
开启语音识别服务
@param completion 开启语音识别服务回调
@discussion
开启语音识别服务如果房间内没有人发布流则无法开启语音识别服务SDK 会在有人发布流后补偿进行开启语音识别服务
@remarks 语音识别
*/
- (void)startASR:(nullable void (^)(BOOL success, NSInteger code))completion;
/*!
停止语音识别服务
@param completion 停止语音识别服务回调
@discussion
停止语音识别服务
@remarks 语音识别设置
*/
- (void)stopASR:(nullable void (^)(BOOL success, NSInteger code))completion;
/*!
设置是否打开语音识别
@param enable YES 打开, NO 关闭
@return 返回值0 代表成功
@discussion
1. 通话接通后,可以通过此接口打开或关闭语音识别功能;
2. 默认关闭语音识别功能,开启后会在通话过程中自动识别用户语音并转换为文字。
@remarks 语音识别设置
*/
- (int)setEnableASR:(BOOL)enable;
/*!
开启语音翻译
@param destLangCode 翻译目标语言码
@discussion
1. 语音翻译依赖语音识别服务,需要在收到 RCCallASRDelegate 的 didReceiveStartASR 回调后,调用开启语音翻译
2. 开启语音翻译,会通过 RCCallASRDelegate 的 didReceiveRealtimeTranslationContent 回调返回语音翻译结果
@remarks 语音识别设置
*/
- (void)startRealtimeTranslation:(NSString *)destLangCode copmletion:(nullable void (^)(BOOL success, NSInteger code))completion;
/*!
关闭语音翻译
@discussion
关闭语音翻译
@remarks 语音识别设置
*/
- (void)stopRealtimeTranslation:(nullable void (^)(BOOL success, NSInteger code))completion;
/*!
获取 SDK 版本号
@return 版本号
@remarks 参数配置
*/
+ (NSString *)getVersion;
@end
NS_ASSUME_NONNULL_END

View File

@@ -1,69 +0,0 @@
//
// RCCallClientSignalServer.h
// RongCallLib
//
// Created by RongCloud on 2017/7/25.
// Copyright © 2017年 Rong Cloud. All rights reserved.
//
#ifndef RCCallClientSignalServer_h
#define RCCallClientSignalServer_h
#import <RongCallLib/RongCallLib.h>
#import "RCCallSummaryMessage.h"
NS_ASSUME_NONNULL_BEGIN
/*!
信令服务代理
*/
@protocol RCCallSignalServerDelegate <NSObject>
/*!
获取通话参与者的唯一媒体ID, 必须保证每次电话会议的每个人的媒体ID都是全局唯一的
@param successBlock 为当前用户分配的媒体Id成功的回调
@param errorBlcok 获取媒体Id失败的回调
@discussion
获取通话参与者的唯一媒体ID, 必须保证每次电话会议的每个人的媒体ID都是全局唯一的
@remarks 代理
*/
- (void)getUniqueMediaId:(nullable void (^)(NSString *mediaId))successBlock error:(nullable void (^)(int errorCode))errorBlcok;
/*!
发送 VoIP 信令消息
@param messageContent 消息内容
@param toUserIdList 接收者的Id
@param pushContent pushContent
@param pushData pushData
@param successBlock 成功的回调
@param errorBlcok 失败的回调
@discussion
发送 VoIP 信令消息
@remarks 代理
*/
- (void)sendVoipSignalMessage:(RCMessageContent *)messageContent
toUserIdList:(NSArray<NSString *> *)toUserIdList
pushContent:(nullable NSString *)pushContent
pushData:(nullable NSString *)pushData
success:(nullable void (^)(void))successBlock
error:(nullable void (^)(int errorCode))errorBlcok;
/*!
VoIP 通话结束返回的统计信息
@param summary 通话统计
@discussion
VoIP 通话结束返回的统计信息
@remarks 代理
*/
- (void)onVoipCallSummary:(RCCallSummaryMessage *)summary;
@end
NS_ASSUME_NONNULL_END
#endif /* RCCallClientSignalServer_h */

View File

@@ -1,454 +0,0 @@
//
// RCCallCommonDefine.h
// RongCallLib
//
// Created by RongCloud on 16/2/28.
// Copyright © 2016年 RongCloud. All rights reserved.
//
#ifndef RCCallCommonDefine_h
#define RCCallCommonDefine_h
/*!
引擎类型
*/
typedef NS_ENUM(NSInteger, RCCallEngineType) {
/*!
*/
RCCallEngineNone = 0,
/*!
声网
*/
RCCallEngineAgora = 1,
/*!
融云
*/
RCCallEngineRong = 2,
/*!
Blink
*/
RCCallEngineBlink = 3,
/*!
RTC3.0
*/
RCCallEngineRongRTC = 4
};
/*!
媒体类型
*/
typedef NS_ENUM(NSInteger, RCCallMediaType) {
/*!
音频
*/
RCCallMediaAudio = 1,
/*!
视频
*/
RCCallMediaVideo = 2
};
/*!
媒体类型
*/
typedef NS_ENUM(NSInteger, RCCallRoomType) {
/*!
同App通话
*/
RCCallRoomTypeNormalCall = 0,
/*!
跨App通话
*/
RCCallRoomTypeCrossCall = 7
};
/*!
通话质量
*/
typedef NS_ENUM(NSUInteger, RCCallQuality) {
/*!
未知
*/
RCCall_Quality_Unknown = 0,
/*!
Excellent
*/
RCCall_Quality_Excellent = 1,
/*!
Good
*/
RCCall_Quality_Good = 2,
/*!
Poor
*/
RCCall_Quality_Poor = 3,
/*!
Bad
*/
RCCall_Quality_Bad = 4,
/*!
VBad
*/
RCCall_Quality_VBad = 5,
/*!
Down
*/
RCCall_Quality_Down = 6
};
/**
视频显示模式
*/
typedef NS_ENUM(NSInteger, RCCallRenderModel) {
/*!
默认: 如果视频尺寸与显示视窗尺寸不一致,则视频流会按照显示视窗的比例进行周边裁剪或图像拉伸后填满视窗。
*/
RCCallRenderModelHidden = 1,
/*!
RenderFit: 如果视频尺寸与显示视窗尺寸不一致,在保持长宽比的前提下,将视频进行缩放后填满视窗。
*/
RCCallRenderModelFit = 2,
/*!
RenderAdaptive: 如果自己和对方都是竖屏,或者如果自己和对方都是横屏,使用
RCCallRenderModelHidden如果对方和自己一个竖屏一个横屏则使用RCCallRenderModelFit。
*/
RCCallRenderModelAdaptive = 3
};
#pragma mark - Call
/*!
错误码
*/
typedef NS_ENUM(NSInteger, RCCallErrorCode) {
/*!
成功
*/
RCCallSuccess = 0,
/*!
网络不可用
*/
RCCallNetworkUnavailable = 1,
/*!
已经处于通话中了
*/
RCCallOneCallExisted = 2,
/*!
无效操作
*/
RCCallOperationUnavailable = 3,
/*!
参数错误
*/
RCCallInvalidParam = 4,
/*!
网络不稳定
*/
RCCallNetworkUnstable = 5,
/*!
媒体服务请求失败
*/
RCCallMediaRequestFailed = 6,
/*!
媒体服务初始化失败
*/
RCCallMediaServerNotReady = 7,
/*!
媒体服务未初始化
*/
RCCallMediaServerNotInitialized = 8,
/*!
媒体服务请求超时
*/
RCCallMediaRequestTimeout = 9,
/*!
未知的媒体服务错误
*/
RCCallMediaUnkownError = 10,
/*!
已被禁止通话
*/
RCCallMediaKickedByServerError = 11,
/*!
音视频服务已关闭
*/
RCCallMediaServerClosedError = 12,
/*!
音视频发布资源失败
*/
RCCallMediaServerPublishError = 13,
/*!
音视频订阅资源失败
*/
RCCallMediaServerSubscribeError = 14,
/*!
其他端已在通话中
*/
RCCallMediaJoinRoomRefuseError = 15,
/*!
己方其他端已加入其他房间
*/
RCCallMediaOtherClientJoinedRoom = 16
};
/*!
通话结束原因
*/
typedef NS_ENUM(NSInteger, RCCallDisconnectReason) {
/*!
己方取消已发出的通话请求
*/
RCCallDisconnectReasonCancel = 1,
/*!
己方拒绝收到的通话请求
*/
RCCallDisconnectReasonReject = 2,
/*!
己方挂断
*/
RCCallDisconnectReasonHangup = 3,
/*!
己方忙碌
*/
RCCallDisconnectReasonBusyLine = 4,
/*!
己方未接听
*/
RCCallDisconnectReasonNoResponse = 5,
/*!
己方不支持当前引擎
*/
RCCallDisconnectReasonEngineUnsupported = 6,
/*!
己方网络出错
*/
RCCallDisconnectReasonNetworkError = 7,
/*!
己方获取媒体资源失败
*/
RCCallDisconnectReasonResourceError = 8,
/*!
己方发布资源失败
*/
RCCallDisconnectReasonPublishError = 9,
/*!
己方订阅资源失败
*/
RCCallDisconnectReasonSubscribeError = 10,
/*!
对方取消已发出的通话请求
*/
RCCallDisconnectReasonRemoteCancel = 11,
/*!
对方拒绝收到的通话请求
*/
RCCallDisconnectReasonRemoteReject = 12,
/*!
对方挂断
*/
RCCallDisconnectReasonRemoteHangup = 13,
/*!
对方忙碌
*/
RCCallDisconnectReasonRemoteBusyLine = 14,
/*!
对方未接听
*/
RCCallDisconnectReasonRemoteNoResponse = 15,
/*!
对方不支持当前引擎
*/
RCCallDisconnectReasonRemoteEngineUnsupported = 16,
/*!
对方网络错误
*/
RCCallDisconnectReasonRemoteNetworkError = 17,
/*!
对方获取媒体资源失败
*/
RCCallDisconnectReasonRemoteResourceError = 18,
/*!
对方发布资源失败
*/
RCCallDisconnectReasonRemotePublishError = 19,
/*!
对方订阅资源失败
*/
RCCallDisconnectReasonRemoteSubscribeError = 20,
/*!
己方其他端已加入新通话
*/
RCCallDisconnectReasonKickedByOtherCall = 21,
/*!
己方其他端已在通话中
*/
RCCallDisconnectReasonInOtherCall = 22,
/*!
己方已被禁止通话
*/
RCCallDisconnectReasonKickedByServer = 23,
/*!
己方已接听系统来电
*/
RCCallDisconnectReasonAcceptSystemCall = 24,
/*!
对方其他端已加入新通话
*/
RCCallDisconnectReasonRemoteKickedByOtherCall = 31,
/*!
对方其他端已在通话中
*/
RCCallDisconnectReasonRemoteInOtherCall = 32,
/*!
对方已被禁止通话
*/
RCCallDisconnectReasonRemoteKickedByServer = 33,
/*!
对方已接听系统来电
*/
RCCallDisconnectReasonRemoteAcceptSystemCall = 34,
/*!
己方其他端已接听
*/
RCCallDisconnectReasonAcceptByOtherClient = 101,
/*!
己方其他端已挂断
*/
RCCallDisconnectReasonHangupByOtherClient = 102,
/*!
己方被对方加入黑名单
*/
RCCallDisconnectReasonAddToBlackList = 103,
/*!
音视频服务已关闭
*/
RCCallDisconnectReasonMediaServerClosed = 104,
/*!
己方被降级为观察者
*/
RCCallDisconnectReasonDegrade = 301
};
/*!
通话视频参数
*/
typedef NS_ENUM(NSInteger, RCVideoProfile) {
/*!
176x132, 10fps, 150kbps
*/
RC_VIDEO_PROFILE_132P = 10,
/*!
256x144, 15fps, 240kbps
*/
RC_VIDEO_PROFILE_144P_1 = 11,
/*!
240x240, 15fps, 280kbps
*/
RC_VIDEO_PROFILE_240P = 20,
/*!
320x240, 15fps, 400kbps
*/
RC_VIDEO_PROFILE_240P_1 = 21,
/*!
480x360, 15fps, 650kbps
*/
RC_VIDEO_PROFILE_360P = 30,
/*!
640x360, 15fps, 800kbps
*/
RC_VIDEO_PROFILE_360P_1 = 40,
/*!
640x480, 15fps, 900kbps
*/
RC_VIDEO_PROFILE_480P = 50,
/*!
720x480, 15fps, 1000kbps
*/
RC_VIDEO_PROFILE_480P_1 = 60,
/*!
1280x720, 15fps, 2500kbps
*/
RC_VIDEO_PROFILE_720P = 70,
/*
1920*1080, 15fps, 4000kbps
*/
RC_VIDEO_PROFILE_1080P = 80,
/*!
默认的视频参数
*/
RC_VIDEO_PROFILE_DEFAULT = RC_VIDEO_PROFILE_480P
};
/*!
视频编码方式
*/
typedef NS_ENUM(NSInteger, RCVideoCodecType) {
/*!
H264
*/
RC_VIDEO_CODEC_H264
};
/*!
通话状态
*/
typedef NS_ENUM(NSInteger, RCCallStatus) {
/*!
初始状态
*/
//RCCallIdle = 0,
/*!
正在呼出
*/
RCCallDialing = 1,
/*!
正在呼入
*/
RCCallIncoming = 2,
/*!
收到一个通话呼入后,正在振铃
*/
RCCallRinging = 3,
/*!
正在通话
*/
RCCallActive = 4,
/*!
已经挂断
*/
RCCallHangup = 5
};
/*!
用户类型
*/
typedef NS_ENUM(NSInteger, RCCallUserType) {
/*!
正常用户
*/
RCCallUserNormal = 1,
/*!
观察者
*/
RCCallUserObserver = 2
};
/*!
同UserId两端同时加入通话类型
*/
typedef NS_ENUM(NSUInteger, RCCallJoinCallType) {
/*!
将先加入通话用户踢出通话
*/
RCCallJoinCallTypeKick,
/*!
拒绝当前用户加入通话
*/
RCCallJoinCallTypeRefuse,
};
#endif /* RCCallCommonDefine_h */

View File

@@ -1,687 +0,0 @@
//
// RCCallSession.h
// RongCallLib
//
// Created by RongCloud on 16/2/29.
// Copyright © 2016年 RongCloud. All rights reserved.
//
#import <CoreMedia/CoreMedia.h>
#import <Foundation/Foundation.h>
#import <RongIMLibCore/RongIMLibCore.h>
#import "RCCallCommonDefine.h"
#import "RCCallUserProfile.h"
NS_ASSUME_NONNULL_BEGIN
/*!
通话状态变化的监听器
*/
@protocol RCCallSessionDelegate <NSObject>
@optional
/*!
通话已接通
@discussion
通话已接通
@remarks 代理
*/
- (void)callDidConnect;
/*!
通话已结束
@discussion
通话已结束
@remarks 代理
*/
- (void)callDidDisconnect;
/*!
通话已结束
@param reason 挂断原因
@discussion
通话已结束
@warning
这个接口和callDidDisconnect 回调方法相同,增加返回挂断原因。
同时实现本回调通话已结束将不会再通过callDidDisconnect 处理。
@remarks 代理
*/
- (void)callDidDisconnectWithReason:(RCCallDisconnectReason)reason;
/*!
对端用户正在振铃
@param userId 正在振铃的用户ID
@discussion
对端用户正在振铃
@remarks 代理
*/
- (void)remoteUserDidRing:(NSString *)userId;
/*!
有用户被邀请加入通话
@param userId 被邀请的用户ID
@param mediaType 希望被邀请者使用的媒体类型
@discussion
有用户被邀请加入通话
@remarks 代理
*/
- (void)remoteUserDidInvite:(NSString *)userId mediaType:(RCCallMediaType)mediaType;
/*!
对端用户加入了通话
@param userId 用户ID
@param mediaType 用户的媒体类型
@discussion
对端用户加入了通话
@remarks 代理
*/
- (void)remoteUserDidJoin:(NSString *)userId mediaType:(RCCallMediaType)mediaType;
/*!
对端用户切换了媒体类型
@param userId 用户ID
@param mediaType 切换至的媒体类型
@discussion
对端用户切换了媒体类型
@remarks 代理
*/
- (void)remoteUserDidChangeMediaType:(NSString *)userId mediaType:(RCCallMediaType)mediaType;
/*!
对端用户开启或关闭了麦克风的状态
@param disabled 是否关闭麦克风
@param userId 用户ID
@discussion
对端用户开启或关闭了麦克风的状态
@remarks 代理
*/
- (void)remoteUserDidDisableMicrophone:(BOOL)disabled byUser:(NSString *)userId;
/*!
对端用户开启或关闭了摄像头的状态
@param disabled 是否关闭摄像头
@param userId 用户ID
@discussion
对端用户开启或关闭了摄像头的状态
@remarks 代理
*/
- (void)remoteUserDidDisableCamera:(BOOL)disabled byUser:(NSString *)userId;
/*!
对端用户挂断
@param userId 用户ID
@param reason 挂断的原因
@discussion
对端用户挂断
@remarks 代理
*/
- (void)remoteUserDidLeft:(NSString *)userId reason:(RCCallDisconnectReason)reason;
/*!
对端用户发布自定义媒体流
@param streamId 自定义流ID
@param tag 自定义流标签
@param mediaType 媒体类型
@discussion
对端用户发布自定义媒体流
@remarks 代理
*/
- (void)remoteUserDidPublishCustomMediaStream:(NSString *)streamId
streamTag:(NSString *)tag
mediaType:(RCCallMediaType)mediaType;
/*!
对端用户取消发布自定义媒体流
@param streamId 自定义流ID
@discussion
对端用户取消发布自定义媒体流
@remarks 代理
*/
- (void)remoteUserDidCancelPublishCustomMediaStream:(NSString *)streamId;
/*!
本地发布资源上报
@param success 发布资源是否成功
@discussion
本地发布资源上报
@remarks 代理
*/
- (void)localUserDidPublishStream:(BOOL)success;
/*!
彩铃
@discussion
彩铃
@remarks 代理
*/
- (void)shouldAlertForWaitingRemoteResponse;
/*!
来电铃声
@discussion
来电铃声
@remarks 代理
*/
- (void)shouldRingForIncomingCall;
/*!
通话接通或挂断时停止播放铃声
@discussion
通话接通或挂断时停止播放铃声
@remarks 代理
*/
- (void)shouldStopAlertAndRing;
/*!
通话过程中的错误回调
@param error 错误码
@discussion
通话过程中的错误回调
@warning
这个接口回调的错误码主要是为了提供必要的log以及提示用户如果是不可恢复的错误SDK会挂断电话并回调callDidDisconnectApp可以在callDidDisconnect中统一处理通话结束的逻辑
@remarks 代理
*/
- (void)errorDidOccur:(RCCallErrorCode)error;
/*!
当前通话网络状态的回调,该回调方法每秒触发一次
@param txQuality 上行网络质量
@param rxQuality 下行网络质量, 接收到的所有远端用户网络质量的平均值
@discussion
当前通话网络状态的回调,该回调方法每秒触发一次
@remarks 代理
*/
- (void)networkTxQuality:(RCCallQuality)txQuality rxQuality:(RCCallQuality)rxQuality;
/*!
当前通话网络状态的回调,该回调方法每秒触发一次
@param txQuality 上行网络质量
@param rxQuality 下行网络质量, 接收到的某个远端用户的网络质量
@param userID 远端用户
@discussion
当前通话网络状态的回调,该回调方法每秒触发一次
@remarks 代理
*/
- (void)networkTxQuality:(RCCallQuality)txQuality rxQuality:(RCCallQuality)rxQuality remoteUserID:(nullable NSString *)userID;
/*!
当前通话某用户声音音量回调,该回调方法每两秒触发一次
@param leavel 声音级别: 0~9, 0为无声, 依次变大
@param userID 用户ID, 本端用户ID(发送音量) 或 远端用户ID(接收音量)
@discussion
当前通话某用户声音音量回调,该回调方法每两秒触发一次
@remarks 代理
*/
- (void)audioLevel:(NSInteger)leavel userID:(nullable NSString *)userID;
/*!
摄像头采集视频帧数据上报
@param pixelBuffer 摄像头采集视频帧数据
@discussion
当前视频通话摄像头采集视频帧数据回调,如果修改了该视频数据,会影响显示本地和发送视频帧数据
@remarks 代理
*/
- (void)processCaptureVideoFrame:(nullable CVPixelBufferRef)pixelBuffer;
/*!
发送本地视频帧数据上报
@param pixelBuffer 发送本地视频帧数据
@discussion
当前视频通话发送本地视频帧数据回调,如果修改了该视频数据,会影响发送视频帧数据
@remarks 代理
*/
- (void)processVideoFrame:(nullable CVPixelBufferRef)pixelBuffer;
/*!
显示本地视频帧数据上报
@param pixelBuffer 显示本地视频数据
@discussion
当前视频通话显示本地视频帧数据回调,如果修改了该视频数据,会影响显示本地视频帧数据
@remarks 代理
*/
- (void)processDisplayVideoFrame:(nullable CVPixelBufferRef)pixelBuffer;
/*!
当前通话为视频通话时, 收到远端用户的第一个视频帧的回调
@param userId 远端用户ID
@remarks 代理
*/
- (void)receiveRemoteUserVideoFirstKeyFrame:(nullable NSString *)userId;
/*!
当前通话为音频或视频通话时, 收到远端用户的第一个音频帧的回调
@param userId 远端用户ID
@remarks 代理
*/
- (void)receiveRemoteUserVideoFirstAudioFrame:(nullable NSString *)userId;
/*!
对端用户视频分辨率变化的回调
@param userId 用户ID
@param size 变化后的视频分辨率
@discussion
对端用户视频分辨率变化的回调
@remarks 代理
*/
- (void)remoteUserDidChangeResolution:(nullable NSString *)userId resolution:(CGSize)size;
@end
@class RCMessagePushConfig;
@protocol RCRTCDrawer;
/*!
通话实体
*/
@interface RCCallSession : NSObject
/*!
通话的会话类型
*/
@property (nonatomic, assign, readonly) RCConversationType conversationType;
/*!
通话ID
*/
@property (nonatomic, strong, readonly, nullable) NSString *callId;
/*!
通话的目标会话ID
*/
@property (nonatomic, strong, readonly, nullable) NSString *targetId;
/*!
RTC会话唯一标识, 用于 Server API
*/
@property (nonatomic, strong, readonly, nullable) NSString *sessionId;
/*!
是否是多方通话
*/
@property (nonatomic, assign, readonly, getter=isMultiCall) BOOL multiCall;
/*!
通话的扩展信息
*/
@property (nonatomic, strong, readonly, nullable) NSString *extra;
/*!
通话的当前状态
*/
@property (nonatomic, assign, readonly) RCCallStatus callStatus;
/*!
通话的最初发起人
*/
@property (nonatomic, strong, readonly, nullable) NSString *caller;
/*!
邀请当前用户加入通话的邀请者
*/
@property (nonatomic, strong, readonly, nullable) NSString *inviter;
/*!
当前的用户列表
*/
@property (nonatomic, strong, readonly, nullable) NSArray<RCCallUserProfile *> *userProfileList;
/*!
自己的状态
*/
@property (nonatomic, strong, readonly, nullable) RCCallUserProfile *myProfile;
/*!
当前用户使用的媒体类型
*/
@property (nonatomic, assign, readonly) RCCallMediaType mediaType;
/*!
通话开始的时间
@discussion 如果是用户呼出的通话则startTime为通话呼出时间如果是呼入的通话则startTime为通话呼入时间。
*/
@property (nonatomic, assign, readonly) long long startTime;
/*!
通话接通时间
*/
@property (nonatomic, assign, readonly) long long connectedTime;
/*!
通话挂断原因
*/
@property (nonatomic, assign) RCCallDisconnectReason disconnectReason;
/*!
设置通话状态变化的监听器
@param delegate 通话状态变化的监听器
@discussion
设置通话状态变化的监听器
@warning
已废弃, 请使用 addDelegate:
@remarks 通话设置
*/
- (void)setDelegate:(id<RCCallSessionDelegate>)delegate DEPRECATED_MSG_ATTRIBUTE("please call method addDelegate:");
/*!
添加通话状态的监听器, 支持多代理
@param delegate 通话状态变化的监听器
@discussion
添加通话状态的监听器, 支持多代理
@remarks 通话设置
*/
- (void)addDelegate:(id<RCCallSessionDelegate>)delegate;
/**
删除通话状态的监听器
@param delegate 通话状态的监听器
@discussion
删除通话状态的监听器
@remarks 通话设置
*/
- (void)removeDelegate:(id<RCCallSessionDelegate>)delegate;
/*!
获取所有的监听器
@discussion
获取所有的监听器
@remarks 通话设置
@return 所有注册的代理数组
*/
- (NSArray<id<RCCallSessionDelegate>> *)allDelegates;
/*!
接听来电
@param type 接听使用的媒体类型
@discussion
接听来电
@remarks 通话管理
*/
- (void)accept:(RCCallMediaType)type;
/*!
挂断通话
@discussion
挂断通话
@remarks 通话管理
*/
- (void)hangup;
/*!
挂断通话
@param block 挂断消息发送回调
@discussion
挂断通话
@remarks 通话管理
*/
- (void)hangup:(nullable void (^)(BOOL isSuccess, NSInteger code))block;
/*!
观察者身份用户, 发布自己的音视频资源
@param mediaType 发布的媒体类型
@param block 发布完成的回调
@discussion
观察者身份用户, 发布自己的音视频资源
@warning
只有观察者用户可以发布音视频资源
@remarks 资源管理
*/
- (void)publishMediaResource:(RCCallMediaType)mediaType complete:(nullable void (^)(BOOL isSuccess, NSInteger code))block;
/*!
正常身份用户, 取消发布自己的音视频资源
@param block 取消发布完成的回调
@discussion
正常身份用户, 取消发布自己的音视频资源
@warning
只有正常用户可以取消发布音视频资源
@remarks 资源管理
*/
- (void)unPublishMediaResource:(nullable void (^)(BOOL isSuccess, NSInteger code))block;
/*!
邀请用户加入通话
@param userIdList 用户ID列表
@param type 建议被邀请者使用的媒体类型
@discussion
邀请用户加入通话
@remarks 通话管理
*/
- (void)inviteRemoteUsers:(nullable NSArray<NSString *> *)userIdList mediaType:(RCCallMediaType)type;
/*!
邀请用户加入通话
@param userIdList 用户ID列表
@param observerIdList 需要以观察者身份加入房间的用户ID列表
@param type 建议被邀请者使用的媒体类型
@discussion
邀请用户加入通话
@remarks 通话管理
*/
- (void)inviteRemoteUsers:(nullable NSArray<NSString *> *)userIdList
observerIdList:(nullable NSArray<NSString *> *)observerIdList
mediaType:(RCCallMediaType)type;
/*!
设置用户所在的视频View
@param userId 用户ID自己或他人
@param view 视频的View
@discussion
设置用户所在的视频View
@remarks 视频配置
*/
- (void)setVideoView:(nullable UIView *)view userId:(nullable NSString *)userId;
/*!
设置用户所在的视频View
@param userId 用户ID自己或他人
@param view 继承RCRTCDrawer 接口 视频的View
@discussion
设置用户所在的视频View
注意:
1.此接口需要RCCallClient中enableMultiPlatformMode设置为YES方可使用
2. view 的生命周期自己处理
@remarks 视频配置
*/
- (int)setMultiPlatformVideoView:(nullable id<RCRTCDrawer>)view userId:(nullable NSString *)userId;
/**
设置用户所在的视频View
@param view userId 用户ID自己或他人)
@param userId 视频的View
@param renderMode 视频显示模式 (默认为RCCallRenderModelHidden)
@discussion
设置用户所在的视频View
@remarks 视频配置
*/
- (void)setVideoView:(nullable UIView *)view userId:(nullable NSString *)userId renderMode:(RCCallRenderModel)renderMode;
/*!
更换自己使用的媒体类型
@param type 媒体类型
@discussion
更换自己使用的媒体类型
@remarks 通话管理
*/
- (BOOL)changeMediaType:(RCCallMediaType)type;
/*!
静音状态
*/
@property (nonatomic, readonly) BOOL isMuted;
/*!
设置静音状态
@param muted 是否静音, 默认值为NO
@discussion
设置静音状态
@remarks 音频配置
@return 是否设置成功
*/
- (BOOL)setMuted:(BOOL)muted;
/*!
是否有最小化窗口
*/
@property (nonatomic, readonly) BOOL minimized;
/*!
设置是否有最小化窗口状态
@param minimized 是否最小化
@discussion
设置是否有最小化窗口状态
@remarks 通话设置
*/
- (void)setMinimized:(BOOL)minimized;
/*!
扬声器状态,是否开启扬声器
@discussion 默认值为NO。
*/
@property (nonatomic, readonly) BOOL speakerEnabled;
/*!
设置扬声器状态
@param speakerEnabled 是否开启扬声器
@discussion
设置扬声器状态
@remarks 音频配置
@return 是否设置成功
*/
- (BOOL)setSpeakerEnabled:(BOOL)speakerEnabled;
/*!
摄像头状态,是否开启摄像头
*/
@property (nonatomic, readonly) BOOL cameraEnabled;
/*!
设置摄像头状态
@param cameraEnabled 是否开启摄像头
@discussion
音频通话的默认值为NO视频通话的默认值为YES。
@remarks 视频配置
@return 是否设置成功
*/
- (BOOL)setCameraEnabled:(BOOL)cameraEnabled;
/*!
切换前后摄像头
@discussion
切换前后摄像头
@remarks 视频配置
@return 是否切换成功
*/
- (BOOL)switchCameraMode;
@end
/*!
静态通话实体
从属性依赖callEngine取值的RCCallSession中copy一个不依赖callEngine的静态对象
*/
@interface RCCallSessionSnapshot : RCCallSession
/// 从其他对象拷贝
- (instancetype)initWithSession:(RCCallSession *)session;
@end
NS_ASSUME_NONNULL_END

View File

@@ -1,98 +0,0 @@
//
// RCCallSummaryMessage.h
// RongCallLib
//
// Created by RongCloud on 16/3/1.
// Copyright © 2016年 RongCloud. All rights reserved.
//
#import <Foundation/Foundation.h>
#import <RongIMLibCore/RongIMLibCore.h>
#import "RCCallCommonDefine.h"
NS_ASSUME_NONNULL_BEGIN
/*!
通话摘要消息的类型名
*/
#define RCCallSummaryMessageTypeIdentifier @"RC:VCSummary"
/*!
通话摘要消息类
@discussion 通话摘要消息类,此消息会进行存储并计入未读消息数。
*/
@interface RCCallSummaryMessage : RCMessageContent
/*!
通话的最初发起人
*/
@property (nonatomic, strong) NSString *caller;
/*!
邀请当前用户加入通话的邀请者
*/
@property (nonatomic, strong) NSString *inviter;
/*!
当前用户最后使用的媒体类型
*/
@property (nonatomic, assign) RCCallMediaType mediaType;
/*!
通话挂断时包含的用户ID列表
*/
@property (nonatomic, strong) NSArray<NSString *> *memberIdList;
/*!
通话开始时间
@discussion
如果是用户呼出的通话则startTime为通话呼出时间如果是呼入的通话则startTime为通话呼入时间。
*/
@property (nonatomic, assign) long long startTime;
/*!
通话接通时间
*/
@property (nonatomic, assign) long long connectedTime;
/*!
通话总时长
*/
@property (nonatomic, assign) long long duration;
/*!
通话结束的原因
*/
@property (nonatomic, assign) RCCallDisconnectReason hangupReason;
/*!
初始化通话摘要消息
@param caller 通话的最初发起人
@param inviter 邀请当前用户加入通话的邀请者
@param mediaType 当前用户最后使用的媒体类型
@param memberIdList 通话挂断时包含的用户ID列表
@param startTime 通话开始时间
@param connectedTime 通话接通时间
@param duration 通话总时长
@param hangupReason 通话结束的原因
@discussion
初始化通话摘要消息
@remarks 资源管理
@return 通话摘要消息的对象
*/
- (instancetype)initWithCaller:(NSString *)caller
inviter:(NSString *)inviter
mediaType:(RCCallMediaType)mediaType
memberIdList:(NSArray<NSString *> *)memberIdList
startTime:(long long)startTime
connectedTime:(long long)connectedTime
duration:(long long)duration
hangupReason:(RCCallDisconnectReason)hangupReason;
@end
NS_ASSUME_NONNULL_END

View File

@@ -1,114 +0,0 @@
//
// RCCallUserProfile.h
// RongCallLib
//
// Created by RongCloud on 16/2/29.
// Copyright © 2016年 RongCloud. All rights reserved.
//
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#import "RCCallCommonDefine.h"
NS_ASSUME_NONNULL_BEGIN
/*!
用户的通话状态
*/
@interface RCCallUserProfile : NSObject
/*!
用户ID
*/
@property (nonatomic, strong) NSString *userId;
/*!
用户的通话媒体连接ID
*/
@property (nonatomic, strong) NSString *mediaId;
/*!
用户所使用的媒体类型
*/
@property (nonatomic, assign) RCCallMediaType mediaType;
/*!
用户的通话状态
*/
@property (nonatomic, assign) RCCallStatus callStatus;
/*!
用户的摄像头是否已经关闭
*/
@property (nonatomic, assign) BOOL cameraDisabled;
/*!
用户的麦克风是否已经关闭
*/
@property (nonatomic, assign) BOOL micDisabled;
/*!
收到通话呼入的时间
@discussion 只有当前登录用户的呼入时间是准确的,其他用户的并不准确
*/
@property (nonatomic, assign) long long startTime;
/*!
通话的接通时间
*/
@property (nonatomic, assign) long long connectedTime;
/*!
通话的挂断时间
*/
@property (nonatomic, assign) long long endTime;
/*!
用户的视频View
*/
@property (nonatomic, strong, nullable) UIView *videoView;
/*!
音视频用户类型
*/
@property (nonatomic, assign) NSInteger blinkUserType DEPRECATED_MSG_ATTRIBUTE("use userType instead") __attribute__((deprecated));
/*!
音视频用户类型
*/
@property (nonatomic, assign) RCCallUserType userType;
/*!
音频主叫接通前声音输出 Yes:外放 NO:听筒
*/
@property (nonatomic, assign) BOOL isSpeakerInAudioMode;
/*!
用户标签
*/
@property (nonatomic, strong, nullable) NSString *tag;
/*!
初始化用户的通话状态
@param userId 用户ID
@param mediaId 用户的通话媒体连接ID
@param mediaType 用户所使用的媒体类型
@param callStatus 用户的通话状态
@param startTime 收到通话呼入的时间
@discussion
初始化用户的通话状态
@remarks 通话设置
@return 用户的通话状态对象
*/
- (instancetype)initWithUserId:(NSString *)userId
mediaId:(nullable NSString *)mediaId
mediaType:(RCCallMediaType)mediaType
callStatus:(RCCallStatus)callStatus
startTime:(long long)startTime;
@end
NS_ASSUME_NONNULL_END

View File

@@ -1,24 +0,0 @@
//
// RongCallLib.h
// RongCallLib
//
// Created by RongCloud on 16/4/25.
// Copyright © 2016年 Rong Cloud. All rights reserved.
//
#import <UIKit/UIKit.h>
//! Project version number for RongCallLib.
FOUNDATION_EXPORT double RongCallLibVersionNumber;
//! Project version string for RongCallLib.
FOUNDATION_EXPORT const unsigned char RongCallLibVersionString[];
// In this header, you should import all the public headers of your framework
// using statements like #import <RongCallLib/PublicHeader.h>
#import <RongCallLib/RCCallClient.h>
#import <RongCallLib/RCCallCommonDefine.h>
#import <RongCallLib/RCCallSession.h>
#import <RongCallLib/RCCallSummaryMessage.h>
#import <RongCallLib/RCCallUserProfile.h>

View File

@@ -1,6 +0,0 @@
framework module RongCallLib {
umbrella header "RongCallLib.h"
export *
module * { export * }
}

View File

@@ -1,536 +0,0 @@
//
// RCCallClient.h
// RongCallLib
//
// Created by RongCloud on 16/2/28.
// Copyright © 2016年 RongCloud. All rights reserved.
//
#import <AVFoundation/AVFoundation.h>
#import <Foundation/Foundation.h>
#import <RongIMLibCore/RongIMLibCore.h>
#import <RongRTCLib/RongRTCLib.h>
#import "RCCallClientSignalServer.h"
#import "RCCallCommonDefine.h"
#import "RCCallSession.h"
NS_ASSUME_NONNULL_BEGIN
/*!
CallLib全局通话呼入的监听器
*/
@protocol RCCallReceiveDelegate <NSObject>
@required
/*!
接收到通话呼入的回调
@param callSession 呼入的通话实体
@discussion
接收到通话呼入的回调
@remarks 代理
*/
- (void)didReceiveCall:(RCCallSession *)callSession;
/*!
接收到通话呼入的远程通知的回调
@param callId 呼入通话的唯一值
@param inviterUserId 通话邀请者的UserId
@param mediaType 通话的媒体类型
@param userIdList 被邀请者的UserId列表
@param userDict 远程推送包含的其他扩展信息
@param isVoIPPush 是否 VoIP 推送
@param pushConfig 推送配置
@discussion
接收到通话呼入的远程通知的回调
@remarks 代理
*/
- (void)didReceiveCallRemoteNotification:(nullable NSString *)callId
inviterUserId:(nullable NSString *)inviterUserId
mediaType:(RCCallMediaType)mediaType
userIdList:(nullable NSArray<NSString *> *)userIdList
userDict:(nullable NSDictionary *)userDict
isVoIPPush:(BOOL)isVoIPPush
pushConfig:(nullable RCMessagePushConfig *)pushConfig;
/*!
接收到取消通话的远程通知的回调
@param callId 呼入通话的唯一值
@param inviterUserId 通话邀请者的UserId
@param mediaType 通话的媒体类型
@param userIdList 被邀请者的UserId列表
@param pushConfig 推送配置
@param isRemoteCancel 是否为远端取消呼叫
@discussion
接收到取消通话的远程通知的回调
@remarks 代理
*/
- (void)didCancelCallRemoteNotification:(nullable NSString *)callId
inviterUserId:(nullable NSString *)inviterUserId
mediaType:(RCCallMediaType)mediaType
userIdList:(nullable NSArray<NSString *> *)userIdList
pushConfig:(nullable RCMessagePushConfig *)pushConfig
isRemoteCancel:(BOOL)isRemoteCancel;
@optional
/*!
接收到通话漏接的回调
@param callSession 呼入的通话实体
@discussion
接收到通话漏接的回调
@remarks 代理
*/
- (void)didMissCall:(RCCallSession *)callSession;
/*!
接收到取消通话的远程通知的回调
@param callId 呼入通话的唯一值
@param inviterUserId 通话邀请者的UserId
@param mediaType 通话的媒体类型
@param userIdList 被邀请者的UserId列表
@discussion
接收到取消通话的远程通知的回调
@remarks 代理
*/
- (void)didCancelCallRemoteNotification:(NSString *)callId
inviterUserId:(NSString *)inviterUserId
mediaType:(RCCallMediaType)mediaType
userIdList:(NSArray *)userIdList
DEPRECATED_MSG_ATTRIBUTE(
"use didCancelCallRemoteNotification:inviterUserId:mediaType:userIdList:pushConfig:isRemoteCancel: instead");
/*!
接收到通话呼入的远程通知的回调
@param callId 呼入通话的唯一值
@param inviterUserId 通话邀请者的UserId
@param mediaType 通话的媒体类型
@param userIdList 被邀请者的UserId列表
@param userDict 远程推送包含的其他扩展信息
@discussion
接收到通话呼入的远程通知的回调
@remarks 代理
*/
- (void)didReceiveCallRemoteNotification:(NSString *)callId
inviterUserId:(NSString *)inviterUserId
mediaType:(RCCallMediaType)mediaType
userIdList:(NSArray *)userIdList
userDict:(NSDictionary *)userDict
DEPRECATED_MSG_ATTRIBUTE(
"use didReceiveCallRemoteNotification:inviterUserId:mediaType:userIdList:userDict:isVoIPPush:pushConfig: "
"instead");
/*!
接收到通话呼入的远程通知的回调
@param callId 呼入通话的唯一值
@param inviterUserId 通话邀请者的UserId
@param mediaType 通话的媒体类型
@param userIdList 被邀请者的UserId列表
@param userDict 远程推送包含的其他扩展信息
@param isVoIPPush 是否 VoIP 推送
@discussion
接收到通话呼入的远程通知的回调
@remarks 代理
*/
- (void)didReceiveCallRemoteNotification:(NSString *)callId
inviterUserId:(NSString *)inviterUserId
mediaType:(RCCallMediaType)mediaType
userIdList:(NSArray *)userIdList
userDict:(NSDictionary *)userDict
isVoIPPush:(BOOL)isVoIPPush
DEPRECATED_MSG_ATTRIBUTE(
"use didReceiveCallRemoteNotification:inviterUserId:mediaType:userIdList:userDict:isVoIPPush:pushConfig: "
"instead");
@end
/*!
语音识别监听器
*/
@protocol RCCallASRDelegate <NSObject>
@optional
/*!
语音识别错误通知回调
@remarks 代理
*/
- (void)didASRError:(NSInteger)code;
/*!
语音识别服务开启通知回调
@remarks 代理
*/
- (void)didReceiveStartASR;
/*!
语音识别服务停止通知回调
@remarks 代理
*/
- (void)didReceiveStopASR;
/*!
语音识别信息回调
@param asrContent 语音识别信息
@remarks 代理
*/
- (void)didReceiveASRContent:(RCRTCASRContent *)asrContent;
/*!
语音翻译内容回调
@param content 语音翻译内容
@remarks 代理
*/
- (void)didReceiveRealtimeTranslationContent:(RCRTCRealtimeTranslationContent *)content;
@end
@class RCMessagePushConfig;
/*!
融云CallLib核心类
*/
@interface RCCallClient : NSObject
/*!
自定义push消息. 应在startCall之前调用
*/
@property (nonatomic, strong, nullable) RCMessagePushConfig *invitePushConfig;
/*!
自定义push消息. 应在startCall之前调用
*/
@property (nonatomic, strong, nullable) RCMessagePushConfig *hangupPushConfig;
/*!
呼叫或通话过程中, 当收到手机号系统来电时, 是否挂断当前呼叫或通话, 默认: Yes 挂断
*/
@property (nonatomic, assign) BOOL canHangupSystemPhonecall;
/*!
在开启 IM 链接多端登录的前提下,同一 UserId 的不同端先后加入通话的处理行为 默认: RCCallJoinCallTypeKick 将先加入通话用户踢出通话
*/
@property (nonatomic, assign) RCCallJoinCallType joinCallType;
/*!
获取融云通话能力库 RCCallClient 的核心类单例
@discussion
您可以通过此方法, 获取 RCCallClient 的单例,访问对象中的属性和方法
@remarks 通话设置
@return 融云通话能力库 RCCallClient 的核心类单例
*/
+ (instancetype)sharedRCCallClient;
/*!
设置全局通话呼入的监听器
@param delegate CallLib全局通话呼入的监听器
@discussion
设置全局通话呼入的监听器
@remarks 通话设置
*/
- (void)setDelegate:(id<RCCallReceiveDelegate>)delegate;
/*!
发起一个通话
@param conversationType 会话类型
@param targetId 目标会话ID, 单人呼叫时targetId为被叫端UserId, 多人呼叫时targetId为群组Id, 请不要填写主叫端UserId, 否则无法发起呼叫
@param userIdList 被叫端的用户ID列表, 数组中仅填写被叫端UserId, 请不要填写主叫端UserId, 否则无法发起呼叫
@param type 发起的通话媒体类型
@param delegate 通话监听
@param extra 附件信息
@discussion
发起一个通话
@remarks 通话管理
@return 呼出的通话实体
*/
- (nullable RCCallSession *)startCall:(RCConversationType)conversationType
targetId:(NSString *)targetId
to:(NSArray<NSString *> *)userIdList
mediaType:(RCCallMediaType)type
sessionDelegate:(id<RCCallSessionDelegate>)delegate
extra:(nullable NSString *)extra;
/*!
发起一个跨应用通话
@param conversationType 会话类型 (仅支持单聊)
@param targetId 目标会话ID, 单人呼叫时targetId为被叫端UserId
@param userIdList 被叫端的用户ID列表, 数组中仅填写被叫端UserId, 请不要填写主叫端UserId, 否则无法发起呼叫注意此处ID组成形式为Appkey+UserId, 格式为appkey_userid注意下划线拼接
@param type 发起的通话媒体类型
@param delegate 通话监听
@param extra 附件信息
@discussion
发起一个通话
@remarks 通话管理
@return 呼出的通话实体
*/
- (RCCallSession *)startCrossCall:(RCConversationType)conversationType
targetId:(NSString *)targetId
to:(NSArray *)userIdList
mediaType:(RCCallMediaType)type
sessionDelegate:(id<RCCallSessionDelegate>)delegate
extra:(nullable NSString *)extra;
/*!
发起一个通话
@param conversationType 会话类型
@param targetId 目标会话ID, 单人呼叫时targetId为被叫端UserId, 多人呼叫时targetId为群组Id
@param userIdList 被叫端的用户ID列表, 数组中仅填写被叫端UserId, 请不要填写主叫端UserId, 否则无法发起呼叫
@param observerIdList 主叫端指定需要以观察者身份加入房间的用户ID列表, 如果主叫端需要以观察者身份加入房间也需要填写主叫端UserId
@param type 发起的通话媒体类型
@param delegate 通话监听
@param extra 附件信息
@discussion
发起一个通话
@remarks 通话管理
@return 呼出的通话实体
*/
- (nullable RCCallSession *)startCall:(RCConversationType)conversationType
targetId:(NSString *)targetId
to:(NSArray<NSString *> *)userIdList
observerIdList:(NSArray<NSString *> *)observerIdList
mediaType:(RCCallMediaType)type
sessionDelegate:(id<RCCallSessionDelegate>)delegate
extra:(nullable NSString *)extra;
/*!
当前会话类型是否支持音频通话
@param conversationType 会话类型
@discussion
当前会话类型是否支持音频通话
@remarks 通话设置
@return 是否支持音频通话
*/
- (BOOL)isAudioCallEnabled:(RCConversationType)conversationType;
/*!
当前会话类型是否支持视频通话
@param conversationType 会话类型
@discussion
当前会话类型是否支持视频通话
@remarks 通话设置
@return 是否支持视频通话
*/
- (BOOL)isVideoCallEnabled:(RCConversationType)conversationType;
/*!
设置本地视频分辨率
@param profile 通话视频分辨率
@discussion
设置本地视频分辨率
@remarks 视频设置
*/
- (void)setVideoProfile:(RCVideoProfile)profile;
/*!
设置本地视频属性, 可用此接口设置本地视频方向
@param orientation 视频方向, 默认: AVCaptureVideoOrientationPortrait
@discussion
设置本地视频属性, 可用此接口设置本地视频方向
@remarks 视频设置
*/
- (void)setVideoOrientation:(AVCaptureVideoOrientation)orientation;
/*!
设置码率
@param rate 码率 单位 kbps
@discussion
设置码率
@remarks 视频设置
*/
- (void)setBitRate:(NSUInteger)rate;
/*!
设置外部信令服务器代理
@param signalServerDelegate 外部信令服务器代理
@discussion
默认情况下 app 使用融云消息作为信令即可, 不需要设置此代理, 此时有个限制就是所有的通话必须在某一个会话中进行, 比如群组.
如果您需要摆脱会话的限制, 请使用 server api 服务实现本代理, 然后 startCall 时 conversationType 传 0, targetId 传 nil, calllib 会调用您设置的代理来发送消息.
请务必使用一个全局代理, 确保在拨打和接听 VoIP 的时候代理对象都存活, 这样才能确保正常通话.
@remarks 通话设置
*/
- (void)setSignalServerDelegate:(id<RCCallSignalServerDelegate>)signalServerDelegate;
/*!
当前的通话会话实体
*/
@property (nonatomic, strong, readonly, nullable) RCCallSession *currentCallSession;
/*!
@remarks 上次通话的通话会话静态实体
@discussion
5.8.0版本callLib修改
currentCallSession有效生命周期由开始通话直到下次通话开始为止变为了由开始通话直到这次通话结束为止
为了弥补这个逻辑缺失新增了lastCallSession从这次通话回调结束以后生效直到下次通话结束失效
*/
@property (nonatomic, strong, readonly, nullable) RCCallSessionSnapshot *lastCallSession;
/*!
是否生成通话记录消息默认为YES
*/
@property (nonatomic, assign) BOOL enableCallSummary;
/*!
是否开启多平台模式默认为NO
*/
@property (nonatomic, assign) BOOL enableMultiPlatformMode;
/*!
设置是否使用苹果 PushKit 推送
@param enable YES 使用, NO 不使用
@discussion
是否打开苹果 PushKit 推送, 该推送可以直接激活 App, 注: iOS 13 以后 PushKit 必须结合苹果 CallKit.framework 进行使用, 否则无法正常处理 VoIP 相关推送逻辑,
如果设置为 NO 则使用普通 APNS 消息推送来处理音视频信令逻辑, 默认关闭. 打开之后 App 默认需要自行处理 VoIP 推送唤起 CallKit.framework 的逻辑.
@remarks 通话设置
*/
- (void)setApplePushKitEnable:(BOOL)enable;
/*!
设置是否使用音视频预热
@param preconnectEnabled YES 使用, NO 不使用
@discussion
默认情况下 SDK 内部会在发送通话信令或接听信令成功的时候,主动进行音视频的预热
@remarks 通话设置
*/
- (void)setPreconnectEnabled:(BOOL)preconnectEnabled;
/*!
设置语音识别监听器
@param delegate 语音识别监听器
@discussion
设置语音识别监听器
@remarks 语音识别设置
*/
- (void)setASRDelegate:(id<RCCallASRDelegate>)delegate;
/*!
设置语音识别源语言
@param languageCode 语言代码
@discussion
设置语音识别源语言
@remarks 语音识别设置
*/
- (void)setSrcLanguageCode:(NSString *)languageCode;
/*!
开启语音识别服务
@param completion 开启语音识别服务回调
@discussion
开启语音识别服务如果房间内没有人发布流则无法开启语音识别服务SDK 会在有人发布流后补偿进行开启语音识别服务
@remarks 语音识别
*/
- (void)startASR:(nullable void (^)(BOOL success, NSInteger code))completion;
/*!
停止语音识别服务
@param completion 停止语音识别服务回调
@discussion
停止语音识别服务
@remarks 语音识别设置
*/
- (void)stopASR:(nullable void (^)(BOOL success, NSInteger code))completion;
/*!
设置是否打开语音识别
@param enable YES 打开, NO 关闭
@return 返回值0 代表成功
@discussion
1. 通话接通后,可以通过此接口打开或关闭语音识别功能;
2. 默认关闭语音识别功能,开启后会在通话过程中自动识别用户语音并转换为文字。
@remarks 语音识别设置
*/
- (int)setEnableASR:(BOOL)enable;
/*!
开启语音翻译
@param destLangCode 翻译目标语言码
@discussion
1. 语音翻译依赖语音识别服务,需要在收到 RCCallASRDelegate 的 didReceiveStartASR 回调后,调用开启语音翻译
2. 开启语音翻译,会通过 RCCallASRDelegate 的 didReceiveRealtimeTranslationContent 回调返回语音翻译结果
@remarks 语音识别设置
*/
- (void)startRealtimeTranslation:(NSString *)destLangCode copmletion:(nullable void (^)(BOOL success, NSInteger code))completion;
/*!
关闭语音翻译
@discussion
关闭语音翻译
@remarks 语音识别设置
*/
- (void)stopRealtimeTranslation:(nullable void (^)(BOOL success, NSInteger code))completion;
/*!
获取 SDK 版本号
@return 版本号
@remarks 参数配置
*/
+ (NSString *)getVersion;
@end
NS_ASSUME_NONNULL_END

View File

@@ -1,69 +0,0 @@
//
// RCCallClientSignalServer.h
// RongCallLib
//
// Created by RongCloud on 2017/7/25.
// Copyright © 2017年 Rong Cloud. All rights reserved.
//
#ifndef RCCallClientSignalServer_h
#define RCCallClientSignalServer_h
#import <RongCallLib/RongCallLib.h>
#import "RCCallSummaryMessage.h"
NS_ASSUME_NONNULL_BEGIN
/*!
信令服务代理
*/
@protocol RCCallSignalServerDelegate <NSObject>
/*!
获取通话参与者的唯一媒体ID, 必须保证每次电话会议的每个人的媒体ID都是全局唯一的
@param successBlock 为当前用户分配的媒体Id成功的回调
@param errorBlcok 获取媒体Id失败的回调
@discussion
获取通话参与者的唯一媒体ID, 必须保证每次电话会议的每个人的媒体ID都是全局唯一的
@remarks 代理
*/
- (void)getUniqueMediaId:(nullable void (^)(NSString *mediaId))successBlock error:(nullable void (^)(int errorCode))errorBlcok;
/*!
发送 VoIP 信令消息
@param messageContent 消息内容
@param toUserIdList 接收者的Id
@param pushContent pushContent
@param pushData pushData
@param successBlock 成功的回调
@param errorBlcok 失败的回调
@discussion
发送 VoIP 信令消息
@remarks 代理
*/
- (void)sendVoipSignalMessage:(RCMessageContent *)messageContent
toUserIdList:(NSArray<NSString *> *)toUserIdList
pushContent:(nullable NSString *)pushContent
pushData:(nullable NSString *)pushData
success:(nullable void (^)(void))successBlock
error:(nullable void (^)(int errorCode))errorBlcok;
/*!
VoIP 通话结束返回的统计信息
@param summary 通话统计
@discussion
VoIP 通话结束返回的统计信息
@remarks 代理
*/
- (void)onVoipCallSummary:(RCCallSummaryMessage *)summary;
@end
NS_ASSUME_NONNULL_END
#endif /* RCCallClientSignalServer_h */

View File

@@ -1,454 +0,0 @@
//
// RCCallCommonDefine.h
// RongCallLib
//
// Created by RongCloud on 16/2/28.
// Copyright © 2016年 RongCloud. All rights reserved.
//
#ifndef RCCallCommonDefine_h
#define RCCallCommonDefine_h
/*!
引擎类型
*/
typedef NS_ENUM(NSInteger, RCCallEngineType) {
/*!
*/
RCCallEngineNone = 0,
/*!
声网
*/
RCCallEngineAgora = 1,
/*!
融云
*/
RCCallEngineRong = 2,
/*!
Blink
*/
RCCallEngineBlink = 3,
/*!
RTC3.0
*/
RCCallEngineRongRTC = 4
};
/*!
媒体类型
*/
typedef NS_ENUM(NSInteger, RCCallMediaType) {
/*!
音频
*/
RCCallMediaAudio = 1,
/*!
视频
*/
RCCallMediaVideo = 2
};
/*!
媒体类型
*/
typedef NS_ENUM(NSInteger, RCCallRoomType) {
/*!
同App通话
*/
RCCallRoomTypeNormalCall = 0,
/*!
跨App通话
*/
RCCallRoomTypeCrossCall = 7
};
/*!
通话质量
*/
typedef NS_ENUM(NSUInteger, RCCallQuality) {
/*!
未知
*/
RCCall_Quality_Unknown = 0,
/*!
Excellent
*/
RCCall_Quality_Excellent = 1,
/*!
Good
*/
RCCall_Quality_Good = 2,
/*!
Poor
*/
RCCall_Quality_Poor = 3,
/*!
Bad
*/
RCCall_Quality_Bad = 4,
/*!
VBad
*/
RCCall_Quality_VBad = 5,
/*!
Down
*/
RCCall_Quality_Down = 6
};
/**
视频显示模式
*/
typedef NS_ENUM(NSInteger, RCCallRenderModel) {
/*!
默认: 如果视频尺寸与显示视窗尺寸不一致,则视频流会按照显示视窗的比例进行周边裁剪或图像拉伸后填满视窗。
*/
RCCallRenderModelHidden = 1,
/*!
RenderFit: 如果视频尺寸与显示视窗尺寸不一致,在保持长宽比的前提下,将视频进行缩放后填满视窗。
*/
RCCallRenderModelFit = 2,
/*!
RenderAdaptive: 如果自己和对方都是竖屏,或者如果自己和对方都是横屏,使用
RCCallRenderModelHidden如果对方和自己一个竖屏一个横屏则使用RCCallRenderModelFit。
*/
RCCallRenderModelAdaptive = 3
};
#pragma mark - Call
/*!
错误码
*/
typedef NS_ENUM(NSInteger, RCCallErrorCode) {
/*!
成功
*/
RCCallSuccess = 0,
/*!
网络不可用
*/
RCCallNetworkUnavailable = 1,
/*!
已经处于通话中了
*/
RCCallOneCallExisted = 2,
/*!
无效操作
*/
RCCallOperationUnavailable = 3,
/*!
参数错误
*/
RCCallInvalidParam = 4,
/*!
网络不稳定
*/
RCCallNetworkUnstable = 5,
/*!
媒体服务请求失败
*/
RCCallMediaRequestFailed = 6,
/*!
媒体服务初始化失败
*/
RCCallMediaServerNotReady = 7,
/*!
媒体服务未初始化
*/
RCCallMediaServerNotInitialized = 8,
/*!
媒体服务请求超时
*/
RCCallMediaRequestTimeout = 9,
/*!
未知的媒体服务错误
*/
RCCallMediaUnkownError = 10,
/*!
已被禁止通话
*/
RCCallMediaKickedByServerError = 11,
/*!
音视频服务已关闭
*/
RCCallMediaServerClosedError = 12,
/*!
音视频发布资源失败
*/
RCCallMediaServerPublishError = 13,
/*!
音视频订阅资源失败
*/
RCCallMediaServerSubscribeError = 14,
/*!
其他端已在通话中
*/
RCCallMediaJoinRoomRefuseError = 15,
/*!
己方其他端已加入其他房间
*/
RCCallMediaOtherClientJoinedRoom = 16
};
/*!
通话结束原因
*/
typedef NS_ENUM(NSInteger, RCCallDisconnectReason) {
/*!
己方取消已发出的通话请求
*/
RCCallDisconnectReasonCancel = 1,
/*!
己方拒绝收到的通话请求
*/
RCCallDisconnectReasonReject = 2,
/*!
己方挂断
*/
RCCallDisconnectReasonHangup = 3,
/*!
己方忙碌
*/
RCCallDisconnectReasonBusyLine = 4,
/*!
己方未接听
*/
RCCallDisconnectReasonNoResponse = 5,
/*!
己方不支持当前引擎
*/
RCCallDisconnectReasonEngineUnsupported = 6,
/*!
己方网络出错
*/
RCCallDisconnectReasonNetworkError = 7,
/*!
己方获取媒体资源失败
*/
RCCallDisconnectReasonResourceError = 8,
/*!
己方发布资源失败
*/
RCCallDisconnectReasonPublishError = 9,
/*!
己方订阅资源失败
*/
RCCallDisconnectReasonSubscribeError = 10,
/*!
对方取消已发出的通话请求
*/
RCCallDisconnectReasonRemoteCancel = 11,
/*!
对方拒绝收到的通话请求
*/
RCCallDisconnectReasonRemoteReject = 12,
/*!
对方挂断
*/
RCCallDisconnectReasonRemoteHangup = 13,
/*!
对方忙碌
*/
RCCallDisconnectReasonRemoteBusyLine = 14,
/*!
对方未接听
*/
RCCallDisconnectReasonRemoteNoResponse = 15,
/*!
对方不支持当前引擎
*/
RCCallDisconnectReasonRemoteEngineUnsupported = 16,
/*!
对方网络错误
*/
RCCallDisconnectReasonRemoteNetworkError = 17,
/*!
对方获取媒体资源失败
*/
RCCallDisconnectReasonRemoteResourceError = 18,
/*!
对方发布资源失败
*/
RCCallDisconnectReasonRemotePublishError = 19,
/*!
对方订阅资源失败
*/
RCCallDisconnectReasonRemoteSubscribeError = 20,
/*!
己方其他端已加入新通话
*/
RCCallDisconnectReasonKickedByOtherCall = 21,
/*!
己方其他端已在通话中
*/
RCCallDisconnectReasonInOtherCall = 22,
/*!
己方已被禁止通话
*/
RCCallDisconnectReasonKickedByServer = 23,
/*!
己方已接听系统来电
*/
RCCallDisconnectReasonAcceptSystemCall = 24,
/*!
对方其他端已加入新通话
*/
RCCallDisconnectReasonRemoteKickedByOtherCall = 31,
/*!
对方其他端已在通话中
*/
RCCallDisconnectReasonRemoteInOtherCall = 32,
/*!
对方已被禁止通话
*/
RCCallDisconnectReasonRemoteKickedByServer = 33,
/*!
对方已接听系统来电
*/
RCCallDisconnectReasonRemoteAcceptSystemCall = 34,
/*!
己方其他端已接听
*/
RCCallDisconnectReasonAcceptByOtherClient = 101,
/*!
己方其他端已挂断
*/
RCCallDisconnectReasonHangupByOtherClient = 102,
/*!
己方被对方加入黑名单
*/
RCCallDisconnectReasonAddToBlackList = 103,
/*!
音视频服务已关闭
*/
RCCallDisconnectReasonMediaServerClosed = 104,
/*!
己方被降级为观察者
*/
RCCallDisconnectReasonDegrade = 301
};
/*!
通话视频参数
*/
typedef NS_ENUM(NSInteger, RCVideoProfile) {
/*!
176x132, 10fps, 150kbps
*/
RC_VIDEO_PROFILE_132P = 10,
/*!
256x144, 15fps, 240kbps
*/
RC_VIDEO_PROFILE_144P_1 = 11,
/*!
240x240, 15fps, 280kbps
*/
RC_VIDEO_PROFILE_240P = 20,
/*!
320x240, 15fps, 400kbps
*/
RC_VIDEO_PROFILE_240P_1 = 21,
/*!
480x360, 15fps, 650kbps
*/
RC_VIDEO_PROFILE_360P = 30,
/*!
640x360, 15fps, 800kbps
*/
RC_VIDEO_PROFILE_360P_1 = 40,
/*!
640x480, 15fps, 900kbps
*/
RC_VIDEO_PROFILE_480P = 50,
/*!
720x480, 15fps, 1000kbps
*/
RC_VIDEO_PROFILE_480P_1 = 60,
/*!
1280x720, 15fps, 2500kbps
*/
RC_VIDEO_PROFILE_720P = 70,
/*
1920*1080, 15fps, 4000kbps
*/
RC_VIDEO_PROFILE_1080P = 80,
/*!
默认的视频参数
*/
RC_VIDEO_PROFILE_DEFAULT = RC_VIDEO_PROFILE_480P
};
/*!
视频编码方式
*/
typedef NS_ENUM(NSInteger, RCVideoCodecType) {
/*!
H264
*/
RC_VIDEO_CODEC_H264
};
/*!
通话状态
*/
typedef NS_ENUM(NSInteger, RCCallStatus) {
/*!
初始状态
*/
//RCCallIdle = 0,
/*!
正在呼出
*/
RCCallDialing = 1,
/*!
正在呼入
*/
RCCallIncoming = 2,
/*!
收到一个通话呼入后,正在振铃
*/
RCCallRinging = 3,
/*!
正在通话
*/
RCCallActive = 4,
/*!
已经挂断
*/
RCCallHangup = 5
};
/*!
用户类型
*/
typedef NS_ENUM(NSInteger, RCCallUserType) {
/*!
正常用户
*/
RCCallUserNormal = 1,
/*!
观察者
*/
RCCallUserObserver = 2
};
/*!
同UserId两端同时加入通话类型
*/
typedef NS_ENUM(NSUInteger, RCCallJoinCallType) {
/*!
将先加入通话用户踢出通话
*/
RCCallJoinCallTypeKick,
/*!
拒绝当前用户加入通话
*/
RCCallJoinCallTypeRefuse,
};
#endif /* RCCallCommonDefine_h */

View File

@@ -1,687 +0,0 @@
//
// RCCallSession.h
// RongCallLib
//
// Created by RongCloud on 16/2/29.
// Copyright © 2016年 RongCloud. All rights reserved.
//
#import <CoreMedia/CoreMedia.h>
#import <Foundation/Foundation.h>
#import <RongIMLibCore/RongIMLibCore.h>
#import "RCCallCommonDefine.h"
#import "RCCallUserProfile.h"
NS_ASSUME_NONNULL_BEGIN
/*!
通话状态变化的监听器
*/
@protocol RCCallSessionDelegate <NSObject>
@optional
/*!
通话已接通
@discussion
通话已接通
@remarks 代理
*/
- (void)callDidConnect;
/*!
通话已结束
@discussion
通话已结束
@remarks 代理
*/
- (void)callDidDisconnect;
/*!
通话已结束
@param reason 挂断原因
@discussion
通话已结束
@warning
这个接口和callDidDisconnect 回调方法相同,增加返回挂断原因。
同时实现本回调通话已结束将不会再通过callDidDisconnect 处理。
@remarks 代理
*/
- (void)callDidDisconnectWithReason:(RCCallDisconnectReason)reason;
/*!
对端用户正在振铃
@param userId 正在振铃的用户ID
@discussion
对端用户正在振铃
@remarks 代理
*/
- (void)remoteUserDidRing:(NSString *)userId;
/*!
有用户被邀请加入通话
@param userId 被邀请的用户ID
@param mediaType 希望被邀请者使用的媒体类型
@discussion
有用户被邀请加入通话
@remarks 代理
*/
- (void)remoteUserDidInvite:(NSString *)userId mediaType:(RCCallMediaType)mediaType;
/*!
对端用户加入了通话
@param userId 用户ID
@param mediaType 用户的媒体类型
@discussion
对端用户加入了通话
@remarks 代理
*/
- (void)remoteUserDidJoin:(NSString *)userId mediaType:(RCCallMediaType)mediaType;
/*!
对端用户切换了媒体类型
@param userId 用户ID
@param mediaType 切换至的媒体类型
@discussion
对端用户切换了媒体类型
@remarks 代理
*/
- (void)remoteUserDidChangeMediaType:(NSString *)userId mediaType:(RCCallMediaType)mediaType;
/*!
对端用户开启或关闭了麦克风的状态
@param disabled 是否关闭麦克风
@param userId 用户ID
@discussion
对端用户开启或关闭了麦克风的状态
@remarks 代理
*/
- (void)remoteUserDidDisableMicrophone:(BOOL)disabled byUser:(NSString *)userId;
/*!
对端用户开启或关闭了摄像头的状态
@param disabled 是否关闭摄像头
@param userId 用户ID
@discussion
对端用户开启或关闭了摄像头的状态
@remarks 代理
*/
- (void)remoteUserDidDisableCamera:(BOOL)disabled byUser:(NSString *)userId;
/*!
对端用户挂断
@param userId 用户ID
@param reason 挂断的原因
@discussion
对端用户挂断
@remarks 代理
*/
- (void)remoteUserDidLeft:(NSString *)userId reason:(RCCallDisconnectReason)reason;
/*!
对端用户发布自定义媒体流
@param streamId 自定义流ID
@param tag 自定义流标签
@param mediaType 媒体类型
@discussion
对端用户发布自定义媒体流
@remarks 代理
*/
- (void)remoteUserDidPublishCustomMediaStream:(NSString *)streamId
streamTag:(NSString *)tag
mediaType:(RCCallMediaType)mediaType;
/*!
对端用户取消发布自定义媒体流
@param streamId 自定义流ID
@discussion
对端用户取消发布自定义媒体流
@remarks 代理
*/
- (void)remoteUserDidCancelPublishCustomMediaStream:(NSString *)streamId;
/*!
本地发布资源上报
@param success 发布资源是否成功
@discussion
本地发布资源上报
@remarks 代理
*/
- (void)localUserDidPublishStream:(BOOL)success;
/*!
彩铃
@discussion
彩铃
@remarks 代理
*/
- (void)shouldAlertForWaitingRemoteResponse;
/*!
来电铃声
@discussion
来电铃声
@remarks 代理
*/
- (void)shouldRingForIncomingCall;
/*!
通话接通或挂断时停止播放铃声
@discussion
通话接通或挂断时停止播放铃声
@remarks 代理
*/
- (void)shouldStopAlertAndRing;
/*!
通话过程中的错误回调
@param error 错误码
@discussion
通话过程中的错误回调
@warning
这个接口回调的错误码主要是为了提供必要的log以及提示用户如果是不可恢复的错误SDK会挂断电话并回调callDidDisconnectApp可以在callDidDisconnect中统一处理通话结束的逻辑
@remarks 代理
*/
- (void)errorDidOccur:(RCCallErrorCode)error;
/*!
当前通话网络状态的回调,该回调方法每秒触发一次
@param txQuality 上行网络质量
@param rxQuality 下行网络质量, 接收到的所有远端用户网络质量的平均值
@discussion
当前通话网络状态的回调,该回调方法每秒触发一次
@remarks 代理
*/
- (void)networkTxQuality:(RCCallQuality)txQuality rxQuality:(RCCallQuality)rxQuality;
/*!
当前通话网络状态的回调,该回调方法每秒触发一次
@param txQuality 上行网络质量
@param rxQuality 下行网络质量, 接收到的某个远端用户的网络质量
@param userID 远端用户
@discussion
当前通话网络状态的回调,该回调方法每秒触发一次
@remarks 代理
*/
- (void)networkTxQuality:(RCCallQuality)txQuality rxQuality:(RCCallQuality)rxQuality remoteUserID:(nullable NSString *)userID;
/*!
当前通话某用户声音音量回调,该回调方法每两秒触发一次
@param leavel 声音级别: 0~9, 0为无声, 依次变大
@param userID 用户ID, 本端用户ID(发送音量) 或 远端用户ID(接收音量)
@discussion
当前通话某用户声音音量回调,该回调方法每两秒触发一次
@remarks 代理
*/
- (void)audioLevel:(NSInteger)leavel userID:(nullable NSString *)userID;
/*!
摄像头采集视频帧数据上报
@param pixelBuffer 摄像头采集视频帧数据
@discussion
当前视频通话摄像头采集视频帧数据回调,如果修改了该视频数据,会影响显示本地和发送视频帧数据
@remarks 代理
*/
- (void)processCaptureVideoFrame:(nullable CVPixelBufferRef)pixelBuffer;
/*!
发送本地视频帧数据上报
@param pixelBuffer 发送本地视频帧数据
@discussion
当前视频通话发送本地视频帧数据回调,如果修改了该视频数据,会影响发送视频帧数据
@remarks 代理
*/
- (void)processVideoFrame:(nullable CVPixelBufferRef)pixelBuffer;
/*!
显示本地视频帧数据上报
@param pixelBuffer 显示本地视频数据
@discussion
当前视频通话显示本地视频帧数据回调,如果修改了该视频数据,会影响显示本地视频帧数据
@remarks 代理
*/
- (void)processDisplayVideoFrame:(nullable CVPixelBufferRef)pixelBuffer;
/*!
当前通话为视频通话时, 收到远端用户的第一个视频帧的回调
@param userId 远端用户ID
@remarks 代理
*/
- (void)receiveRemoteUserVideoFirstKeyFrame:(nullable NSString *)userId;
/*!
当前通话为音频或视频通话时, 收到远端用户的第一个音频帧的回调
@param userId 远端用户ID
@remarks 代理
*/
- (void)receiveRemoteUserVideoFirstAudioFrame:(nullable NSString *)userId;
/*!
对端用户视频分辨率变化的回调
@param userId 用户ID
@param size 变化后的视频分辨率
@discussion
对端用户视频分辨率变化的回调
@remarks 代理
*/
- (void)remoteUserDidChangeResolution:(nullable NSString *)userId resolution:(CGSize)size;
@end
@class RCMessagePushConfig;
@protocol RCRTCDrawer;
/*!
通话实体
*/
@interface RCCallSession : NSObject
/*!
通话的会话类型
*/
@property (nonatomic, assign, readonly) RCConversationType conversationType;
/*!
通话ID
*/
@property (nonatomic, strong, readonly, nullable) NSString *callId;
/*!
通话的目标会话ID
*/
@property (nonatomic, strong, readonly, nullable) NSString *targetId;
/*!
RTC会话唯一标识, 用于 Server API
*/
@property (nonatomic, strong, readonly, nullable) NSString *sessionId;
/*!
是否是多方通话
*/
@property (nonatomic, assign, readonly, getter=isMultiCall) BOOL multiCall;
/*!
通话的扩展信息
*/
@property (nonatomic, strong, readonly, nullable) NSString *extra;
/*!
通话的当前状态
*/
@property (nonatomic, assign, readonly) RCCallStatus callStatus;
/*!
通话的最初发起人
*/
@property (nonatomic, strong, readonly, nullable) NSString *caller;
/*!
邀请当前用户加入通话的邀请者
*/
@property (nonatomic, strong, readonly, nullable) NSString *inviter;
/*!
当前的用户列表
*/
@property (nonatomic, strong, readonly, nullable) NSArray<RCCallUserProfile *> *userProfileList;
/*!
自己的状态
*/
@property (nonatomic, strong, readonly, nullable) RCCallUserProfile *myProfile;
/*!
当前用户使用的媒体类型
*/
@property (nonatomic, assign, readonly) RCCallMediaType mediaType;
/*!
通话开始的时间
@discussion 如果是用户呼出的通话则startTime为通话呼出时间如果是呼入的通话则startTime为通话呼入时间。
*/
@property (nonatomic, assign, readonly) long long startTime;
/*!
通话接通时间
*/
@property (nonatomic, assign, readonly) long long connectedTime;
/*!
通话挂断原因
*/
@property (nonatomic, assign) RCCallDisconnectReason disconnectReason;
/*!
设置通话状态变化的监听器
@param delegate 通话状态变化的监听器
@discussion
设置通话状态变化的监听器
@warning
已废弃, 请使用 addDelegate:
@remarks 通话设置
*/
- (void)setDelegate:(id<RCCallSessionDelegate>)delegate DEPRECATED_MSG_ATTRIBUTE("please call method addDelegate:");
/*!
添加通话状态的监听器, 支持多代理
@param delegate 通话状态变化的监听器
@discussion
添加通话状态的监听器, 支持多代理
@remarks 通话设置
*/
- (void)addDelegate:(id<RCCallSessionDelegate>)delegate;
/**
删除通话状态的监听器
@param delegate 通话状态的监听器
@discussion
删除通话状态的监听器
@remarks 通话设置
*/
- (void)removeDelegate:(id<RCCallSessionDelegate>)delegate;
/*!
获取所有的监听器
@discussion
获取所有的监听器
@remarks 通话设置
@return 所有注册的代理数组
*/
- (NSArray<id<RCCallSessionDelegate>> *)allDelegates;
/*!
接听来电
@param type 接听使用的媒体类型
@discussion
接听来电
@remarks 通话管理
*/
- (void)accept:(RCCallMediaType)type;
/*!
挂断通话
@discussion
挂断通话
@remarks 通话管理
*/
- (void)hangup;
/*!
挂断通话
@param block 挂断消息发送回调
@discussion
挂断通话
@remarks 通话管理
*/
- (void)hangup:(nullable void (^)(BOOL isSuccess, NSInteger code))block;
/*!
观察者身份用户, 发布自己的音视频资源
@param mediaType 发布的媒体类型
@param block 发布完成的回调
@discussion
观察者身份用户, 发布自己的音视频资源
@warning
只有观察者用户可以发布音视频资源
@remarks 资源管理
*/
- (void)publishMediaResource:(RCCallMediaType)mediaType complete:(nullable void (^)(BOOL isSuccess, NSInteger code))block;
/*!
正常身份用户, 取消发布自己的音视频资源
@param block 取消发布完成的回调
@discussion
正常身份用户, 取消发布自己的音视频资源
@warning
只有正常用户可以取消发布音视频资源
@remarks 资源管理
*/
- (void)unPublishMediaResource:(nullable void (^)(BOOL isSuccess, NSInteger code))block;
/*!
邀请用户加入通话
@param userIdList 用户ID列表
@param type 建议被邀请者使用的媒体类型
@discussion
邀请用户加入通话
@remarks 通话管理
*/
- (void)inviteRemoteUsers:(nullable NSArray<NSString *> *)userIdList mediaType:(RCCallMediaType)type;
/*!
邀请用户加入通话
@param userIdList 用户ID列表
@param observerIdList 需要以观察者身份加入房间的用户ID列表
@param type 建议被邀请者使用的媒体类型
@discussion
邀请用户加入通话
@remarks 通话管理
*/
- (void)inviteRemoteUsers:(nullable NSArray<NSString *> *)userIdList
observerIdList:(nullable NSArray<NSString *> *)observerIdList
mediaType:(RCCallMediaType)type;
/*!
设置用户所在的视频View
@param userId 用户ID自己或他人
@param view 视频的View
@discussion
设置用户所在的视频View
@remarks 视频配置
*/
- (void)setVideoView:(nullable UIView *)view userId:(nullable NSString *)userId;
/*!
设置用户所在的视频View
@param userId 用户ID自己或他人
@param view 继承RCRTCDrawer 接口 视频的View
@discussion
设置用户所在的视频View
注意:
1.此接口需要RCCallClient中enableMultiPlatformMode设置为YES方可使用
2. view 的生命周期自己处理
@remarks 视频配置
*/
- (int)setMultiPlatformVideoView:(nullable id<RCRTCDrawer>)view userId:(nullable NSString *)userId;
/**
设置用户所在的视频View
@param view userId 用户ID自己或他人)
@param userId 视频的View
@param renderMode 视频显示模式 (默认为RCCallRenderModelHidden)
@discussion
设置用户所在的视频View
@remarks 视频配置
*/
- (void)setVideoView:(nullable UIView *)view userId:(nullable NSString *)userId renderMode:(RCCallRenderModel)renderMode;
/*!
更换自己使用的媒体类型
@param type 媒体类型
@discussion
更换自己使用的媒体类型
@remarks 通话管理
*/
- (BOOL)changeMediaType:(RCCallMediaType)type;
/*!
静音状态
*/
@property (nonatomic, readonly) BOOL isMuted;
/*!
设置静音状态
@param muted 是否静音, 默认值为NO
@discussion
设置静音状态
@remarks 音频配置
@return 是否设置成功
*/
- (BOOL)setMuted:(BOOL)muted;
/*!
是否有最小化窗口
*/
@property (nonatomic, readonly) BOOL minimized;
/*!
设置是否有最小化窗口状态
@param minimized 是否最小化
@discussion
设置是否有最小化窗口状态
@remarks 通话设置
*/
- (void)setMinimized:(BOOL)minimized;
/*!
扬声器状态,是否开启扬声器
@discussion 默认值为NO。
*/
@property (nonatomic, readonly) BOOL speakerEnabled;
/*!
设置扬声器状态
@param speakerEnabled 是否开启扬声器
@discussion
设置扬声器状态
@remarks 音频配置
@return 是否设置成功
*/
- (BOOL)setSpeakerEnabled:(BOOL)speakerEnabled;
/*!
摄像头状态,是否开启摄像头
*/
@property (nonatomic, readonly) BOOL cameraEnabled;
/*!
设置摄像头状态
@param cameraEnabled 是否开启摄像头
@discussion
音频通话的默认值为NO视频通话的默认值为YES。
@remarks 视频配置
@return 是否设置成功
*/
- (BOOL)setCameraEnabled:(BOOL)cameraEnabled;
/*!
切换前后摄像头
@discussion
切换前后摄像头
@remarks 视频配置
@return 是否切换成功
*/
- (BOOL)switchCameraMode;
@end
/*!
静态通话实体
从属性依赖callEngine取值的RCCallSession中copy一个不依赖callEngine的静态对象
*/
@interface RCCallSessionSnapshot : RCCallSession
/// 从其他对象拷贝
- (instancetype)initWithSession:(RCCallSession *)session;
@end
NS_ASSUME_NONNULL_END

View File

@@ -1,98 +0,0 @@
//
// RCCallSummaryMessage.h
// RongCallLib
//
// Created by RongCloud on 16/3/1.
// Copyright © 2016年 RongCloud. All rights reserved.
//
#import <Foundation/Foundation.h>
#import <RongIMLibCore/RongIMLibCore.h>
#import "RCCallCommonDefine.h"
NS_ASSUME_NONNULL_BEGIN
/*!
通话摘要消息的类型名
*/
#define RCCallSummaryMessageTypeIdentifier @"RC:VCSummary"
/*!
通话摘要消息类
@discussion 通话摘要消息类,此消息会进行存储并计入未读消息数。
*/
@interface RCCallSummaryMessage : RCMessageContent
/*!
通话的最初发起人
*/
@property (nonatomic, strong) NSString *caller;
/*!
邀请当前用户加入通话的邀请者
*/
@property (nonatomic, strong) NSString *inviter;
/*!
当前用户最后使用的媒体类型
*/
@property (nonatomic, assign) RCCallMediaType mediaType;
/*!
通话挂断时包含的用户ID列表
*/
@property (nonatomic, strong) NSArray<NSString *> *memberIdList;
/*!
通话开始时间
@discussion
如果是用户呼出的通话则startTime为通话呼出时间如果是呼入的通话则startTime为通话呼入时间。
*/
@property (nonatomic, assign) long long startTime;
/*!
通话接通时间
*/
@property (nonatomic, assign) long long connectedTime;
/*!
通话总时长
*/
@property (nonatomic, assign) long long duration;
/*!
通话结束的原因
*/
@property (nonatomic, assign) RCCallDisconnectReason hangupReason;
/*!
初始化通话摘要消息
@param caller 通话的最初发起人
@param inviter 邀请当前用户加入通话的邀请者
@param mediaType 当前用户最后使用的媒体类型
@param memberIdList 通话挂断时包含的用户ID列表
@param startTime 通话开始时间
@param connectedTime 通话接通时间
@param duration 通话总时长
@param hangupReason 通话结束的原因
@discussion
初始化通话摘要消息
@remarks 资源管理
@return 通话摘要消息的对象
*/
- (instancetype)initWithCaller:(NSString *)caller
inviter:(NSString *)inviter
mediaType:(RCCallMediaType)mediaType
memberIdList:(NSArray<NSString *> *)memberIdList
startTime:(long long)startTime
connectedTime:(long long)connectedTime
duration:(long long)duration
hangupReason:(RCCallDisconnectReason)hangupReason;
@end
NS_ASSUME_NONNULL_END

View File

@@ -1,114 +0,0 @@
//
// RCCallUserProfile.h
// RongCallLib
//
// Created by RongCloud on 16/2/29.
// Copyright © 2016年 RongCloud. All rights reserved.
//
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#import "RCCallCommonDefine.h"
NS_ASSUME_NONNULL_BEGIN
/*!
用户的通话状态
*/
@interface RCCallUserProfile : NSObject
/*!
用户ID
*/
@property (nonatomic, strong) NSString *userId;
/*!
用户的通话媒体连接ID
*/
@property (nonatomic, strong) NSString *mediaId;
/*!
用户所使用的媒体类型
*/
@property (nonatomic, assign) RCCallMediaType mediaType;
/*!
用户的通话状态
*/
@property (nonatomic, assign) RCCallStatus callStatus;
/*!
用户的摄像头是否已经关闭
*/
@property (nonatomic, assign) BOOL cameraDisabled;
/*!
用户的麦克风是否已经关闭
*/
@property (nonatomic, assign) BOOL micDisabled;
/*!
收到通话呼入的时间
@discussion 只有当前登录用户的呼入时间是准确的,其他用户的并不准确
*/
@property (nonatomic, assign) long long startTime;
/*!
通话的接通时间
*/
@property (nonatomic, assign) long long connectedTime;
/*!
通话的挂断时间
*/
@property (nonatomic, assign) long long endTime;
/*!
用户的视频View
*/
@property (nonatomic, strong, nullable) UIView *videoView;
/*!
音视频用户类型
*/
@property (nonatomic, assign) NSInteger blinkUserType DEPRECATED_MSG_ATTRIBUTE("use userType instead") __attribute__((deprecated));
/*!
音视频用户类型
*/
@property (nonatomic, assign) RCCallUserType userType;
/*!
音频主叫接通前声音输出 Yes:外放 NO:听筒
*/
@property (nonatomic, assign) BOOL isSpeakerInAudioMode;
/*!
用户标签
*/
@property (nonatomic, strong, nullable) NSString *tag;
/*!
初始化用户的通话状态
@param userId 用户ID
@param mediaId 用户的通话媒体连接ID
@param mediaType 用户所使用的媒体类型
@param callStatus 用户的通话状态
@param startTime 收到通话呼入的时间
@discussion
初始化用户的通话状态
@remarks 通话设置
@return 用户的通话状态对象
*/
- (instancetype)initWithUserId:(NSString *)userId
mediaId:(nullable NSString *)mediaId
mediaType:(RCCallMediaType)mediaType
callStatus:(RCCallStatus)callStatus
startTime:(long long)startTime;
@end
NS_ASSUME_NONNULL_END

View File

@@ -1,24 +0,0 @@
//
// RongCallLib.h
// RongCallLib
//
// Created by RongCloud on 16/4/25.
// Copyright © 2016年 Rong Cloud. All rights reserved.
//
#import <UIKit/UIKit.h>
//! Project version number for RongCallLib.
FOUNDATION_EXPORT double RongCallLibVersionNumber;
//! Project version string for RongCallLib.
FOUNDATION_EXPORT const unsigned char RongCallLibVersionString[];
// In this header, you should import all the public headers of your framework
// using statements like #import <RongCallLib/PublicHeader.h>
#import <RongCallLib/RCCallClient.h>
#import <RongCallLib/RCCallCommonDefine.h>
#import <RongCallLib/RCCallSession.h>
#import <RongCallLib/RCCallSummaryMessage.h>
#import <RongCallLib/RCCallUserProfile.h>

View File

@@ -1,6 +0,0 @@
framework module RongCallLib {
umbrella header "RongCallLib.h"
export *
module * { export * }
}

View File

@@ -1,43 +0,0 @@
<?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>AvailableLibraries</key>
<array>
<dict>
<key>BinaryPath</key>
<string>RongCallWrapper.framework/RongCallWrapper</string>
<key>LibraryIdentifier</key>
<string>ios-arm64</string>
<key>LibraryPath</key>
<string>RongCallWrapper.framework</string>
<key>SupportedArchitectures</key>
<array>
<string>arm64</string>
</array>
<key>SupportedPlatform</key>
<string>ios</string>
</dict>
<dict>
<key>BinaryPath</key>
<string>RongCallWrapper.framework/RongCallWrapper</string>
<key>LibraryIdentifier</key>
<string>ios-x86_64-simulator</string>
<key>LibraryPath</key>
<string>RongCallWrapper.framework</string>
<key>SupportedArchitectures</key>
<array>
<string>x86_64</string>
</array>
<key>SupportedPlatform</key>
<string>ios</string>
<key>SupportedPlatformVariant</key>
<string>simulator</string>
</dict>
</array>
<key>CFBundlePackageType</key>
<string>XFWK</string>
<key>XCFrameworkFormatVersion</key>
<string>1.0</string>
</dict>
</plist>

View File

@@ -1,123 +0,0 @@
//
// RCCallIWAndroidPushConfig.h
// RongCallWrapper
//
// Created by RongCloud on 2021/7/14.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
typedef NS_ENUM(NSUInteger, RCCallIWImportanceHW) {
/*!
华为推送消息级别 NORMAL表示消息为服务与通讯类。消息提醒方式为锁屏+铃声+震动。
*/
RCCallIWImportanceHWNormal = 0,
/*!
华为推送消息级别 LOW, 表示消息为资讯营销类。消息提醒方式为静默通知,仅在下拉通知栏展示。
*/
RCCallIWImportanceHWLow = 1,
};
@interface RCCallIWAndroidPushConfig : NSObject
/*!
Android 平台 Push 唯一标识
目前支持小米、华为推送平台,默认开发者不需要进行设置,当消息产生推送时,消息的 messageUId 作为 notificationId 使用。
*/
@property (nonatomic, copy) NSString *notificationId;
/*!
小米的渠道 ID
该条消息针对小米使用的推送渠道,如开发者集成了小米推送,需要指定 channelId 时,可向 Android 端研发人员获取channelId 由开发者自行创建。
*/
@property (nonatomic, copy) NSString *channelIdMi;
/*!
小米 Large icon 链接
Large icon 可以出现在大图版和多字版消息中,显示在右边。国内版仅 MIUI12 以上版本支持,以下版本均不支持;国际版支持。图片要求:大小 120 * 120px格式为 png 或者 jpg 格式。
*/
@property (nonatomic, copy) NSString *imageUrlMi;
/*!
华为的渠道 ID
该条消息针对华为使用的推送渠道,如开发者集成了华为推送,需要指定 channelId 时,可向 Android 端研发人员获取channelId 由开发者自行创建。
*/
@property (nonatomic, copy) NSString *channelIdHW;
/*!
华为通知栏消息右侧大图标 URL
如果不设置则不展示通知栏右侧图标URL 使用的协议必须是 HTTPS 协议。
图标文件须小于 512KB图标建议规格大小40dp x 40dp弧角大小为 8dp超出建议规格大小的图标会存在图片压缩或显示不全的情况。
*/
@property (nonatomic, copy) NSString *imageUrlHW;
/*!
华为推送消息级别
*/
@property (nonatomic, assign) RCCallIWImportanceHW importanceHW;
/*!
华为推送消息分类
社交通讯:即时通讯[IM],音频、视频通话[VOIP]
服务提醒:订阅[SUBSCRIPTION],出行[TRAVEL],健康[HEALTH],工作事项提醒[WORK],帐号动态[ACCOUNT],订单&物流[EXPRESS],财务[FINANCE],系统提示[SYSTEM_REMINDER],邮件[MAIL]
资讯营销类:内容资讯/新闻/财经动态/生活资讯/社交动态/调研/其他[MARKETING]
营销活动:产品促销/功能推荐/运营活动/MARKETING
更多信息请参考华为消息分类标准文档: https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides/message-classification-0000001149358835
@discussion 默认值为 null如果为 null则以服务配置为准
@since 5.4.0
*/
@property (nonatomic, copy) NSString *categoryHW;
/*!
OPPO 的渠道 ID
该条消息针对 OPPO 使用的推送渠道,如开发者集成了 OPPO 推送,需要指定 channelId 时,可向 Android 端研发人员获取channelId 由开发者自行创建。
*/
@property (nonatomic, copy) NSString *channelIdOPPO;
/*!
VIVO 推送通道类型
开发者集成了 VIVO 推送,需要指定推送类型时,可进行设置。
目前可选值 "0"(运营消息) 和 "1"(系统消息)
*/
@property (nonatomic, copy) NSString *typeVivo;
/*!
Vivo 推送消息分类
系统消息分类
即时消息[IM],账号与资产[ACCOUNT],日程待办[TODO],设备信息[DEVICE_REMINDER],订单与物流[ORDER],订阅提醒[SUBSCRIPTION]
运营消息分类
新闻[NEWS],内容推荐[CONTENT],运营活动[MARKETING],社交动态[SOCIAL]
更多信息请参考 Vivo 消息分类标准文档: https://dev.vivo.com.cn/documentCenter/doc/359
@discussion 默认值为 null如果为 null则以服务配置为准
@since 5.4.2
*/
@property (nonatomic, copy) NSString *categoryVivo;
/*!
FCM 通知类型推送时所使用的分组 id
*/
@property (nonatomic, copy) NSString *collapseKeyFCM;
/*!
FCM 通知类型的推送所使用的通知图片 url
*/
@property (nonatomic, copy) NSString *imageUrlFCM;
/*!
FCM 通知的频道 ID
该应用程序必须使用此频道 ID 创建一个频道,然后才能收到带有该频道 ID 的任何通知。如果您未在请求中发送此频道 ID或者如果应用尚未创建提供的频道 ID则 FCM 使用应用清单中指定的频道 ID。
*/
@property (nonatomic, copy) NSString *channelIdFCM;
@end
NS_ASSUME_NONNULL_END

View File

@@ -1,16 +0,0 @@
//
// RCCallIWAudioConfig.h
// RongCallWrapper
//
// Created by RongCloud on 2021/7/14.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface RCCallIWAudioConfig : NSObject
@end
NS_ASSUME_NONNULL_END

View File

@@ -1,85 +0,0 @@
//
// RCCallIWCallSession.h
// RongCallWrapper
//
// Created by RongCloud on 2021/7/14.
//
#import <UIKit/UIKit.h>
#import <RongCallWrapper/RCCallIWUserProfile.h>
#import <RongCallWrapper/RCCallIWDefine.h>
NS_ASSUME_NONNULL_BEGIN
@interface RCCallIWCallSession : NSObject
/*!
通话类型
*/
@property (nonatomic, readonly) RCCallIWCallType callType;
/*!
通话媒体类型
*/
@property (nonatomic, readonly) RCCallIWMediaType mediaType;
/*!
通话id
*/
@property (nonatomic, readonly) NSString *callId;
/*!
通话目标id
*/
@property (nonatomic, readonly) NSString *targetId;
/*!
RTC会话唯一标识, 用于 Server API
*/
@property (nonatomic, readonly) NSString *sessionId;
/*!
通话的扩展信息
*/
@property (nonatomic, readonly) NSString *extra;
/*!
通话开始的时间
@discussion 如果是用户呼出的通话则startTime为通话呼出时间如果是呼入的通话则startTime为通话呼入时间。
*/
@property (nonatomic, readonly) long long startTime;
/*!
通话接通时间
*/
@property (nonatomic, readonly) long long connectedTime;
/*!
通话结束时间
*/
@property (nonatomic, readonly) long long endTime;
/*!
当前通话发起者
*/
@property (nonatomic, readonly) RCCallIWUserProfile *caller;
/*!
邀请当前用户到当前通话的邀请者
*/
@property (nonatomic, readonly) RCCallIWUserProfile *inviter;
/*!
当前用户
*/
@property (nonatomic, readonly) RCCallIWUserProfile *mine;
/*!
当前通话的全部用户列表
*/
@property (nonatomic, readonly) NSArray<RCCallIWUserProfile *> *users;
@end
NS_ASSUME_NONNULL_END

View File

@@ -1,429 +0,0 @@
//
// RCCallIWDefine.h
// RongCallWrapper
//
// Created by RongCloud on 2021/7/14.
//
#ifndef RCCallIWDefine_h
#define RCCallIWDefine_h
#import <Foundation/Foundation.h>
/*!
用户身份类型
*/
typedef NS_ENUM(NSInteger, RCCallIWUserType) {
/*!
普通身份
*/
RCCallIWUserTypeNormal = 1,
/*!
观察者身份
*/
RCCallIWUserTypeObserver = 2
};
/*!
通话类型
*/
typedef NS_ENUM(NSInteger, RCCallIWCallType) {
/*!
单聊通话
*/
RCCallIWCallTypeSingle = 0,
/*!
群聊通话
*/
RCCallIWCallTypeGroup = 1
};
/*!
通话媒体类型
*/
typedef NS_ENUM(NSInteger, RCCallIWMediaType) {
/*!
音频通话
*/
RCCallIWMediaTypeAudio = 0,
/*!
音视频通话
*/
RCCallIWMediaTypeAudioVideo = 2
};
/*!
相机类型
*/
typedef NS_ENUM(NSInteger, RCCallIWCamera) {
/*!
未指定
*/
RCCallIWCameraNone = -1,
/*!
前置相机
*/
RCCallIWCameraFront = 0,
/*!
后置相机
*/
RCCallIWCameraBack = 1,
};
/*!
网络质量
*/
typedef NS_ENUM(NSInteger, RCCallIWNetworkQuality) {
/*!
未知
*/
RCCallIWNetworkQualityUnknown = 0,
/*!
极好
*/
RCCallIWNetworkQualityExcellent = 1,
/*!
*/
RCCallIWNetworkQualityGood = 2,
/*!
一般
*/
RCCallIWNetworkQualityPoor = 3,
/*!
*/
RCCallIWNetworkQualityBad = 4,
/*!
极差
*/
RCCallIWNetworkQualityTerrible = 5,
};
/*!
视频显示模式
*/
typedef NS_ENUM(NSInteger, RCCallIWViewFitType) {
/*!
拉伸全屏
*/
RCCallIWViewFitTypeFill = 0,
/*!
满屏显示, 等比例填充, 直到填充满整个试图区域,其中一个维度的部分区域会被裁剪
*/
RCCallIWViewFitTypeCover = 1,
/*!
完整显示, 填充黑边, 等比例填充,直达一个维度到达区域边界
*/
RCCallIWViewFitTypeCenter = 2,
};
/*!
通话视频参数
*/
typedef NS_ENUM (NSInteger, RCCallIWVideoProfile) {
/*!
144x256, 15fps, 120~240kbps
*/
RCCallIW_VIDEO_PROFILE_144_256 = 10,
/*!
240x240, 15fps, 120~280kbps
*/
RCCallIW_VIDEO_PROFILE_240_240 = 20,
/*!
240x320, 15fps, 120~400kbps
*/
RCCallIW_VIDEO_PROFILE_240_320 = 30,
/*!
360x480, 15fps, 150~650kbps
*/
RCCallIW_VIDEO_PROFILE_360_480 = 40,
/*!
360x640, 15fps, 180~800kbps
*/
RCCallIW_VIDEO_PROFILE_360_640 = 50,
/*!
480x640, 15fps, 200~900kbps
*/
RCCallIW_VIDEO_PROFILE_480_640 = 60,
/*!
480x720, 15fps, 200~1000kbps
*/
RCCallIW_VIDEO_PROFILE_480_720 = 70,
/*!
720x1280, 15fps, 250~2200kbps
*/
RCCallIW_VIDEO_PROFILE_720_1280 = 80,
/*!
1080x1920, 15fps, 400~4000kbps
*/
RCCallIW_VIDEO_PROFILE_1080_1920 = 90,
/*!
144x256, 30fps, 240~480kbps
*/
RCCallIW_VIDEO_PROFILE_144_256_HIGH = 11,
/*!
240x240, 30fps, 240~360kbps
*/
RCCallIW_VIDEO_PROFILE_240_240_HIGH = 21,
/*!
240x320, 30fps, 240~800kbps
*/
RCCallIW_VIDEO_PROFILE_240_320_HIGH = 31,
/*!
360x480, 30fps, 300~1300kbps
*/
RCCallIW_VIDEO_PROFILE_360_480_HIGH = 41,
/*!
360x640, 30fps, 360~1600kbps
*/
RCCallIW_VIDEO_PROFILE_360_640_HIGH = 51,
/*!
480x640, 30fps, 400~1800kbps
*/
RCCallIW_VIDEO_PROFILE_480_640_HIGH = 61,
/*!
480x720, 30fps, 400~2000kbps
*/
RCCallIW_VIDEO_PROFILE_480_720_HIGH = 71,
/*!
720x1080, 30fps, 500~4400kbps
*/
RCCallIW_VIDEO_PROFILE_720_1280_HIGH = 81,
/*!
1080x1920, 30fps, 800~8000kbps
*/
RCCallIW_VIDEO_PROFILE_1080_1920_HIGH = 91,
};
/*!
摄像机方向
值与 AVCaptureVideoOrientation 一致
*/
typedef NS_ENUM(NSInteger, RCCallIWCameraOrientation) {
RCCallIWCameraOrientationPortrait = 1,
RCCallIWCameraOrientationPortraitUpsideDown = 2,
RCCallIWCameraOrientationLandscapeRight = 3,
RCCallIWCameraOrientationLandscapeLeft = 4,
};
/*!
通话结束原因
*/
typedef NS_ENUM (NSInteger, RCCallIWDisconnectReason) {
/*!
己方取消已发出的通话请求
*/
RCCallIWDisconnectReasonCancel = 1,
/*!
己方拒绝收到的通话请求
*/
RCCallIWDisconnectReasonReject = 2,
/*!
己方挂断
*/
RCCallIWDisconnectReasonHangup = 3,
/*!
己方忙碌
*/
RCCallIWDisconnectReasonBusyLine = 4,
/*!
己方未接听
*/
RCCallIWDisconnectReasonNoResponse = 5,
/*!
己方不支持当前引擎
*/
RCCallIWDisconnectReasonEngineUnsupported = 6,
/*!
己方网络出错
*/
RCCallIWDisconnectReasonNetworkError = 7,
/*!
己方获取媒体资源失败
*/
RCCallIWDisconnectReasonResourceError = 8,
/*!
己方发布资源失败
*/
RCCallIWDisconnectReasonPublishError = 9,
/*!
己方订阅资源失败
*/
RCCallIWDisconnectReasonSubscribeError = 10,
/*!
对方取消已发出的通话请求
*/
RCCallIWDisconnectReasonRemoteCancel = 11,
/*!
对方拒绝收到的通话请求
*/
RCCallIWDisconnectReasonRemoteReject = 12,
/*!
通话过程对方挂断
*/
RCCallIWDisconnectReasonRemoteHangup = 13,
/*!
对方忙碌
*/
RCCallIWDisconnectReasonRemoteBusyLine = 14,
/*!
对方未接听
*/
RCCallIWDisconnectReasonRemoteNoResponse = 15,
/*!
对方不支持当前引擎
*/
RCCallIWDisconnectReasonRemoteEngineUnsupported = 16,
/*!
对方网络错误
*/
RCCallIWDisconnectReasonRemoteNetworkError = 17,
/*!
对方获取媒体资源失败
*/
RCCallIWDisconnectReasonRemoteResourceError = 18,
/*!
对方发布资源失败
*/
RCCallIWDisconnectReasonRemotePublishError = 19,
/*!
对方订阅资源失败
*/
RCCallIWDisconnectReasonRemoteSubscribeError = 20,
/*!
己方其他端已加入新通话
*/
RCCallIWDisconnectReasonKickedByOtherCall = 21,
/*!
己方其他端已在通话中
*/
RCCallIWDisconnectReasonInOtherCall = 22,
/*!
己方已被禁止通话
*/
RCCallIWDisconnectReasonKickedByServer = 23,
/*!
对方其他端已加入新通话
*/
RCCallIWDisconnectReasonRemoteKickedByOtherCall = 24,
/*!
对方其他端已在通话中
*/
RCCallIWDisconnectReasonRemoteInOtherCall = 25,
/*!
对方已被禁止通话
*/
RCCallIWDisconnectReasonRemoteKickedByServer = 26,
/*!
己方其他端已接听
*/
RCCallIWDisconnectReasonAcceptByOtherClient = 27,
/*!
己方其他端已挂断
*/
RCCallIWDisconnectReasonHangupByOtherClient = 28,
/*!
己方被对方加入黑名单
*/
RCCallIWDisconnectReasonAddToBlackList = 29,
/*!
音视频服务已关闭
*/
RCCallIWDisconnectReasonMediaServerClosed = 30,
/*!
己方被降级为观察者
*/
RCCallIWDisconnectReasonDegrade = 31,
/*!
己方摄像头初始化错误,可能是没有打开使用摄像头权限
*/
RCCallIWDisconnectReasonInitVideoError = 32,
/*!
其他端已经接听
*/
RCCallIWDisconnectReasonOtherDeviceHadAccepted = 33,
/*!
im ipc服务已断开
*/
RCCallIWDisconnectReasonServiceDisconnected = 34
};
/*!
通话错误类型
*/
typedef NS_ENUM (NSInteger, RCCallIWErrorCode) {
/*!
成功
*/
RCCallIWSuccess = 0,
/*!
开通的音视频服务没有及时生效或音视频服务已关闭请等待3-5小时后重新安装应用或开启音视频服务再进行测试
*/
RCCallIWEngineNotFound = 1,
/*!
网络不可用
*/
RCCallIWNetworkUnavailable = 2,
/*!
已经处于通话中了
*/
RCCallIWOneCallExisted = 3,
/*!
无效操作
*/
RCCallIWOperationUnavailable = 4,
/*!
参数错误
*/
RCCallIWInvalidParam = 5,
/*!
网络不稳定
*/
RCCallIWNetworkUnstable = 6,
/*!
媒体服务请求失败
*/
RCCallIWMediaRequestFailed = 7,
/*!
媒体服务初始化失败
*/
RCCallIWMediaServerNotReady = 8,
/*!
媒体服务未初始化
*/
RCCallIWMediaServerNotInitialized = 9,
/*!
媒体服务请求超时
*/
RCCallIWMediaRequestTimeout = 10,
/*!
未知的媒体服务错误
*/
RCCallIWMediaUnkownError = 11,
/*!
已被禁止通话
*/
RCCallIWMediaKickedByServerError = 12,
/*!
音视频服务已关闭
*/
RCCallIWMediaServerClosedError = 13,
/*!
音视频发布资源失败
*/
RCCallIWMediaServerPublishError = 14,
/*!
音视频订阅资源失败
*/
RCCallIWMediaServerSubscribeError = 15,
/*!
其他端已在通话中错误
*/
RCCallIWMediaJoinRoomRefuseError = 16
};
#endif /* RCCallIWDefine_h */

View File

@@ -1,449 +0,0 @@
//
// RCCallIWEngine.h
// RongCallWrapper
//
// Created by RongCloud on 2021/7/14.
//
#import <UIKit/UIKit.h>
#import <RongCallWrapper/RCCallIWDefine.h>
@class RCCallIWEngineConfig;
@class RCCallIWPushConfig;
@class RCCallIWAudioConfig;
@class RCCallIWVideoConfig;
@class RCCallIWCallSession;
@class RCCallIWUserProfile;
@class RCCallIWBeautyOption;
@protocol RCCallIWEngineDelegate;
@protocol RCCallIWSampleBufferVideoFrameDelegate;
NS_ASSUME_NONNULL_BEGIN
@interface RCCallIWEngine : NSObject
/*!
获取引擎实例
@return 引擎实例
*/
+ (RCCallIWEngine *)sharedInstance;
/*!
配置引擎
@param config 引擎配置
*/
- (void)setEngineConfig:(nullable RCCallIWEngineConfig *)config;
/*!
配置推送
@param callPushConfig 呼叫推送配置
@param hangupPushConfig 挂断推送配置
*/
- (void)setPushConfig:(nullable RCCallIWPushConfig *)callPushConfig
hangupPushConfig:(nullable RCCallIWPushConfig *)hangupPushConfig;
/*!
配置推送
@param callPushConfig 呼叫推送配置
@param hangupPushConfig 挂断推送配置
@param enableApplePushKit 设置是否使用苹果 PushKit 推送, YES 使用, NO 不使用
@discussion
是否打开苹果 PushKit 推送, 该推送可以直接激活 App, 注: iOS 13 以后 PushKit 必须结合苹果 CallKit.framework 进行使用, 否则无法正常处理 VoIP 相关推送逻辑,
如果设置为 NO 则使用普通 APNS 消息推送来处理音视频信令逻辑, 默认关闭. 打开之后 App 默认需要自行处理 VoIP 推送唤起 CallKit.framework 的逻辑.
*/
- (void)setPushConfig:(nullable RCCallIWPushConfig *)callPushConfig
hangupPushConfig:(nullable RCCallIWPushConfig *)hangupPushConfig
enableApplePushKit:(BOOL)enableApplePushKit;
/*!
配置音频
@param config 音频配置
*/
- (void)setAudioConfig:(nullable RCCallIWAudioConfig *)config;
/*!
配置视频
@param config 视频配置
*/
- (void)setVideoConfig:(nullable RCCallIWVideoConfig *)config;
/*!
配置监听
@param delegate 监听代理
*/
- (void)setEngineDelegate:(nullable NSObject<RCCallIWEngineDelegate> *)delegate;
/*!
拨打电话-单聊
@param userId 被叫端UserId
@param type 发起的通话媒体类型
@discussion
如果type为音视频直接打开默认前置摄像头。
@return 当前Call Session
*/
- (RCCallIWCallSession *)startCall:(NSString *)userId
type:(RCCallIWMediaType)type;
/*!
拨打电话-单聊
@param userId 被叫端UserId
@param type 发起的通话媒体类型
@param extra 附件信息
@discussion
如果type为音视频直接打开默认前置摄像头。
@return 当前通话 Session
*/
- (RCCallIWCallSession *)startCall:(NSString *)userId
type:(RCCallIWMediaType)type
extra:(nullable NSString *)extra;
/*!
拨打电话-群聊
@param groupId 群组Id
@param userIds 被叫端的用户ID列表, 数组中仅填写被叫端UserId, 请不要填写主叫端UserId, 否则无法发起呼叫
@param type 发起的通话媒体类型
@discussion
如果type为音视频直接打开默认前置摄像头。
@return 当前通话 Session
*/
- (RCCallIWCallSession *)startCall:(NSString *)groupId
userIds:(NSArray<NSString *> *)userIds
type:(RCCallIWMediaType)type;
/*!
拨打电话-群聊
@param groupId 群组Id
@param userIds 被叫端的用户ID列表, 数组中仅填写被叫端UserId, 请不要填写主叫端UserId, 否则无法发起呼叫
@param type 发起的通话媒体类型
@param extra 附件信息
@discussion
如果type为音视频直接打开默认前置摄像头。
@return 当前通话 Session
*/
- (RCCallIWCallSession *)startCall:(NSString *)groupId
userIds:(NSArray<NSString *> *)userIds
type:(RCCallIWMediaType)type
extra:(nullable NSString *)extra;
/*!
拨打电话-群聊
@param groupId 群组Id
@param userIds 被叫端的用户ID列表, 数组中仅填写被叫端UserId, 请不要填写主叫端UserId, 否则无法发起呼叫
@param observerUserIds 主叫端指定需要以观察者身份加入房间的用户ID列表, 如果主叫端需要以观察者身份加入房间也需要填写主叫端UserId
@param type 发起的通话媒体类型
@discussion
如果type为音视频直接打开默认前置摄像头。
@return 当前通话 Session
*/
- (RCCallIWCallSession *)startCall:(NSString *)groupId
userIds:(NSArray<NSString *> *)userIds
observerUserIds:(nullable NSArray<NSString *> *)observerUserIds
type:(RCCallIWMediaType)type;
/*!
拨打电话-群聊
@param groupId 群组Id
@param userIds 被叫端的用户ID列表, 数组中仅填写被叫端UserId, 请不要填写主叫端UserId, 否则无法发起呼叫
@param observerUserIds 主叫端指定需要以观察者身份加入房间的用户ID列表, 如果主叫端需要以观察者身份加入房间也需要填写主叫端UserId
@param type 发起的通话媒体类型
@param extra 附件信息
@discussion
如果type为音视频直接打开默认前置摄像头。
@return 当前通话 Session
*/
- (RCCallIWCallSession *)startCall:(NSString *)groupId
userIds:(NSArray<NSString *> *)userIds
observerUserIds:(nullable NSArray<NSString *> *)observerUserIds
type:(RCCallIWMediaType)type
extra:(nullable NSString *)extra;
/*!
获取当前通话 Session
@return 当前通话 Session
*/
- (RCCallIWCallSession *)getCurrentCallSession;
/*!
接电话
@discussion
如果呼入类型为语音通话,即接受语音通话,如果呼入类型为视频通话,即接受视频通话,打开默认(前置)摄像头。
观察者不开启摄像头。
*/
- (void)accept;
/*!
挂断电话
*/
- (void)hangup;
/*!
麦克风控制
@param enable YES 开启麦克风NO 关闭麦克风
*/
- (void)enableMicrophone:(BOOL)enable;
/*!
获取当前麦克风状态
@return 当前麦克风是否开启
*/
- (BOOL)isEnableMicrophone;
/*!
扬声器控制
@param enable YES 开启扬声器NO 关闭扬声器
*/
- (void)enableSpeaker:(BOOL)enable;
/*!
获取当前扬声器状态
@return 当前扬声器是否开启
*/
- (BOOL)isEnableSpeaker;
/*!
摄像头控制
@param enable YES 开启摄像头NO 关闭摄像头
*/
- (void)enableCamera:(BOOL)enable;
/*!
摄像头控制
@param enable YES 开启摄像头NO 关闭摄像头
@param camera 指定摄像头
*/
- (void)enableCamera:(BOOL)enable camera:(RCCallIWCamera)camera;
/*!
获取当前摄像头状态
@return 当前摄像头是否开启
*/
- (BOOL)isEnableCamera;
/*!
获取当前摄像头
@return 当前摄像头
*/
- (RCCallIWCamera)currentCamera;
/*!
翻转摄像头
*/
- (void)switchCamera;
/*!
设置预览窗口
@param userId 用户id
@param view 视频预览视图
*/
- (void)setVideoView:(NSString *)userId
view:(UIView *)view;
/*!
设置预览窗口
@param userId 用户id
@param view 视频预览视图
@param fit 视频显示模式
*/
- (void)setVideoView:(NSString *)userId
view:(UIView *)view
fit:(RCCallIWViewFitType)fit;
/*!
修改通话媒体类型
@param type 通话媒体类型
*/
- (void)changeMediaType:(RCCallIWMediaType)type;
/*!
邀请用户
@param userIds 被邀请用户id列表
*/
- (void)inviteUsers:(NSArray<NSString *> *)userIds;
/*!
邀请用户
@param userIds 被邀请用户id列表
@param observerUserIds 被邀请观察者id列表
*/
- (void)inviteUsers:(NSArray<NSString *> *)userIds
observerUserIds:(NSArray<NSString *> *)observerUserIds;
- (void)setLocalVideoProcessedDelegate:(id<RCCallIWSampleBufferVideoFrameDelegate>)delegate;
@end
@protocol RCCallIWEngineDelegate <NSObject>
@required
/*!
接收到通话呼入的回调
@param session 通话Session
*/
- (void)didReceiveCall:(RCCallIWCallSession *)session;
/*!
通话已接通
*/
- (void)callDidConnect;
/*!
通话已结束
@param reason 结束原因
*/
- (void)callDidDisconnect:(RCCallIWDisconnectReason)reason;
/*!
对端用户加入了通话
@param user 对端用户信息
*/
- (void)remoteUserDidJoin:(RCCallIWUserProfile *)user;
/*!
对端用户挂断
@param userId 对端用户信息
@param reason 挂断原因
*/
- (void)remoteUserDidLeave:(NSString *)userId
reason:(RCCallIWDisconnectReason)reason;
@optional
/*!
接收到通话呼入的远程通知的回调
*/
- (void)didReceiveCallRemoteNotification:(NSString *)callId
inviterUserId:(NSString *)inviterUserId
mediaType:(RCCallIWMediaType)mediaType
userIdList:(NSArray *)userIdList
userDict:(NSDictionary *)userDict
isVoIPPush:(BOOL)isVoIPPush
pushConfig:(RCCallIWPushConfig *)pushConfig;
/*!
接收到取消通话的远程通知的回调
*/
- (void)didCancelCallRemoteNotification:(NSString *)callId
inviterUserId:(NSString *)inviterUserId
mediaType:(RCCallIWMediaType)mediaType
userIdList:(NSArray *)userIdList
pushConfig:(RCCallIWPushConfig *)pushConfig
isRemoteCancel:(BOOL)isRemoteCancel;
/*!
开启/关闭摄像头的回调
*/
- (void)didEnableCamera:(RCCallIWCamera)camera
enable:(BOOL)enable;
/*!
切换摄像头的回调
@param camera 当前选择的摄像头
*/
- (void)didSwitchCamera:(RCCallIWCamera)camera;
/*!
通话出现错误的回调
*/
- (void)callDidError:(RCCallIWErrorCode)code;
/*!
开始呼叫通话的回调
*/
- (void)callDidMake;
/*!
对端用户正在振铃
*/
- (void)remoteUserDidRing:(NSString *)userId;
/*!
有用户被邀请加入通话
*/
- (void)remoteUserDidInvite:(NSString *)userId
mediaType:(RCCallIWMediaType)mediaType;
/*!
对端用户切换了媒体类型
*/
- (void)remoteUserDidChangeMediaType:(RCCallIWUserProfile *)user
mediaType:(RCCallIWMediaType)mediaType;
/*!
对端用户开启或关闭了麦克风的状态
*/
- (void)remoteUserDidChangeMicrophoneState:(RCCallIWUserProfile *)user
enable:(BOOL)enable;
/*!
对端用户开启或关闭了摄像头的状态
*/
- (void)remoteUserDidChangeCameraState:(RCCallIWUserProfile *)user
enable:(BOOL)enable;
/*!
当前通话网络状态的回调,该回调方法每秒触发一次
@param user 用户信息
@param quality 网络质量
@discussion
如果user是本端用户, quality代表上行网络质量
如果user是远端用户, quality代表下行网络质量
*/
- (void)user:(RCCallIWUserProfile *)user networkQuality:(RCCallIWNetworkQuality)quality;
/*!
当前通话某用户声音音量回调,该回调方法每两秒触发一次
@param user 用户信息
@param volume 声音音量
@discussion
声音级别: 0~9, 0为无声, 依次变大
如果user是本端用户, volume代表发送音量
如果user是远端用户, volume代表接收音量
*/
- (void)user:(RCCallIWUserProfile *)user audioVolume:(int)volume;
@end
NS_ASSUME_NONNULL_END

View File

@@ -1,23 +0,0 @@
//
// RCCallIWEngineConfig.h
// RongCallWrapper
//
// Created by RongCloud on 2021/7/14.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
/*!
引擎配置
*/
@interface RCCallIWEngineConfig : NSObject
/*!
开启通话记录 默认NO
*/
@property (nonatomic, assign) BOOL enableCallSummary;
@end
NS_ASSUME_NONNULL_END

View File

@@ -1,41 +0,0 @@
//
// RCCallIWFlutterView.h
// RongCallWrapper
//
// Created by 潘铭达 on 2021/6/16.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@protocol RCCallIWFlutterViewDelegate <NSObject>
- (void)changeSize:(int)width height:(int)height;
- (void)changeRotation:(int)rotation;
- (void)firstFrameRendered;
- (void)frameRendered;
// 当原生层摄像头进行操作的时候 通知 Flutter 层的 view 进行视图的镜像操作
- (void)onMirrorChanged:(BOOL)mirror;
@end
@interface RCCallIWFlutterView : NSObject
@property (nonatomic, weak) id<RCCallIWFlutterViewDelegate> textureViewDelegate;
- (instancetype)init NS_UNAVAILABLE;
- (instancetype)new NS_UNAVAILABLE;
- (instancetype)initWithCoder:(NSCoder *)coder NS_UNAVAILABLE;
+ (RCCallIWFlutterView *)create;
@end
NS_ASSUME_NONNULL_END

View File

@@ -1,41 +0,0 @@
//
// RCCallIWIOSPushConfig.h
// RongCallWrapper
//
// Created by RongCloud on 2021/7/14.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface RCCallIWIOSPushConfig : NSObject
/*!
iOS 平台通知栏分组 ID
相同的 thread-id 推送分为一组
iOS10 开始支持
*/
@property (nonatomic, copy) NSString *threadId;
/*!
iOS 标识推送的类型
如果不设置后台默认取消息类型字符串,如 RC:TxtMsg
*/
@property (nonatomic, copy) NSString *category;
/*!
iOS 平台通知覆盖 ID
apnsCollapseId 相同时,新收到的通知会覆盖老的通知,最大 64 字节
iOS10 开始支持
*/
@property (nonatomic, copy) NSString *apnsCollapseId;
/*!
iOS 富文本推送内容
*/
@property (nonatomic, copy) NSString *richMediaUri;
@end
NS_ASSUME_NONNULL_END

View File

@@ -1,74 +0,0 @@
//
// RCCallIWPushConfig.h
// RongCallWrapper
//
// Created by RongCloud on 2021/7/14.
//
#import <Foundation/Foundation.h>
#import <RongCallWrapper/RCCallIWIOSPushConfig.h>
#import <RongCallWrapper/RCCallIWAndroidPushConfig.h>
NS_ASSUME_NONNULL_BEGIN
/*!
推送配置
*/
@interface RCCallIWPushConfig : NSObject
/*!
是否屏蔽通知标题
YES: 不显示通知标题
NO: 显示通知标题
@discussion 默认情况下融云单聊消息通知标题为用户名、群聊消息为群名称,设置后不会再显示通知标题。
@discussion 此属性只针目标用户为 iOS 平台时有效Android 第三方推送平台的通知标题为必填项,所以暂不支持。
*/
@property (nonatomic, assign) BOOL disableTitle;
/*!
推送标题
如果没有设置,会使用下面的默认标题显示规则
默认标题显示规则:
内置消息:单聊通知标题显示为发送者名称,群聊通知标题显示为群名称。
自定义消息:默认不显示标题。
*/
@property (nonatomic, copy) NSString *title;
/*!
推送内容
优先使用 MessagePushConfig 的 pushContent如果没有则使用 sendMessage 或者 sendMediaMessage 的 pushContent。
*/
@property (nonatomic, copy) NSString *content;
/*!
远程推送附加信息
优先使用 MessagePushConfig 的 pushData如果没有则使用 sendMessage 或者 sendMediaMessage 的 pushData。
*/
@property (nonatomic, copy) NSString *data;
/*!
是否强制显示通知详情
当目标用户通过 RCPushProfile 中的 updateShowPushContentStatus 设置推送不显示消息详情时,可通过此参数,强制设置该条消息显示推送详情。
*/
@property (nonatomic, assign) BOOL forceShowDetailContent;
/*!
推送模板 ID设置后根据目标用户通过 SDK RCPushProfile 中的 setPushLauguageCode 设置的语言环境,匹配模板中设置的语言内容进行推送,未匹配成功时使用默认内容进行推送,模板内容在“开发者后台-自定义推送文案”中进行设置。
RCMessagePushConfig 中的 Title 和 PushContent 优先级高于模板 IDtemplateId中对应的标题和推送内容。
*/
@property (nonatomic, copy) NSString *templateId;
/*!
iOS 平台相关配置
*/
@property (nonatomic, strong) RCCallIWIOSPushConfig *iOSConfig;
/*!
Android 平台相关配置
*/
@property (nonatomic, strong) RCCallIWAndroidPushConfig *androidConfig;
@end
NS_ASSUME_NONNULL_END

View File

@@ -1,41 +0,0 @@
//
// RCCallIWUserProfile.h
// RongCallWrapper
//
// Created by RongCloud on 2021/7/14.
//
#import <Foundation/Foundation.h>
#import <RongCallWrapper/RCCallIWDefine.h>
NS_ASSUME_NONNULL_BEGIN
@interface RCCallIWUserProfile : NSObject
/*!
用户身份类型
*/
@property (nonatomic, readonly) RCCallIWUserType userType;
/*!
通话媒体类型
*/
@property (nonatomic, readonly) RCCallIWMediaType mediaType;
/*!
用户id
*/
@property (nonatomic, readonly) NSString *userId;
/*!
用户的通话媒体连接ID
*/
@property (nonatomic, readonly) NSString *mediaId;
/*!
用户是否开启摄像头
*/
@property (nonatomic, readonly) BOOL enableCamera;
/*!
用户是否开启麦克风
*/
@property (nonatomic, readonly) BOOL enableMicrophone;
@end
NS_ASSUME_NONNULL_END

View File

@@ -1,40 +0,0 @@
//
// RCCallIWVideoConfig.h
// RongCallWrapper
//
// Created by RongCloud on 2021/7/14.
//
#import <Foundation/Foundation.h>
#import <RongCallWrapper/RCCallIWDefine.h>
NS_ASSUME_NONNULL_BEGIN
@interface RCCallIWVideoConfig : NSObject
/*!
视频配置
默认值 RCCallIW_VIDEO_PROFILE_720_1280
*/
@property (nonatomic, assign) RCCallIWVideoProfile profile;
/*!
摄像头
默认值 RCCallIWCameraFront
*/
@property (nonatomic, assign) RCCallIWCamera defaultCamera;
/*!
相机方向
默认值 RCCallIWCameraOrientationPortrait
*/
@property (nonatomic, assign) RCCallIWCameraOrientation cameraOrientation;
/*!
本地预览是否镜像
前置摄像头默认: YES后置摄像头默认: NO
*/
@property (nonatomic, assign) BOOL isPreviewMirror;
@end
NS_ASSUME_NONNULL_END

View File

@@ -1,18 +0,0 @@
//
// RCCallIWVideoFrameDelegate.h
// RongCallWrapper
//
// Created by 潘铭达 on 2021/12/27.
//
#import <AVFoundation/AVFoundation.h>
NS_ASSUME_NONNULL_BEGIN
@protocol RCCallIWSampleBufferVideoFrameDelegate <NSObject>
- (void)onPixelBuffer:(CVPixelBufferRef)pixelBuffer;
@end
NS_ASSUME_NONNULL_END

View File

@@ -1,23 +0,0 @@
//
// RCCallIWVideoView.h
// RongCallWrapper
//
// Created by RongCloud on 2023/5/12.
//
#import <UIKit/UIKit.h>
#import <RongRTCLib/RongRTCLib.h>
NS_ASSUME_NONNULL_BEGIN
@interface RCCallIWVideoView : UIView
@property (nonatomic, weak, readonly) RCRTCVideoView *videoView;
// 预览是否镜像 (最终设置的是原生 videoView所以要注意设置的时机
@property (nonatomic, assign) BOOL isMirror;
// 原生 videoView 添加完成
@property (nonatomic, copy) void(^nativeVideoViewDidAdd)(RCRTCVideoView *videoView);
@end
NS_ASSUME_NONNULL_END

View File

@@ -1,28 +0,0 @@
//
// RongCallWrapper.h
// RongCallWrapper
//
// Created by RongCloud on 2021/7/12.
//
#import <Foundation/Foundation.h>
//! Project version number for RongCallWrapper.
FOUNDATION_EXPORT double RongCallWrapperVersionNumber;
//! Project version string for RongCallWrapper.
FOUNDATION_EXPORT const unsigned char RongCallWrapperVersionString[];
// In this header, you should import all the public headers of your framework using statements like #import <RongCallWrapper/PublicHeader.h>
#import <RongCallWrapper/RCCallIWDefine.h>
#import <RongCallWrapper/RCCallIWEngine.h>
#import <RongCallWrapper/RCCallIWCallSession.h>
#import <RongCallWrapper/RCCallIWEngineConfig.h>
#import <RongCallWrapper/RCCallIWAudioConfig.h>
#import <RongCallWrapper/RCCallIWVideoConfig.h>
#import <RongCallWrapper/RCCallIWPushConfig.h>
#import <RongCallWrapper/RCCallIWIOSPushConfig.h>
#import <RongCallWrapper/RCCallIWAndroidPushConfig.h>
#import <RongCallWrapper/RCCallIWUserProfile.h>
#import <RongCallWrapper/RCCallIWFlutterView.h>
#import <RongCallWrapper/RCCallIWVideoFrameDelegate.h>

View File

@@ -1,6 +0,0 @@
framework module RongCallWrapper {
umbrella header "RongCallWrapper.h"
export *
module * { export * }
}

View File

@@ -1,61 +0,0 @@
<?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>Location</key>
<dict>
<key>LocationImageQuality</key>
<real>0.7</real>
<key>LocationImageWidth</key>
<string>480</string>
<key>LocationImageHeight</key>
<string>240</string>
</dict>
<key>File</key>
<dict>
<key>RelativePath</key>
<string>Documents/MyFile</string>
<key>MaxRangeUnit</key>
<real>1048576</real>
</dict>
<key>Voice</key>
<dict>
<key>AudioEncodingBitRate</key>
<real>7950</real>
</dict>
<key>Image</key>
<dict>
<key>ThumbnailQuality</key>
<string>0.3</string>
<key>ThumbnailMaxSize</key>
<string>240</string>
<key>ThumbnailMinSize</key>
<string>100</string>
<key>ImageQuality</key>
<real>0.85</real>
<key>ImageWidth</key>
<integer>1080</integer>
<key>ImageHeight</key>
<integer>1080</integer>
</dict>
<key>CustomerService</key>
<dict>
<key>SuspendWhenLeave</key>
<true/>
</dict>
<key>Download</key>
<dict>
<key>DownloadSliceSize</key>
<real>20971520</real>
</dict>
<key>Sight</key>
<dict>
<key>SightCompressWidth</key>
<integer>540</integer>
<key>SightCompressHeight</key>
<integer>960</integer>
</dict>
<key>HeartBeatInterval</key>
<integer>15</integer>
</dict>
</plist>

View File

@@ -1,372 +0,0 @@
<?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>files</key>
<dict>
<key>Headers/RCCallIWAndroidPushConfig.h</key>
<data>
c8Nr+zXJBvG4EEuUrT1QFmj5fnQ=
</data>
<key>Headers/RCCallIWAudioConfig.h</key>
<data>
kGPMWb7BecYVlHQ9V+f794nOR4w=
</data>
<key>Headers/RCCallIWCallSession.h</key>
<data>
AnhTDcH3VjceT8E5vwfn4M1KRkE=
</data>
<key>Headers/RCCallIWDefine.h</key>
<data>
DAGsL8w84kqw8ZXp2cNbh7QSWLI=
</data>
<key>Headers/RCCallIWEngine.h</key>
<data>
Z4zTFQqdlABKiqe5+snC7d6/BpA=
</data>
<key>Headers/RCCallIWEngineConfig.h</key>
<data>
yQGCGoe19+myITZLqeO0VadV7Js=
</data>
<key>Headers/RCCallIWFlutterView.h</key>
<data>
y2cqUnU8QMNZ3CG0+C2mMNsxzic=
</data>
<key>Headers/RCCallIWIOSPushConfig.h</key>
<data>
8qkNfl6i7/7v8+Ff+yCXkSZcbKA=
</data>
<key>Headers/RCCallIWPushConfig.h</key>
<data>
Dl/lC2HDVoElj5rdcPDirtFy00I=
</data>
<key>Headers/RCCallIWUserProfile.h</key>
<data>
OirfPQvRXiMSA7f7QCyBpmskr8E=
</data>
<key>Headers/RCCallIWVideoConfig.h</key>
<data>
kOdMpo6eHS1xv3wjNG6+ZiTkjLo=
</data>
<key>Headers/RCCallIWVideoFrameDelegate.h</key>
<data>
4E8xM7l79Q0pj+PqnOIaLalKHZ0=
</data>
<key>Headers/RCCallIWVideoView.h</key>
<data>
ibFWGpV35ABCTAhuEtUsgKHQVnw=
</data>
<key>Headers/RongCallWrapper.h</key>
<data>
vXZ3cAYx+Hn3GKcucUwV0K4j8DQ=
</data>
<key>Info.plist</key>
<data>
Izr+R4U9kf63yZbS/sbtv1Hgxto=
</data>
<key>Modules/module.modulemap</key>
<data>
mB2JsmGuPd2g/QyaXMtdCzdDuzw=
</data>
<key>RCConfig.plist</key>
<data>
QA7nn/q1j2Y4AJbaGtBBs8g71xE=
</data>
<key>RongRTCLib.bundle/HwAiVadModel.bin</key>
<data>
ATcRMel9IwX111oJWJbEEm8fxLw=
</data>
<key>RongRTCLib.bundle/HwAinrModel.bin</key>
<data>
B8kB+UwS+Djpk42nGs6PsuZb4i4=
</data>
</dict>
<key>files2</key>
<dict>
<key>Headers/RCCallIWAndroidPushConfig.h</key>
<dict>
<key>hash</key>
<data>
c8Nr+zXJBvG4EEuUrT1QFmj5fnQ=
</data>
<key>hash2</key>
<data>
tUBraHIlNP/nvghXtWtweS8roeTuGXH5le7Gtoqg2lI=
</data>
</dict>
<key>Headers/RCCallIWAudioConfig.h</key>
<dict>
<key>hash</key>
<data>
kGPMWb7BecYVlHQ9V+f794nOR4w=
</data>
<key>hash2</key>
<data>
h7YMB2G9xbeDIdlGpjDdy7VeEd1V1lY0bhUhPnmj7do=
</data>
</dict>
<key>Headers/RCCallIWCallSession.h</key>
<dict>
<key>hash</key>
<data>
AnhTDcH3VjceT8E5vwfn4M1KRkE=
</data>
<key>hash2</key>
<data>
47JdoajKNgc8PvI2M1lo7XgKFDap/8zNE5aubhiMO9g=
</data>
</dict>
<key>Headers/RCCallIWDefine.h</key>
<dict>
<key>hash</key>
<data>
DAGsL8w84kqw8ZXp2cNbh7QSWLI=
</data>
<key>hash2</key>
<data>
Txy4g9BC23EsyFZkra0VUfIXAZ+pOnmxcrIhTeyNNSw=
</data>
</dict>
<key>Headers/RCCallIWEngine.h</key>
<dict>
<key>hash</key>
<data>
Z4zTFQqdlABKiqe5+snC7d6/BpA=
</data>
<key>hash2</key>
<data>
N8ZP4WzDTeXJ9tD15nIZiMEXBKA1ndfNuInF3WNd1pE=
</data>
</dict>
<key>Headers/RCCallIWEngineConfig.h</key>
<dict>
<key>hash</key>
<data>
yQGCGoe19+myITZLqeO0VadV7Js=
</data>
<key>hash2</key>
<data>
+LkKAOHRYcPLjKrmOMYPRIr8DULzitIdlJyGE/v7hIo=
</data>
</dict>
<key>Headers/RCCallIWFlutterView.h</key>
<dict>
<key>hash</key>
<data>
y2cqUnU8QMNZ3CG0+C2mMNsxzic=
</data>
<key>hash2</key>
<data>
IgRu9C00s2UBfZL10F56c7rG2Xu3yS1AM1ET+CChUlQ=
</data>
</dict>
<key>Headers/RCCallIWIOSPushConfig.h</key>
<dict>
<key>hash</key>
<data>
8qkNfl6i7/7v8+Ff+yCXkSZcbKA=
</data>
<key>hash2</key>
<data>
4IZfnNPqAtJn0v1WGY1M4TmPWPwWbaeNWxUf2qNdFKw=
</data>
</dict>
<key>Headers/RCCallIWPushConfig.h</key>
<dict>
<key>hash</key>
<data>
Dl/lC2HDVoElj5rdcPDirtFy00I=
</data>
<key>hash2</key>
<data>
h+XlKn0zxZLWTqirksIReWFIy98pxSzpVOxUcCzgudo=
</data>
</dict>
<key>Headers/RCCallIWUserProfile.h</key>
<dict>
<key>hash</key>
<data>
OirfPQvRXiMSA7f7QCyBpmskr8E=
</data>
<key>hash2</key>
<data>
QmOPdaT/+idE+GEzrr3QR9BAsf0n10xelqc6s0vnOfw=
</data>
</dict>
<key>Headers/RCCallIWVideoConfig.h</key>
<dict>
<key>hash</key>
<data>
kOdMpo6eHS1xv3wjNG6+ZiTkjLo=
</data>
<key>hash2</key>
<data>
UOkF0SEprFatUeYdw91eH8BhSBNcYalRGdJV7OeZszw=
</data>
</dict>
<key>Headers/RCCallIWVideoFrameDelegate.h</key>
<dict>
<key>hash</key>
<data>
4E8xM7l79Q0pj+PqnOIaLalKHZ0=
</data>
<key>hash2</key>
<data>
eVaF/p0qpzOF6/ryCEJ7Q2gdkyovIwmHM2QRFaFLjrU=
</data>
</dict>
<key>Headers/RCCallIWVideoView.h</key>
<dict>
<key>hash</key>
<data>
ibFWGpV35ABCTAhuEtUsgKHQVnw=
</data>
<key>hash2</key>
<data>
jiI7NxMC7CAXlY9mE0LW6YkSMEXIfnjoVS7yDUorUBg=
</data>
</dict>
<key>Headers/RongCallWrapper.h</key>
<dict>
<key>hash</key>
<data>
vXZ3cAYx+Hn3GKcucUwV0K4j8DQ=
</data>
<key>hash2</key>
<data>
TjeCqYh2mGPCDpHUTUAWlH8YPUvjci/ocEqzb+pJWoM=
</data>
</dict>
<key>Modules/module.modulemap</key>
<dict>
<key>hash</key>
<data>
mB2JsmGuPd2g/QyaXMtdCzdDuzw=
</data>
<key>hash2</key>
<data>
HjxU8CFo4bZWSBFLKJxPfiAlkZdKpuae+1t2Iqu0d+s=
</data>
</dict>
<key>RCConfig.plist</key>
<dict>
<key>hash</key>
<data>
QA7nn/q1j2Y4AJbaGtBBs8g71xE=
</data>
<key>hash2</key>
<data>
q9qti/DvWdK6nHCUQ3R/b3gsZ4wASUjoeUzGtn7YyXI=
</data>
</dict>
<key>RongRTCLib.bundle/HwAiVadModel.bin</key>
<dict>
<key>hash</key>
<data>
ATcRMel9IwX111oJWJbEEm8fxLw=
</data>
<key>hash2</key>
<data>
rI/0N8nw9Ktvh3flHD50aM1unvKAoT4PXCZogPS4lzo=
</data>
</dict>
<key>RongRTCLib.bundle/HwAinrModel.bin</key>
<dict>
<key>hash</key>
<data>
B8kB+UwS+Djpk42nGs6PsuZb4i4=
</data>
<key>hash2</key>
<data>
wWEpSmpBqk1A1pnvwExjRDLmRm4kLI6s07dug5+9ftg=
</data>
</dict>
</dict>
<key>rules</key>
<dict>
<key>^.*</key>
<true/>
<key>^.*\.lproj/</key>
<dict>
<key>optional</key>
<true/>
<key>weight</key>
<real>1000</real>
</dict>
<key>^.*\.lproj/locversion.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>1100</real>
</dict>
<key>^Base\.lproj/</key>
<dict>
<key>weight</key>
<real>1010</real>
</dict>
<key>^version.plist$</key>
<true/>
</dict>
<key>rules2</key>
<dict>
<key>.*\.dSYM($|/)</key>
<dict>
<key>weight</key>
<real>11</real>
</dict>
<key>^(.*/)?\.DS_Store$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>2000</real>
</dict>
<key>^.*</key>
<true/>
<key>^.*\.lproj/</key>
<dict>
<key>optional</key>
<true/>
<key>weight</key>
<real>1000</real>
</dict>
<key>^.*\.lproj/locversion.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>1100</real>
</dict>
<key>^Base\.lproj/</key>
<dict>
<key>weight</key>
<real>1010</real>
</dict>
<key>^Info\.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>20</real>
</dict>
<key>^PkgInfo$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>20</real>
</dict>
<key>^embedded\.provisionprofile$</key>
<dict>
<key>weight</key>
<real>20</real>
</dict>
<key>^version\.plist$</key>
<dict>
<key>weight</key>
<real>20</real>
</dict>
</dict>
</dict>
</plist>

View File

@@ -1,123 +0,0 @@
//
// RCCallIWAndroidPushConfig.h
// RongCallWrapper
//
// Created by RongCloud on 2021/7/14.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
typedef NS_ENUM(NSUInteger, RCCallIWImportanceHW) {
/*!
华为推送消息级别 NORMAL表示消息为服务与通讯类。消息提醒方式为锁屏+铃声+震动。
*/
RCCallIWImportanceHWNormal = 0,
/*!
华为推送消息级别 LOW, 表示消息为资讯营销类。消息提醒方式为静默通知,仅在下拉通知栏展示。
*/
RCCallIWImportanceHWLow = 1,
};
@interface RCCallIWAndroidPushConfig : NSObject
/*!
Android 平台 Push 唯一标识
目前支持小米、华为推送平台,默认开发者不需要进行设置,当消息产生推送时,消息的 messageUId 作为 notificationId 使用。
*/
@property (nonatomic, copy) NSString *notificationId;
/*!
小米的渠道 ID
该条消息针对小米使用的推送渠道,如开发者集成了小米推送,需要指定 channelId 时,可向 Android 端研发人员获取channelId 由开发者自行创建。
*/
@property (nonatomic, copy) NSString *channelIdMi;
/*!
小米 Large icon 链接
Large icon 可以出现在大图版和多字版消息中,显示在右边。国内版仅 MIUI12 以上版本支持,以下版本均不支持;国际版支持。图片要求:大小 120 * 120px格式为 png 或者 jpg 格式。
*/
@property (nonatomic, copy) NSString *imageUrlMi;
/*!
华为的渠道 ID
该条消息针对华为使用的推送渠道,如开发者集成了华为推送,需要指定 channelId 时,可向 Android 端研发人员获取channelId 由开发者自行创建。
*/
@property (nonatomic, copy) NSString *channelIdHW;
/*!
华为通知栏消息右侧大图标 URL
如果不设置则不展示通知栏右侧图标URL 使用的协议必须是 HTTPS 协议。
图标文件须小于 512KB图标建议规格大小40dp x 40dp弧角大小为 8dp超出建议规格大小的图标会存在图片压缩或显示不全的情况。
*/
@property (nonatomic, copy) NSString *imageUrlHW;
/*!
华为推送消息级别
*/
@property (nonatomic, assign) RCCallIWImportanceHW importanceHW;
/*!
华为推送消息分类
社交通讯:即时通讯[IM],音频、视频通话[VOIP]
服务提醒:订阅[SUBSCRIPTION],出行[TRAVEL],健康[HEALTH],工作事项提醒[WORK],帐号动态[ACCOUNT],订单&物流[EXPRESS],财务[FINANCE],系统提示[SYSTEM_REMINDER],邮件[MAIL]
资讯营销类:内容资讯/新闻/财经动态/生活资讯/社交动态/调研/其他[MARKETING]
营销活动:产品促销/功能推荐/运营活动/MARKETING
更多信息请参考华为消息分类标准文档: https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides/message-classification-0000001149358835
@discussion 默认值为 null如果为 null则以服务配置为准
@since 5.4.0
*/
@property (nonatomic, copy) NSString *categoryHW;
/*!
OPPO 的渠道 ID
该条消息针对 OPPO 使用的推送渠道,如开发者集成了 OPPO 推送,需要指定 channelId 时,可向 Android 端研发人员获取channelId 由开发者自行创建。
*/
@property (nonatomic, copy) NSString *channelIdOPPO;
/*!
VIVO 推送通道类型
开发者集成了 VIVO 推送,需要指定推送类型时,可进行设置。
目前可选值 "0"(运营消息) 和 "1"(系统消息)
*/
@property (nonatomic, copy) NSString *typeVivo;
/*!
Vivo 推送消息分类
系统消息分类
即时消息[IM],账号与资产[ACCOUNT],日程待办[TODO],设备信息[DEVICE_REMINDER],订单与物流[ORDER],订阅提醒[SUBSCRIPTION]
运营消息分类
新闻[NEWS],内容推荐[CONTENT],运营活动[MARKETING],社交动态[SOCIAL]
更多信息请参考 Vivo 消息分类标准文档: https://dev.vivo.com.cn/documentCenter/doc/359
@discussion 默认值为 null如果为 null则以服务配置为准
@since 5.4.2
*/
@property (nonatomic, copy) NSString *categoryVivo;
/*!
FCM 通知类型推送时所使用的分组 id
*/
@property (nonatomic, copy) NSString *collapseKeyFCM;
/*!
FCM 通知类型的推送所使用的通知图片 url
*/
@property (nonatomic, copy) NSString *imageUrlFCM;
/*!
FCM 通知的频道 ID
该应用程序必须使用此频道 ID 创建一个频道,然后才能收到带有该频道 ID 的任何通知。如果您未在请求中发送此频道 ID或者如果应用尚未创建提供的频道 ID则 FCM 使用应用清单中指定的频道 ID。
*/
@property (nonatomic, copy) NSString *channelIdFCM;
@end
NS_ASSUME_NONNULL_END

View File

@@ -1,16 +0,0 @@
//
// RCCallIWAudioConfig.h
// RongCallWrapper
//
// Created by RongCloud on 2021/7/14.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface RCCallIWAudioConfig : NSObject
@end
NS_ASSUME_NONNULL_END

View File

@@ -1,85 +0,0 @@
//
// RCCallIWCallSession.h
// RongCallWrapper
//
// Created by RongCloud on 2021/7/14.
//
#import <UIKit/UIKit.h>
#import <RongCallWrapper/RCCallIWUserProfile.h>
#import <RongCallWrapper/RCCallIWDefine.h>
NS_ASSUME_NONNULL_BEGIN
@interface RCCallIWCallSession : NSObject
/*!
通话类型
*/
@property (nonatomic, readonly) RCCallIWCallType callType;
/*!
通话媒体类型
*/
@property (nonatomic, readonly) RCCallIWMediaType mediaType;
/*!
通话id
*/
@property (nonatomic, readonly) NSString *callId;
/*!
通话目标id
*/
@property (nonatomic, readonly) NSString *targetId;
/*!
RTC会话唯一标识, 用于 Server API
*/
@property (nonatomic, readonly) NSString *sessionId;
/*!
通话的扩展信息
*/
@property (nonatomic, readonly) NSString *extra;
/*!
通话开始的时间
@discussion 如果是用户呼出的通话则startTime为通话呼出时间如果是呼入的通话则startTime为通话呼入时间。
*/
@property (nonatomic, readonly) long long startTime;
/*!
通话接通时间
*/
@property (nonatomic, readonly) long long connectedTime;
/*!
通话结束时间
*/
@property (nonatomic, readonly) long long endTime;
/*!
当前通话发起者
*/
@property (nonatomic, readonly) RCCallIWUserProfile *caller;
/*!
邀请当前用户到当前通话的邀请者
*/
@property (nonatomic, readonly) RCCallIWUserProfile *inviter;
/*!
当前用户
*/
@property (nonatomic, readonly) RCCallIWUserProfile *mine;
/*!
当前通话的全部用户列表
*/
@property (nonatomic, readonly) NSArray<RCCallIWUserProfile *> *users;
@end
NS_ASSUME_NONNULL_END

View File

@@ -1,429 +0,0 @@
//
// RCCallIWDefine.h
// RongCallWrapper
//
// Created by RongCloud on 2021/7/14.
//
#ifndef RCCallIWDefine_h
#define RCCallIWDefine_h
#import <Foundation/Foundation.h>
/*!
用户身份类型
*/
typedef NS_ENUM(NSInteger, RCCallIWUserType) {
/*!
普通身份
*/
RCCallIWUserTypeNormal = 1,
/*!
观察者身份
*/
RCCallIWUserTypeObserver = 2
};
/*!
通话类型
*/
typedef NS_ENUM(NSInteger, RCCallIWCallType) {
/*!
单聊通话
*/
RCCallIWCallTypeSingle = 0,
/*!
群聊通话
*/
RCCallIWCallTypeGroup = 1
};
/*!
通话媒体类型
*/
typedef NS_ENUM(NSInteger, RCCallIWMediaType) {
/*!
音频通话
*/
RCCallIWMediaTypeAudio = 0,
/*!
音视频通话
*/
RCCallIWMediaTypeAudioVideo = 2
};
/*!
相机类型
*/
typedef NS_ENUM(NSInteger, RCCallIWCamera) {
/*!
未指定
*/
RCCallIWCameraNone = -1,
/*!
前置相机
*/
RCCallIWCameraFront = 0,
/*!
后置相机
*/
RCCallIWCameraBack = 1,
};
/*!
网络质量
*/
typedef NS_ENUM(NSInteger, RCCallIWNetworkQuality) {
/*!
未知
*/
RCCallIWNetworkQualityUnknown = 0,
/*!
极好
*/
RCCallIWNetworkQualityExcellent = 1,
/*!
*/
RCCallIWNetworkQualityGood = 2,
/*!
一般
*/
RCCallIWNetworkQualityPoor = 3,
/*!
*/
RCCallIWNetworkQualityBad = 4,
/*!
极差
*/
RCCallIWNetworkQualityTerrible = 5,
};
/*!
视频显示模式
*/
typedef NS_ENUM(NSInteger, RCCallIWViewFitType) {
/*!
拉伸全屏
*/
RCCallIWViewFitTypeFill = 0,
/*!
满屏显示, 等比例填充, 直到填充满整个试图区域,其中一个维度的部分区域会被裁剪
*/
RCCallIWViewFitTypeCover = 1,
/*!
完整显示, 填充黑边, 等比例填充,直达一个维度到达区域边界
*/
RCCallIWViewFitTypeCenter = 2,
};
/*!
通话视频参数
*/
typedef NS_ENUM (NSInteger, RCCallIWVideoProfile) {
/*!
144x256, 15fps, 120~240kbps
*/
RCCallIW_VIDEO_PROFILE_144_256 = 10,
/*!
240x240, 15fps, 120~280kbps
*/
RCCallIW_VIDEO_PROFILE_240_240 = 20,
/*!
240x320, 15fps, 120~400kbps
*/
RCCallIW_VIDEO_PROFILE_240_320 = 30,
/*!
360x480, 15fps, 150~650kbps
*/
RCCallIW_VIDEO_PROFILE_360_480 = 40,
/*!
360x640, 15fps, 180~800kbps
*/
RCCallIW_VIDEO_PROFILE_360_640 = 50,
/*!
480x640, 15fps, 200~900kbps
*/
RCCallIW_VIDEO_PROFILE_480_640 = 60,
/*!
480x720, 15fps, 200~1000kbps
*/
RCCallIW_VIDEO_PROFILE_480_720 = 70,
/*!
720x1280, 15fps, 250~2200kbps
*/
RCCallIW_VIDEO_PROFILE_720_1280 = 80,
/*!
1080x1920, 15fps, 400~4000kbps
*/
RCCallIW_VIDEO_PROFILE_1080_1920 = 90,
/*!
144x256, 30fps, 240~480kbps
*/
RCCallIW_VIDEO_PROFILE_144_256_HIGH = 11,
/*!
240x240, 30fps, 240~360kbps
*/
RCCallIW_VIDEO_PROFILE_240_240_HIGH = 21,
/*!
240x320, 30fps, 240~800kbps
*/
RCCallIW_VIDEO_PROFILE_240_320_HIGH = 31,
/*!
360x480, 30fps, 300~1300kbps
*/
RCCallIW_VIDEO_PROFILE_360_480_HIGH = 41,
/*!
360x640, 30fps, 360~1600kbps
*/
RCCallIW_VIDEO_PROFILE_360_640_HIGH = 51,
/*!
480x640, 30fps, 400~1800kbps
*/
RCCallIW_VIDEO_PROFILE_480_640_HIGH = 61,
/*!
480x720, 30fps, 400~2000kbps
*/
RCCallIW_VIDEO_PROFILE_480_720_HIGH = 71,
/*!
720x1080, 30fps, 500~4400kbps
*/
RCCallIW_VIDEO_PROFILE_720_1280_HIGH = 81,
/*!
1080x1920, 30fps, 800~8000kbps
*/
RCCallIW_VIDEO_PROFILE_1080_1920_HIGH = 91,
};
/*!
摄像机方向
值与 AVCaptureVideoOrientation 一致
*/
typedef NS_ENUM(NSInteger, RCCallIWCameraOrientation) {
RCCallIWCameraOrientationPortrait = 1,
RCCallIWCameraOrientationPortraitUpsideDown = 2,
RCCallIWCameraOrientationLandscapeRight = 3,
RCCallIWCameraOrientationLandscapeLeft = 4,
};
/*!
通话结束原因
*/
typedef NS_ENUM (NSInteger, RCCallIWDisconnectReason) {
/*!
己方取消已发出的通话请求
*/
RCCallIWDisconnectReasonCancel = 1,
/*!
己方拒绝收到的通话请求
*/
RCCallIWDisconnectReasonReject = 2,
/*!
己方挂断
*/
RCCallIWDisconnectReasonHangup = 3,
/*!
己方忙碌
*/
RCCallIWDisconnectReasonBusyLine = 4,
/*!
己方未接听
*/
RCCallIWDisconnectReasonNoResponse = 5,
/*!
己方不支持当前引擎
*/
RCCallIWDisconnectReasonEngineUnsupported = 6,
/*!
己方网络出错
*/
RCCallIWDisconnectReasonNetworkError = 7,
/*!
己方获取媒体资源失败
*/
RCCallIWDisconnectReasonResourceError = 8,
/*!
己方发布资源失败
*/
RCCallIWDisconnectReasonPublishError = 9,
/*!
己方订阅资源失败
*/
RCCallIWDisconnectReasonSubscribeError = 10,
/*!
对方取消已发出的通话请求
*/
RCCallIWDisconnectReasonRemoteCancel = 11,
/*!
对方拒绝收到的通话请求
*/
RCCallIWDisconnectReasonRemoteReject = 12,
/*!
通话过程对方挂断
*/
RCCallIWDisconnectReasonRemoteHangup = 13,
/*!
对方忙碌
*/
RCCallIWDisconnectReasonRemoteBusyLine = 14,
/*!
对方未接听
*/
RCCallIWDisconnectReasonRemoteNoResponse = 15,
/*!
对方不支持当前引擎
*/
RCCallIWDisconnectReasonRemoteEngineUnsupported = 16,
/*!
对方网络错误
*/
RCCallIWDisconnectReasonRemoteNetworkError = 17,
/*!
对方获取媒体资源失败
*/
RCCallIWDisconnectReasonRemoteResourceError = 18,
/*!
对方发布资源失败
*/
RCCallIWDisconnectReasonRemotePublishError = 19,
/*!
对方订阅资源失败
*/
RCCallIWDisconnectReasonRemoteSubscribeError = 20,
/*!
己方其他端已加入新通话
*/
RCCallIWDisconnectReasonKickedByOtherCall = 21,
/*!
己方其他端已在通话中
*/
RCCallIWDisconnectReasonInOtherCall = 22,
/*!
己方已被禁止通话
*/
RCCallIWDisconnectReasonKickedByServer = 23,
/*!
对方其他端已加入新通话
*/
RCCallIWDisconnectReasonRemoteKickedByOtherCall = 24,
/*!
对方其他端已在通话中
*/
RCCallIWDisconnectReasonRemoteInOtherCall = 25,
/*!
对方已被禁止通话
*/
RCCallIWDisconnectReasonRemoteKickedByServer = 26,
/*!
己方其他端已接听
*/
RCCallIWDisconnectReasonAcceptByOtherClient = 27,
/*!
己方其他端已挂断
*/
RCCallIWDisconnectReasonHangupByOtherClient = 28,
/*!
己方被对方加入黑名单
*/
RCCallIWDisconnectReasonAddToBlackList = 29,
/*!
音视频服务已关闭
*/
RCCallIWDisconnectReasonMediaServerClosed = 30,
/*!
己方被降级为观察者
*/
RCCallIWDisconnectReasonDegrade = 31,
/*!
己方摄像头初始化错误,可能是没有打开使用摄像头权限
*/
RCCallIWDisconnectReasonInitVideoError = 32,
/*!
其他端已经接听
*/
RCCallIWDisconnectReasonOtherDeviceHadAccepted = 33,
/*!
im ipc服务已断开
*/
RCCallIWDisconnectReasonServiceDisconnected = 34
};
/*!
通话错误类型
*/
typedef NS_ENUM (NSInteger, RCCallIWErrorCode) {
/*!
成功
*/
RCCallIWSuccess = 0,
/*!
开通的音视频服务没有及时生效或音视频服务已关闭请等待3-5小时后重新安装应用或开启音视频服务再进行测试
*/
RCCallIWEngineNotFound = 1,
/*!
网络不可用
*/
RCCallIWNetworkUnavailable = 2,
/*!
已经处于通话中了
*/
RCCallIWOneCallExisted = 3,
/*!
无效操作
*/
RCCallIWOperationUnavailable = 4,
/*!
参数错误
*/
RCCallIWInvalidParam = 5,
/*!
网络不稳定
*/
RCCallIWNetworkUnstable = 6,
/*!
媒体服务请求失败
*/
RCCallIWMediaRequestFailed = 7,
/*!
媒体服务初始化失败
*/
RCCallIWMediaServerNotReady = 8,
/*!
媒体服务未初始化
*/
RCCallIWMediaServerNotInitialized = 9,
/*!
媒体服务请求超时
*/
RCCallIWMediaRequestTimeout = 10,
/*!
未知的媒体服务错误
*/
RCCallIWMediaUnkownError = 11,
/*!
已被禁止通话
*/
RCCallIWMediaKickedByServerError = 12,
/*!
音视频服务已关闭
*/
RCCallIWMediaServerClosedError = 13,
/*!
音视频发布资源失败
*/
RCCallIWMediaServerPublishError = 14,
/*!
音视频订阅资源失败
*/
RCCallIWMediaServerSubscribeError = 15,
/*!
其他端已在通话中错误
*/
RCCallIWMediaJoinRoomRefuseError = 16
};
#endif /* RCCallIWDefine_h */

View File

@@ -1,449 +0,0 @@
//
// RCCallIWEngine.h
// RongCallWrapper
//
// Created by RongCloud on 2021/7/14.
//
#import <UIKit/UIKit.h>
#import <RongCallWrapper/RCCallIWDefine.h>
@class RCCallIWEngineConfig;
@class RCCallIWPushConfig;
@class RCCallIWAudioConfig;
@class RCCallIWVideoConfig;
@class RCCallIWCallSession;
@class RCCallIWUserProfile;
@class RCCallIWBeautyOption;
@protocol RCCallIWEngineDelegate;
@protocol RCCallIWSampleBufferVideoFrameDelegate;
NS_ASSUME_NONNULL_BEGIN
@interface RCCallIWEngine : NSObject
/*!
获取引擎实例
@return 引擎实例
*/
+ (RCCallIWEngine *)sharedInstance;
/*!
配置引擎
@param config 引擎配置
*/
- (void)setEngineConfig:(nullable RCCallIWEngineConfig *)config;
/*!
配置推送
@param callPushConfig 呼叫推送配置
@param hangupPushConfig 挂断推送配置
*/
- (void)setPushConfig:(nullable RCCallIWPushConfig *)callPushConfig
hangupPushConfig:(nullable RCCallIWPushConfig *)hangupPushConfig;
/*!
配置推送
@param callPushConfig 呼叫推送配置
@param hangupPushConfig 挂断推送配置
@param enableApplePushKit 设置是否使用苹果 PushKit 推送, YES 使用, NO 不使用
@discussion
是否打开苹果 PushKit 推送, 该推送可以直接激活 App, 注: iOS 13 以后 PushKit 必须结合苹果 CallKit.framework 进行使用, 否则无法正常处理 VoIP 相关推送逻辑,
如果设置为 NO 则使用普通 APNS 消息推送来处理音视频信令逻辑, 默认关闭. 打开之后 App 默认需要自行处理 VoIP 推送唤起 CallKit.framework 的逻辑.
*/
- (void)setPushConfig:(nullable RCCallIWPushConfig *)callPushConfig
hangupPushConfig:(nullable RCCallIWPushConfig *)hangupPushConfig
enableApplePushKit:(BOOL)enableApplePushKit;
/*!
配置音频
@param config 音频配置
*/
- (void)setAudioConfig:(nullable RCCallIWAudioConfig *)config;
/*!
配置视频
@param config 视频配置
*/
- (void)setVideoConfig:(nullable RCCallIWVideoConfig *)config;
/*!
配置监听
@param delegate 监听代理
*/
- (void)setEngineDelegate:(nullable NSObject<RCCallIWEngineDelegate> *)delegate;
/*!
拨打电话-单聊
@param userId 被叫端UserId
@param type 发起的通话媒体类型
@discussion
如果type为音视频直接打开默认前置摄像头。
@return 当前Call Session
*/
- (RCCallIWCallSession *)startCall:(NSString *)userId
type:(RCCallIWMediaType)type;
/*!
拨打电话-单聊
@param userId 被叫端UserId
@param type 发起的通话媒体类型
@param extra 附件信息
@discussion
如果type为音视频直接打开默认前置摄像头。
@return 当前通话 Session
*/
- (RCCallIWCallSession *)startCall:(NSString *)userId
type:(RCCallIWMediaType)type
extra:(nullable NSString *)extra;
/*!
拨打电话-群聊
@param groupId 群组Id
@param userIds 被叫端的用户ID列表, 数组中仅填写被叫端UserId, 请不要填写主叫端UserId, 否则无法发起呼叫
@param type 发起的通话媒体类型
@discussion
如果type为音视频直接打开默认前置摄像头。
@return 当前通话 Session
*/
- (RCCallIWCallSession *)startCall:(NSString *)groupId
userIds:(NSArray<NSString *> *)userIds
type:(RCCallIWMediaType)type;
/*!
拨打电话-群聊
@param groupId 群组Id
@param userIds 被叫端的用户ID列表, 数组中仅填写被叫端UserId, 请不要填写主叫端UserId, 否则无法发起呼叫
@param type 发起的通话媒体类型
@param extra 附件信息
@discussion
如果type为音视频直接打开默认前置摄像头。
@return 当前通话 Session
*/
- (RCCallIWCallSession *)startCall:(NSString *)groupId
userIds:(NSArray<NSString *> *)userIds
type:(RCCallIWMediaType)type
extra:(nullable NSString *)extra;
/*!
拨打电话-群聊
@param groupId 群组Id
@param userIds 被叫端的用户ID列表, 数组中仅填写被叫端UserId, 请不要填写主叫端UserId, 否则无法发起呼叫
@param observerUserIds 主叫端指定需要以观察者身份加入房间的用户ID列表, 如果主叫端需要以观察者身份加入房间也需要填写主叫端UserId
@param type 发起的通话媒体类型
@discussion
如果type为音视频直接打开默认前置摄像头。
@return 当前通话 Session
*/
- (RCCallIWCallSession *)startCall:(NSString *)groupId
userIds:(NSArray<NSString *> *)userIds
observerUserIds:(nullable NSArray<NSString *> *)observerUserIds
type:(RCCallIWMediaType)type;
/*!
拨打电话-群聊
@param groupId 群组Id
@param userIds 被叫端的用户ID列表, 数组中仅填写被叫端UserId, 请不要填写主叫端UserId, 否则无法发起呼叫
@param observerUserIds 主叫端指定需要以观察者身份加入房间的用户ID列表, 如果主叫端需要以观察者身份加入房间也需要填写主叫端UserId
@param type 发起的通话媒体类型
@param extra 附件信息
@discussion
如果type为音视频直接打开默认前置摄像头。
@return 当前通话 Session
*/
- (RCCallIWCallSession *)startCall:(NSString *)groupId
userIds:(NSArray<NSString *> *)userIds
observerUserIds:(nullable NSArray<NSString *> *)observerUserIds
type:(RCCallIWMediaType)type
extra:(nullable NSString *)extra;
/*!
获取当前通话 Session
@return 当前通话 Session
*/
- (RCCallIWCallSession *)getCurrentCallSession;
/*!
接电话
@discussion
如果呼入类型为语音通话,即接受语音通话,如果呼入类型为视频通话,即接受视频通话,打开默认(前置)摄像头。
观察者不开启摄像头。
*/
- (void)accept;
/*!
挂断电话
*/
- (void)hangup;
/*!
麦克风控制
@param enable YES 开启麦克风NO 关闭麦克风
*/
- (void)enableMicrophone:(BOOL)enable;
/*!
获取当前麦克风状态
@return 当前麦克风是否开启
*/
- (BOOL)isEnableMicrophone;
/*!
扬声器控制
@param enable YES 开启扬声器NO 关闭扬声器
*/
- (void)enableSpeaker:(BOOL)enable;
/*!
获取当前扬声器状态
@return 当前扬声器是否开启
*/
- (BOOL)isEnableSpeaker;
/*!
摄像头控制
@param enable YES 开启摄像头NO 关闭摄像头
*/
- (void)enableCamera:(BOOL)enable;
/*!
摄像头控制
@param enable YES 开启摄像头NO 关闭摄像头
@param camera 指定摄像头
*/
- (void)enableCamera:(BOOL)enable camera:(RCCallIWCamera)camera;
/*!
获取当前摄像头状态
@return 当前摄像头是否开启
*/
- (BOOL)isEnableCamera;
/*!
获取当前摄像头
@return 当前摄像头
*/
- (RCCallIWCamera)currentCamera;
/*!
翻转摄像头
*/
- (void)switchCamera;
/*!
设置预览窗口
@param userId 用户id
@param view 视频预览视图
*/
- (void)setVideoView:(NSString *)userId
view:(UIView *)view;
/*!
设置预览窗口
@param userId 用户id
@param view 视频预览视图
@param fit 视频显示模式
*/
- (void)setVideoView:(NSString *)userId
view:(UIView *)view
fit:(RCCallIWViewFitType)fit;
/*!
修改通话媒体类型
@param type 通话媒体类型
*/
- (void)changeMediaType:(RCCallIWMediaType)type;
/*!
邀请用户
@param userIds 被邀请用户id列表
*/
- (void)inviteUsers:(NSArray<NSString *> *)userIds;
/*!
邀请用户
@param userIds 被邀请用户id列表
@param observerUserIds 被邀请观察者id列表
*/
- (void)inviteUsers:(NSArray<NSString *> *)userIds
observerUserIds:(NSArray<NSString *> *)observerUserIds;
- (void)setLocalVideoProcessedDelegate:(id<RCCallIWSampleBufferVideoFrameDelegate>)delegate;
@end
@protocol RCCallIWEngineDelegate <NSObject>
@required
/*!
接收到通话呼入的回调
@param session 通话Session
*/
- (void)didReceiveCall:(RCCallIWCallSession *)session;
/*!
通话已接通
*/
- (void)callDidConnect;
/*!
通话已结束
@param reason 结束原因
*/
- (void)callDidDisconnect:(RCCallIWDisconnectReason)reason;
/*!
对端用户加入了通话
@param user 对端用户信息
*/
- (void)remoteUserDidJoin:(RCCallIWUserProfile *)user;
/*!
对端用户挂断
@param userId 对端用户信息
@param reason 挂断原因
*/
- (void)remoteUserDidLeave:(NSString *)userId
reason:(RCCallIWDisconnectReason)reason;
@optional
/*!
接收到通话呼入的远程通知的回调
*/
- (void)didReceiveCallRemoteNotification:(NSString *)callId
inviterUserId:(NSString *)inviterUserId
mediaType:(RCCallIWMediaType)mediaType
userIdList:(NSArray *)userIdList
userDict:(NSDictionary *)userDict
isVoIPPush:(BOOL)isVoIPPush
pushConfig:(RCCallIWPushConfig *)pushConfig;
/*!
接收到取消通话的远程通知的回调
*/
- (void)didCancelCallRemoteNotification:(NSString *)callId
inviterUserId:(NSString *)inviterUserId
mediaType:(RCCallIWMediaType)mediaType
userIdList:(NSArray *)userIdList
pushConfig:(RCCallIWPushConfig *)pushConfig
isRemoteCancel:(BOOL)isRemoteCancel;
/*!
开启/关闭摄像头的回调
*/
- (void)didEnableCamera:(RCCallIWCamera)camera
enable:(BOOL)enable;
/*!
切换摄像头的回调
@param camera 当前选择的摄像头
*/
- (void)didSwitchCamera:(RCCallIWCamera)camera;
/*!
通话出现错误的回调
*/
- (void)callDidError:(RCCallIWErrorCode)code;
/*!
开始呼叫通话的回调
*/
- (void)callDidMake;
/*!
对端用户正在振铃
*/
- (void)remoteUserDidRing:(NSString *)userId;
/*!
有用户被邀请加入通话
*/
- (void)remoteUserDidInvite:(NSString *)userId
mediaType:(RCCallIWMediaType)mediaType;
/*!
对端用户切换了媒体类型
*/
- (void)remoteUserDidChangeMediaType:(RCCallIWUserProfile *)user
mediaType:(RCCallIWMediaType)mediaType;
/*!
对端用户开启或关闭了麦克风的状态
*/
- (void)remoteUserDidChangeMicrophoneState:(RCCallIWUserProfile *)user
enable:(BOOL)enable;
/*!
对端用户开启或关闭了摄像头的状态
*/
- (void)remoteUserDidChangeCameraState:(RCCallIWUserProfile *)user
enable:(BOOL)enable;
/*!
当前通话网络状态的回调,该回调方法每秒触发一次
@param user 用户信息
@param quality 网络质量
@discussion
如果user是本端用户, quality代表上行网络质量
如果user是远端用户, quality代表下行网络质量
*/
- (void)user:(RCCallIWUserProfile *)user networkQuality:(RCCallIWNetworkQuality)quality;
/*!
当前通话某用户声音音量回调,该回调方法每两秒触发一次
@param user 用户信息
@param volume 声音音量
@discussion
声音级别: 0~9, 0为无声, 依次变大
如果user是本端用户, volume代表发送音量
如果user是远端用户, volume代表接收音量
*/
- (void)user:(RCCallIWUserProfile *)user audioVolume:(int)volume;
@end
NS_ASSUME_NONNULL_END

View File

@@ -1,23 +0,0 @@
//
// RCCallIWEngineConfig.h
// RongCallWrapper
//
// Created by RongCloud on 2021/7/14.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
/*!
引擎配置
*/
@interface RCCallIWEngineConfig : NSObject
/*!
开启通话记录 默认NO
*/
@property (nonatomic, assign) BOOL enableCallSummary;
@end
NS_ASSUME_NONNULL_END

View File

@@ -1,41 +0,0 @@
//
// RCCallIWFlutterView.h
// RongCallWrapper
//
// Created by 潘铭达 on 2021/6/16.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@protocol RCCallIWFlutterViewDelegate <NSObject>
- (void)changeSize:(int)width height:(int)height;
- (void)changeRotation:(int)rotation;
- (void)firstFrameRendered;
- (void)frameRendered;
// 当原生层摄像头进行操作的时候 通知 Flutter 层的 view 进行视图的镜像操作
- (void)onMirrorChanged:(BOOL)mirror;
@end
@interface RCCallIWFlutterView : NSObject
@property (nonatomic, weak) id<RCCallIWFlutterViewDelegate> textureViewDelegate;
- (instancetype)init NS_UNAVAILABLE;
- (instancetype)new NS_UNAVAILABLE;
- (instancetype)initWithCoder:(NSCoder *)coder NS_UNAVAILABLE;
+ (RCCallIWFlutterView *)create;
@end
NS_ASSUME_NONNULL_END

View File

@@ -1,41 +0,0 @@
//
// RCCallIWIOSPushConfig.h
// RongCallWrapper
//
// Created by RongCloud on 2021/7/14.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface RCCallIWIOSPushConfig : NSObject
/*!
iOS 平台通知栏分组 ID
相同的 thread-id 推送分为一组
iOS10 开始支持
*/
@property (nonatomic, copy) NSString *threadId;
/*!
iOS 标识推送的类型
如果不设置后台默认取消息类型字符串,如 RC:TxtMsg
*/
@property (nonatomic, copy) NSString *category;
/*!
iOS 平台通知覆盖 ID
apnsCollapseId 相同时,新收到的通知会覆盖老的通知,最大 64 字节
iOS10 开始支持
*/
@property (nonatomic, copy) NSString *apnsCollapseId;
/*!
iOS 富文本推送内容
*/
@property (nonatomic, copy) NSString *richMediaUri;
@end
NS_ASSUME_NONNULL_END

View File

@@ -1,74 +0,0 @@
//
// RCCallIWPushConfig.h
// RongCallWrapper
//
// Created by RongCloud on 2021/7/14.
//
#import <Foundation/Foundation.h>
#import <RongCallWrapper/RCCallIWIOSPushConfig.h>
#import <RongCallWrapper/RCCallIWAndroidPushConfig.h>
NS_ASSUME_NONNULL_BEGIN
/*!
推送配置
*/
@interface RCCallIWPushConfig : NSObject
/*!
是否屏蔽通知标题
YES: 不显示通知标题
NO: 显示通知标题
@discussion 默认情况下融云单聊消息通知标题为用户名、群聊消息为群名称,设置后不会再显示通知标题。
@discussion 此属性只针目标用户为 iOS 平台时有效Android 第三方推送平台的通知标题为必填项,所以暂不支持。
*/
@property (nonatomic, assign) BOOL disableTitle;
/*!
推送标题
如果没有设置,会使用下面的默认标题显示规则
默认标题显示规则:
内置消息:单聊通知标题显示为发送者名称,群聊通知标题显示为群名称。
自定义消息:默认不显示标题。
*/
@property (nonatomic, copy) NSString *title;
/*!
推送内容
优先使用 MessagePushConfig 的 pushContent如果没有则使用 sendMessage 或者 sendMediaMessage 的 pushContent。
*/
@property (nonatomic, copy) NSString *content;
/*!
远程推送附加信息
优先使用 MessagePushConfig 的 pushData如果没有则使用 sendMessage 或者 sendMediaMessage 的 pushData。
*/
@property (nonatomic, copy) NSString *data;
/*!
是否强制显示通知详情
当目标用户通过 RCPushProfile 中的 updateShowPushContentStatus 设置推送不显示消息详情时,可通过此参数,强制设置该条消息显示推送详情。
*/
@property (nonatomic, assign) BOOL forceShowDetailContent;
/*!
推送模板 ID设置后根据目标用户通过 SDK RCPushProfile 中的 setPushLauguageCode 设置的语言环境,匹配模板中设置的语言内容进行推送,未匹配成功时使用默认内容进行推送,模板内容在“开发者后台-自定义推送文案”中进行设置。
RCMessagePushConfig 中的 Title 和 PushContent 优先级高于模板 IDtemplateId中对应的标题和推送内容。
*/
@property (nonatomic, copy) NSString *templateId;
/*!
iOS 平台相关配置
*/
@property (nonatomic, strong) RCCallIWIOSPushConfig *iOSConfig;
/*!
Android 平台相关配置
*/
@property (nonatomic, strong) RCCallIWAndroidPushConfig *androidConfig;
@end
NS_ASSUME_NONNULL_END

View File

@@ -1,41 +0,0 @@
//
// RCCallIWUserProfile.h
// RongCallWrapper
//
// Created by RongCloud on 2021/7/14.
//
#import <Foundation/Foundation.h>
#import <RongCallWrapper/RCCallIWDefine.h>
NS_ASSUME_NONNULL_BEGIN
@interface RCCallIWUserProfile : NSObject
/*!
用户身份类型
*/
@property (nonatomic, readonly) RCCallIWUserType userType;
/*!
通话媒体类型
*/
@property (nonatomic, readonly) RCCallIWMediaType mediaType;
/*!
用户id
*/
@property (nonatomic, readonly) NSString *userId;
/*!
用户的通话媒体连接ID
*/
@property (nonatomic, readonly) NSString *mediaId;
/*!
用户是否开启摄像头
*/
@property (nonatomic, readonly) BOOL enableCamera;
/*!
用户是否开启麦克风
*/
@property (nonatomic, readonly) BOOL enableMicrophone;
@end
NS_ASSUME_NONNULL_END

View File

@@ -1,40 +0,0 @@
//
// RCCallIWVideoConfig.h
// RongCallWrapper
//
// Created by RongCloud on 2021/7/14.
//
#import <Foundation/Foundation.h>
#import <RongCallWrapper/RCCallIWDefine.h>
NS_ASSUME_NONNULL_BEGIN
@interface RCCallIWVideoConfig : NSObject
/*!
视频配置
默认值 RCCallIW_VIDEO_PROFILE_720_1280
*/
@property (nonatomic, assign) RCCallIWVideoProfile profile;
/*!
摄像头
默认值 RCCallIWCameraFront
*/
@property (nonatomic, assign) RCCallIWCamera defaultCamera;
/*!
相机方向
默认值 RCCallIWCameraOrientationPortrait
*/
@property (nonatomic, assign) RCCallIWCameraOrientation cameraOrientation;
/*!
本地预览是否镜像
前置摄像头默认: YES后置摄像头默认: NO
*/
@property (nonatomic, assign) BOOL isPreviewMirror;
@end
NS_ASSUME_NONNULL_END

View File

@@ -1,18 +0,0 @@
//
// RCCallIWVideoFrameDelegate.h
// RongCallWrapper
//
// Created by 潘铭达 on 2021/12/27.
//
#import <AVFoundation/AVFoundation.h>
NS_ASSUME_NONNULL_BEGIN
@protocol RCCallIWSampleBufferVideoFrameDelegate <NSObject>
- (void)onPixelBuffer:(CVPixelBufferRef)pixelBuffer;
@end
NS_ASSUME_NONNULL_END

View File

@@ -1,23 +0,0 @@
//
// RCCallIWVideoView.h
// RongCallWrapper
//
// Created by RongCloud on 2023/5/12.
//
#import <UIKit/UIKit.h>
#import <RongRTCLib/RongRTCLib.h>
NS_ASSUME_NONNULL_BEGIN
@interface RCCallIWVideoView : UIView
@property (nonatomic, weak, readonly) RCRTCVideoView *videoView;
// 预览是否镜像 (最终设置的是原生 videoView所以要注意设置的时机
@property (nonatomic, assign) BOOL isMirror;
// 原生 videoView 添加完成
@property (nonatomic, copy) void(^nativeVideoViewDidAdd)(RCRTCVideoView *videoView);
@end
NS_ASSUME_NONNULL_END

View File

@@ -1,28 +0,0 @@
//
// RongCallWrapper.h
// RongCallWrapper
//
// Created by RongCloud on 2021/7/12.
//
#import <Foundation/Foundation.h>
//! Project version number for RongCallWrapper.
FOUNDATION_EXPORT double RongCallWrapperVersionNumber;
//! Project version string for RongCallWrapper.
FOUNDATION_EXPORT const unsigned char RongCallWrapperVersionString[];
// In this header, you should import all the public headers of your framework using statements like #import <RongCallWrapper/PublicHeader.h>
#import <RongCallWrapper/RCCallIWDefine.h>
#import <RongCallWrapper/RCCallIWEngine.h>
#import <RongCallWrapper/RCCallIWCallSession.h>
#import <RongCallWrapper/RCCallIWEngineConfig.h>
#import <RongCallWrapper/RCCallIWAudioConfig.h>
#import <RongCallWrapper/RCCallIWVideoConfig.h>
#import <RongCallWrapper/RCCallIWPushConfig.h>
#import <RongCallWrapper/RCCallIWIOSPushConfig.h>
#import <RongCallWrapper/RCCallIWAndroidPushConfig.h>
#import <RongCallWrapper/RCCallIWUserProfile.h>
#import <RongCallWrapper/RCCallIWFlutterView.h>
#import <RongCallWrapper/RCCallIWVideoFrameDelegate.h>

View File

@@ -1,6 +0,0 @@
framework module RongCallWrapper {
umbrella header "RongCallWrapper.h"
export *
module * { export * }
}

View File

@@ -1,61 +0,0 @@
<?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>Location</key>
<dict>
<key>LocationImageQuality</key>
<real>0.7</real>
<key>LocationImageWidth</key>
<string>480</string>
<key>LocationImageHeight</key>
<string>240</string>
</dict>
<key>File</key>
<dict>
<key>RelativePath</key>
<string>Documents/MyFile</string>
<key>MaxRangeUnit</key>
<real>1048576</real>
</dict>
<key>Voice</key>
<dict>
<key>AudioEncodingBitRate</key>
<real>7950</real>
</dict>
<key>Image</key>
<dict>
<key>ThumbnailQuality</key>
<string>0.3</string>
<key>ThumbnailMaxSize</key>
<string>240</string>
<key>ThumbnailMinSize</key>
<string>100</string>
<key>ImageQuality</key>
<real>0.85</real>
<key>ImageWidth</key>
<integer>1080</integer>
<key>ImageHeight</key>
<integer>1080</integer>
</dict>
<key>CustomerService</key>
<dict>
<key>SuspendWhenLeave</key>
<true/>
</dict>
<key>Download</key>
<dict>
<key>DownloadSliceSize</key>
<real>20971520</real>
</dict>
<key>Sight</key>
<dict>
<key>SightCompressWidth</key>
<integer>540</integer>
<key>SightCompressHeight</key>
<integer>960</integer>
</dict>
<key>HeartBeatInterval</key>
<integer>15</integer>
</dict>
</plist>

View File

@@ -1,372 +0,0 @@
<?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>files</key>
<dict>
<key>Headers/RCCallIWAndroidPushConfig.h</key>
<data>
c8Nr+zXJBvG4EEuUrT1QFmj5fnQ=
</data>
<key>Headers/RCCallIWAudioConfig.h</key>
<data>
kGPMWb7BecYVlHQ9V+f794nOR4w=
</data>
<key>Headers/RCCallIWCallSession.h</key>
<data>
AnhTDcH3VjceT8E5vwfn4M1KRkE=
</data>
<key>Headers/RCCallIWDefine.h</key>
<data>
DAGsL8w84kqw8ZXp2cNbh7QSWLI=
</data>
<key>Headers/RCCallIWEngine.h</key>
<data>
Z4zTFQqdlABKiqe5+snC7d6/BpA=
</data>
<key>Headers/RCCallIWEngineConfig.h</key>
<data>
yQGCGoe19+myITZLqeO0VadV7Js=
</data>
<key>Headers/RCCallIWFlutterView.h</key>
<data>
y2cqUnU8QMNZ3CG0+C2mMNsxzic=
</data>
<key>Headers/RCCallIWIOSPushConfig.h</key>
<data>
8qkNfl6i7/7v8+Ff+yCXkSZcbKA=
</data>
<key>Headers/RCCallIWPushConfig.h</key>
<data>
Dl/lC2HDVoElj5rdcPDirtFy00I=
</data>
<key>Headers/RCCallIWUserProfile.h</key>
<data>
OirfPQvRXiMSA7f7QCyBpmskr8E=
</data>
<key>Headers/RCCallIWVideoConfig.h</key>
<data>
kOdMpo6eHS1xv3wjNG6+ZiTkjLo=
</data>
<key>Headers/RCCallIWVideoFrameDelegate.h</key>
<data>
4E8xM7l79Q0pj+PqnOIaLalKHZ0=
</data>
<key>Headers/RCCallIWVideoView.h</key>
<data>
ibFWGpV35ABCTAhuEtUsgKHQVnw=
</data>
<key>Headers/RongCallWrapper.h</key>
<data>
vXZ3cAYx+Hn3GKcucUwV0K4j8DQ=
</data>
<key>Info.plist</key>
<data>
eSwRbQaZaWWJvuK9mFRGBJ74yy0=
</data>
<key>Modules/module.modulemap</key>
<data>
mB2JsmGuPd2g/QyaXMtdCzdDuzw=
</data>
<key>RCConfig.plist</key>
<data>
QA7nn/q1j2Y4AJbaGtBBs8g71xE=
</data>
<key>RongRTCLib.bundle/HwAiVadModel.bin</key>
<data>
ATcRMel9IwX111oJWJbEEm8fxLw=
</data>
<key>RongRTCLib.bundle/HwAinrModel.bin</key>
<data>
B8kB+UwS+Djpk42nGs6PsuZb4i4=
</data>
</dict>
<key>files2</key>
<dict>
<key>Headers/RCCallIWAndroidPushConfig.h</key>
<dict>
<key>hash</key>
<data>
c8Nr+zXJBvG4EEuUrT1QFmj5fnQ=
</data>
<key>hash2</key>
<data>
tUBraHIlNP/nvghXtWtweS8roeTuGXH5le7Gtoqg2lI=
</data>
</dict>
<key>Headers/RCCallIWAudioConfig.h</key>
<dict>
<key>hash</key>
<data>
kGPMWb7BecYVlHQ9V+f794nOR4w=
</data>
<key>hash2</key>
<data>
h7YMB2G9xbeDIdlGpjDdy7VeEd1V1lY0bhUhPnmj7do=
</data>
</dict>
<key>Headers/RCCallIWCallSession.h</key>
<dict>
<key>hash</key>
<data>
AnhTDcH3VjceT8E5vwfn4M1KRkE=
</data>
<key>hash2</key>
<data>
47JdoajKNgc8PvI2M1lo7XgKFDap/8zNE5aubhiMO9g=
</data>
</dict>
<key>Headers/RCCallIWDefine.h</key>
<dict>
<key>hash</key>
<data>
DAGsL8w84kqw8ZXp2cNbh7QSWLI=
</data>
<key>hash2</key>
<data>
Txy4g9BC23EsyFZkra0VUfIXAZ+pOnmxcrIhTeyNNSw=
</data>
</dict>
<key>Headers/RCCallIWEngine.h</key>
<dict>
<key>hash</key>
<data>
Z4zTFQqdlABKiqe5+snC7d6/BpA=
</data>
<key>hash2</key>
<data>
N8ZP4WzDTeXJ9tD15nIZiMEXBKA1ndfNuInF3WNd1pE=
</data>
</dict>
<key>Headers/RCCallIWEngineConfig.h</key>
<dict>
<key>hash</key>
<data>
yQGCGoe19+myITZLqeO0VadV7Js=
</data>
<key>hash2</key>
<data>
+LkKAOHRYcPLjKrmOMYPRIr8DULzitIdlJyGE/v7hIo=
</data>
</dict>
<key>Headers/RCCallIWFlutterView.h</key>
<dict>
<key>hash</key>
<data>
y2cqUnU8QMNZ3CG0+C2mMNsxzic=
</data>
<key>hash2</key>
<data>
IgRu9C00s2UBfZL10F56c7rG2Xu3yS1AM1ET+CChUlQ=
</data>
</dict>
<key>Headers/RCCallIWIOSPushConfig.h</key>
<dict>
<key>hash</key>
<data>
8qkNfl6i7/7v8+Ff+yCXkSZcbKA=
</data>
<key>hash2</key>
<data>
4IZfnNPqAtJn0v1WGY1M4TmPWPwWbaeNWxUf2qNdFKw=
</data>
</dict>
<key>Headers/RCCallIWPushConfig.h</key>
<dict>
<key>hash</key>
<data>
Dl/lC2HDVoElj5rdcPDirtFy00I=
</data>
<key>hash2</key>
<data>
h+XlKn0zxZLWTqirksIReWFIy98pxSzpVOxUcCzgudo=
</data>
</dict>
<key>Headers/RCCallIWUserProfile.h</key>
<dict>
<key>hash</key>
<data>
OirfPQvRXiMSA7f7QCyBpmskr8E=
</data>
<key>hash2</key>
<data>
QmOPdaT/+idE+GEzrr3QR9BAsf0n10xelqc6s0vnOfw=
</data>
</dict>
<key>Headers/RCCallIWVideoConfig.h</key>
<dict>
<key>hash</key>
<data>
kOdMpo6eHS1xv3wjNG6+ZiTkjLo=
</data>
<key>hash2</key>
<data>
UOkF0SEprFatUeYdw91eH8BhSBNcYalRGdJV7OeZszw=
</data>
</dict>
<key>Headers/RCCallIWVideoFrameDelegate.h</key>
<dict>
<key>hash</key>
<data>
4E8xM7l79Q0pj+PqnOIaLalKHZ0=
</data>
<key>hash2</key>
<data>
eVaF/p0qpzOF6/ryCEJ7Q2gdkyovIwmHM2QRFaFLjrU=
</data>
</dict>
<key>Headers/RCCallIWVideoView.h</key>
<dict>
<key>hash</key>
<data>
ibFWGpV35ABCTAhuEtUsgKHQVnw=
</data>
<key>hash2</key>
<data>
jiI7NxMC7CAXlY9mE0LW6YkSMEXIfnjoVS7yDUorUBg=
</data>
</dict>
<key>Headers/RongCallWrapper.h</key>
<dict>
<key>hash</key>
<data>
vXZ3cAYx+Hn3GKcucUwV0K4j8DQ=
</data>
<key>hash2</key>
<data>
TjeCqYh2mGPCDpHUTUAWlH8YPUvjci/ocEqzb+pJWoM=
</data>
</dict>
<key>Modules/module.modulemap</key>
<dict>
<key>hash</key>
<data>
mB2JsmGuPd2g/QyaXMtdCzdDuzw=
</data>
<key>hash2</key>
<data>
HjxU8CFo4bZWSBFLKJxPfiAlkZdKpuae+1t2Iqu0d+s=
</data>
</dict>
<key>RCConfig.plist</key>
<dict>
<key>hash</key>
<data>
QA7nn/q1j2Y4AJbaGtBBs8g71xE=
</data>
<key>hash2</key>
<data>
q9qti/DvWdK6nHCUQ3R/b3gsZ4wASUjoeUzGtn7YyXI=
</data>
</dict>
<key>RongRTCLib.bundle/HwAiVadModel.bin</key>
<dict>
<key>hash</key>
<data>
ATcRMel9IwX111oJWJbEEm8fxLw=
</data>
<key>hash2</key>
<data>
rI/0N8nw9Ktvh3flHD50aM1unvKAoT4PXCZogPS4lzo=
</data>
</dict>
<key>RongRTCLib.bundle/HwAinrModel.bin</key>
<dict>
<key>hash</key>
<data>
B8kB+UwS+Djpk42nGs6PsuZb4i4=
</data>
<key>hash2</key>
<data>
wWEpSmpBqk1A1pnvwExjRDLmRm4kLI6s07dug5+9ftg=
</data>
</dict>
</dict>
<key>rules</key>
<dict>
<key>^.*</key>
<true/>
<key>^.*\.lproj/</key>
<dict>
<key>optional</key>
<true/>
<key>weight</key>
<real>1000</real>
</dict>
<key>^.*\.lproj/locversion.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>1100</real>
</dict>
<key>^Base\.lproj/</key>
<dict>
<key>weight</key>
<real>1010</real>
</dict>
<key>^version.plist$</key>
<true/>
</dict>
<key>rules2</key>
<dict>
<key>.*\.dSYM($|/)</key>
<dict>
<key>weight</key>
<real>11</real>
</dict>
<key>^(.*/)?\.DS_Store$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>2000</real>
</dict>
<key>^.*</key>
<true/>
<key>^.*\.lproj/</key>
<dict>
<key>optional</key>
<true/>
<key>weight</key>
<real>1000</real>
</dict>
<key>^.*\.lproj/locversion.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>1100</real>
</dict>
<key>^Base\.lproj/</key>
<dict>
<key>weight</key>
<real>1010</real>
</dict>
<key>^Info\.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>20</real>
</dict>
<key>^PkgInfo$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>20</real>
</dict>
<key>^embedded\.provisionprofile$</key>
<dict>
<key>weight</key>
<real>20</real>
</dict>
<key>^version\.plist$</key>
<dict>
<key>weight</key>
<real>20</real>
</dict>
</dict>
</dict>
</plist>

View File

@@ -1,43 +0,0 @@
<?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>AvailableLibraries</key>
<array>
<dict>
<key>BinaryPath</key>
<string>RongRTCLib.framework/RongRTCLib</string>
<key>LibraryIdentifier</key>
<string>ios-arm64</string>
<key>LibraryPath</key>
<string>RongRTCLib.framework</string>
<key>SupportedArchitectures</key>
<array>
<string>arm64</string>
</array>
<key>SupportedPlatform</key>
<string>ios</string>
</dict>
<dict>
<key>BinaryPath</key>
<string>RongRTCLib.framework/RongRTCLib</string>
<key>LibraryIdentifier</key>
<string>ios-x86_64-simulator</string>
<key>LibraryPath</key>
<string>RongRTCLib.framework</string>
<key>SupportedArchitectures</key>
<array>
<string>x86_64</string>
</array>
<key>SupportedPlatform</key>
<string>ios</string>
<key>SupportedPlatformVariant</key>
<string>simulator</string>
</dict>
</array>
<key>CFBundlePackageType</key>
<string>XFWK</string>
<key>XCFrameworkFormatVersion</key>
<string>1.0</string>
</dict>
</plist>

View File

@@ -1,22 +0,0 @@
//
// RCRTCAudioConfig.h
// RongRTCLib
//
// Created by RongCloud on 2020/2/13.
// Copyright © 2020 RongCloud. All rights reserved.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface RCRTCAudioConfig : NSObject
/*!
本地音频码率
*/
@property (nonatomic, assign) NSUInteger bitrate;
@end
NS_ASSUME_NONNULL_END

View File

@@ -1,160 +0,0 @@
//
// RCRTCEffectManager.h
// RongRTCLib
//
// Created by RongCloud on 2020/8/18.
// Copyright © 2020 RongCloud. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "RCRTCCodeDefine.h"
NS_ASSUME_NONNULL_BEGIN
/*!
音效代理方法
*/
@protocol RCRTCSoundEffectProtocol <NSObject>
/*!
当前音效播放进度
@param progress 播放进度 range [0,1]
@discussion
当前播放进度
@remarks 代理
*/
- (void)didReportEffectPlayingProgress:(float)progress effectId:(NSUInteger)effectId;
/*!
音效播放结束,如果循环播放多次,多次循环后调用
@discussion
播放结束,如果循环播放多次,多次循环后调用
@remarks 代理
*/
- (void)didEffectFinished:(NSUInteger)effectId;
@end
@interface RCRTCAudioEffectManager : NSObject
/*!
delegate
*/
@property (nonatomic, weak, nullable) id<RCRTCSoundEffectProtocol> delegate;
/*!
开启或关闭耳返
@param enabled YES 开启NO 关闭,默认为 NO
*/
- (void)enableInEarMonitoring:(BOOL)enabled;
/*!
设置耳返音量
@param volume [0,100]
*/
- (void)setInEarMonitoringVolume:(NSUInteger)volume;
/*!
播放指定音效文件filePath 必须可用,需要指定唯一的 ID如果调用`preloadEffect`接口设置过 ID此 ID 要与其相同
如果前后传入相同的 ID但是 filePath 不同,会覆盖,播放最新的 filePath 音效
@param soundId 音效的唯一 ID
@param filePath 音效的路径
@param loopCount 音效的循环次数
@param publish 是否将音效推送到远端,设置为 YES其他端可听到此音效声音如果设置为 NO只有本端可以听到
*/
- (RCRTCCode)playEffect:(NSInteger)soundId
filePath:(NSString *)filePath
loopCount:(int)loopCount
publish:(BOOL)publish;
/*!
播放指定音效文件filePath 必须可用,需要指定唯一的 ID如果调用`preloadEffect`接口设置过 ID此 ID 要与其相同
如果前后传入相同的 ID但是 filePath 不同,会覆盖,播放最新的 filePath 音效
@param soundId 音效的唯一 ID
@param filePath 音效的路径
@param loopCount 音效的循环次数
@param volume 音效音量 [0,100]
@param publish 是否将音效推送到远端,设置为 YES其他端可听到此音效声音如果设置为 NO只有本端可以听到
*/
- (RCRTCCode)playEffect:(NSInteger)soundId
filePath:(NSString *_Nullable)filePath
loopCount:(NSUInteger)loopCount
volume:(NSUInteger)volume
publish:(BOOL)publish;
/*!
停止指定的音效
@param soundId 音效唯一 ID
*/
- (RCRTCCode)stopEffect:(NSInteger)soundId;
/*!
停止所有的音效
*/
- (RCRTCCode)stopAllEffects;
/*!
暂停指定的音效文件
@param soundId 指定的音效 ID
*/
- (RCRTCCode)pauseEffect:(NSInteger)soundId;
/*!
暂停所有的音效
*/
- (RCRTCCode)pauseAllEffects;
/*!
恢复播放指定的音效
@param soundId 指定的音效 ID
*/
- (RCRTCCode)resumeEffect:(NSInteger)soundId;
/*!
恢复播放所有的音效
*/
- (RCRTCCode)resumeAllEffects;
/*!
预加载指定的音效文件filePath 必须可用
@param soundId 指定的音效 ID
@param filePath 音效路径
*/
- (RCRTCCode)preloadEffect:(NSInteger)soundId filePath:(NSString *)filePath;
/*!
取消加载的音效文件
@param soundId 指定的音效 ID
*/
- (RCRTCCode)unloadEffect:(NSInteger)soundId;
/*!
设置全局的音效的音量
@param volume 音量 [0,100],默认为 100.
*/
- (RCRTCCode)setEffectsVolume:(NSUInteger)volume;
/*!
设置指定音效的音效音量
@param soundId 指定的音效 ID
@param volume 音量 [0,100],默认为 100
*/
- (RCRTCCode)setVolumeOfEffect:(NSInteger)soundId withVolume:(NSUInteger)volume;
/*!
获取指定音效的音量
*/
- (NSUInteger)getVolumeOfEffectId:(NSInteger)soundId;
/*!
获取全局音效的音量
*/
- (NSUInteger)getEffectsVolume;
@end
NS_ASSUME_NONNULL_END

View File

@@ -1,55 +0,0 @@
//
// RCRTCAudioInputStream.h
// RongRTCLib
//
// Created by RongCloud on 2020/6/1.
// Copyright © 2020 RongCloud. All rights reserved.
//
#import "RCRTCInputStream.h"
NS_ASSUME_NONNULL_BEGIN
/*!
接收到的的音频流
*/
@interface RCRTCAudioInputStream : RCRTCInputStream
/*!
远端音频数据回调
added from 5.1.6
*/
@property (nonatomic, copy, nullable) RCRTCAudioFrameCallback audioDataCallback;
/*!
初始化
@discussion
初始化
@warning
请勿调用, 仅供 SDK 内部调用
@remarks 资源管理
@return RCRTCAudioInputStream 实例对象
*/
- (instancetype)init NS_UNAVAILABLE;
/*!
初始化
@discussion
初始化
@warning
请勿调用, 仅供 SDK 内部调用
@remarks 资源管理
@return RCRTCAudioInputStream 实例对象
*/
- (instancetype)new NS_UNAVAILABLE;
@end
NS_ASSUME_NONNULL_END

View File

@@ -1,382 +0,0 @@
//
// RCRTCAudioMixer.h
// RTCLib
//
// Created by RongCloud on 2019/5/7.
// Copyright © 2019 RongCloud. All rights reserved.
//
#import <CoreAudio/CoreAudioTypes.h>
#import <Foundation/Foundation.h>
#import "RCRTCGlobals.h"
/*!
无限期循环
*/
RONGRTCLIB_EXTERN const UInt32 RCRTCLoopsIndefinitely;
/*!
混音引擎状态
deprecated from 5.1.3
*/
typedef NS_ENUM(NSUInteger, RTCMixEngineStatus) {
/*!
正常
*/
RTCMixEngineStatusNormal,
/*!
准备中
*/
RTCMixEngineStatusPrepare,
/*!
播放中(或混音中)
*/
RTCMixEngineStatusPlaying,
/*!
暂停中
*/
RTCMixEngineStatusPause,
/*!
停止
*/
RTCMixEngineStatusStop
};
/*!
播放(或混音)状态
added from 5.1.3
*/
typedef NS_ENUM(NSUInteger, RCRTCAudioMixingState) {
/*!
播放中(或混音中)
*/
RCRTCMixingStatePlaying,
/*!
暂停中
*/
RCRTCMixingStatePause,
/*!
停止
*/
RCRTCMixingStateStop,
/*!
播放失败
*/
RCRTCMixingStateFailed
};
/*!
播放(或混音)状态改变的原因
added from 5.1.3
*/
typedef NS_ENUM(NSUInteger, RCRTCAudioMixingReason) {
/*!
成功调用 startMixingWithURL:playback:mixerMode:loopCount:;
*/
RCRTCMixingReasonStartedByUser,
/*!
混音文件加载完成
*/
RCRTCMixingReasonFileLoaded,
/*!
混音文件完成一次循环播放(或混音)
*/
RCRTCMixingReasonOneLoopCompleted,
/*!
混音文件开始新的一次循环播放(或混音)
*/
RCRTCMixingReasonStartNewLoop,
/*!
混音文件完成所有循环播放(或混音)
*/
RCRTCMixingReasonAllLoopsCompleted,
/*!
成功调用 stop 停止播放(或混音)
*/
RCRTCMixingReasonStoppedByUser,
/*!
成功调用 pause 停止播放(或混音)
*/
RCRTCMixingReasonPausedByUser,
/*!
成功调用 resume 停止播放(或混音)
*/
RCRTCMixingReasonResumedByUser,
/*!
混音文件加载失败(文件不存在或者文件格式不支持等原因导致加载失败)
*/
RCRTCMixingReasonCanNotOpen,
};
/*!
混音模式
*/
typedef NS_ENUM(NSInteger, RCRTCMixerMode) {
/*!
对端只能听见麦克风采集的声音
*/
RCRTCMixerModeNone,
/*!
对端能够听到麦克风采集的声音和音频文件的声音
*/
RCRTCMixerModeMixing,
/*!
对端只能听到音频文件的声音
*/
RCRTCMixerModeReplace
};
/**
本地音频左右声道混音
@discussion Add from 5.1.13
*/
typedef NS_ENUM(NSInteger, RCRTCAudioDualMonoMode) {
/*!
当前音频立体声混音
*/
RCRTCAudioDualMonoStereo = 0,
/*!
当前音频左声道混音
*/
RCRTCAudioDualMonoLeft = 1,
/*!
当前音频右声道混音
*/
RCRTCAudioDualMonoRight = 2
};
NS_ASSUME_NONNULL_BEGIN
/*!
AudioMixer 的播放代理
*/
@protocol RCRTCAudioMixerAudioPlayDelegate <NSObject>
/*!
当前播放进度
@param progress 播放进度 range [0,1]
@discussion
当前播放进度
@remarks 代理
*/
- (void)didReportPlayingProgress:(float)progress;
/*!
混音状态
@param mixingState 混音状态
@param mixingReason 混音状态改变的原因
@discussion
当前混音状态
Add from 5.1.3
@remarks 代理
*/
- (void)didAudioMixingStateChanged:(RCRTCAudioMixingState)mixingState reason:(RCRTCAudioMixingReason)mixingReason;
@optional
/*!
播放结束,如果循环播放多次,多次循环后调用
@discussion
播放结束,如果循环播放多次,多次循环后调用
@deprecated from 5.1.3
@remarks 代理
*/
- (void)didPlayToEnd DEPRECATED_MSG_ATTRIBUTE("use didAudioMixingStateChanged:reason: instead");
@end
/*!
混音引擎
*/
@interface RCRTCAudioMixer : NSObject
/*!
获取混音引擎单例
*/
+ (RCRTCAudioMixer *)sharedInstance;
/*!
AudioMixer 的代理
*/
@property (nonatomic, weak, nullable) id<RCRTCAudioMixerAudioPlayDelegate> delegate;
/*!
音频文件混音时的输入音量, 取值范围 [0,100], 默认值 100
*/
@property (nonatomic, assign) NSUInteger mixingVolume;
/*!
音频文件本地播放音量, 取值范围 [0,100], 默认值 100
*/
@property (nonatomic, assign) NSUInteger playingVolume;
/*!
混音文件的播放音调相对原始音调的偏移值,取值范围 [-12,12],默认值 0其中 0 表示原始音调1 表示升高一个半音,-1 降低一个半音,以此类推。
暂不支持处理在线音频
*/
@property (nonatomic, assign) double pitch;
/*!
混音文件的播放速度,取值范围 [50,400],默认值 100其中 100 表示原始速度50 表示 0.5 倍速400 表示 4 倍速,以此类推。
暂不支持处理在线音频
*/
@property (nonatomic, assign) double playbackSpeed;
/*!
当前混音状态
*/
@property (nonatomic, assign, readonly)
RTCMixEngineStatus status DEPRECATED_MSG_ATTRIBUTE("use didAudioMixingStateChanged:reason: instead");
/*!
方法 writeAudioBufferList:frames:sampleTime:playback: 写入 AudioBufferList 的格式
*/
@property (nonatomic, readonly, class) AudioStreamBasicDescription writeAsbd;
/*!
当前混音文件时长
*/
@property (nonatomic, assign, readonly) NSTimeInterval duration;
/*!
获取指定音频文件的时长
@param url 音频文件的 File URL
@discussion
获取指定音频文件的时长,只支持本地音频文件
@remarks 音频配置
@return 音频文件的时长
*/
+ (Float64)durationOfAudioFile:(NSURL *)url;
/*!
设置播放进度
@param progress 设置播放进度 取值范围 [0,1]
@discussion
设置播放进度
@remarks 音频配置
*/
- (void)setPlayProgress:(float)progress;
/*!
设置混音文件的播放音调
@param pitch 相对原始音调的偏移值,默认值为 0取值范围 [-12,12],其中 0 表示原始音调1 表示升高一个半音,-1 降低一个半音,以此类推。
@discussion
设置混音文件的播放音调,暂不支持处理在线音频
Added from 5.2.0
@remarks 音频配置
*/
- (void)setPitch:(double)pitch;
/*!
设置混音文件的播放速度
@param playbackSpeed 播放速度,默认值为 100取值范围 [50,400],其中 100 表示原始速度50 表示 0.5 倍速400 表示 4 倍速,以此类推。
@discussion
设置混音文件的播放速度,暂不支持处理在线音频
Added from 5.2.0
@remarks 音频配置
*/
- (void)setPlaybackSpeed:(double)playbackSpeed;
/*!
开始混音, 开始新混音之前需要先调用 stop 结束混音, 重复调用会忽略操作
@param fileURL 资源 URL
@param isPlay 是否播放
@param mode 混音行为模式
@param count 循环混音或者播放次数
@discussion
混音功能
@remarks 音频配置
@return 开始是否成功
*/
- (BOOL)startMixingWithURL:(NSURL *)fileURL
playback:(BOOL)isPlay
mixerMode:(RCRTCMixerMode)mode
loopCount:(NSUInteger)count;
/*!
设置混音声道模式
@param mode 声道模式 0 立体声混音, 1 左声道混音, 2 右声道混音
@discussion
只针对本地文件资源产生效果, 不支持网络资源的 url
Add from 5.1.13
@remarks 音频配置
@return 设置是否成功
*/
- (BOOL)setAudioDualMonoMode:(RCRTCAudioDualMonoMode)mode;
/*!
写入自定义音频数据
@param abl 音频数据,格式为 PCM
@param frames 音频帧个数
@param sampleTime 音频帧时间戳
@param isPlay 是否在本地播放
@discussion
写入自定义音频数据
@remarks 音频流处理
*/
- (void)writeAudioBufferList:(const AudioBufferList *)abl
frames:(UInt32)frames
sampleTime:(SInt64)sampleTime
playback:(BOOL)isPlay;
/*!
写入自定义音频数据
@param abl 音频数据,格式为 PCM
@param frames 音频帧个数
@param sampleTime 音频帧时间戳
@param asbd 音频格式描述
@param isPlay 是否在本地播放
@discussion
写入自定义音频数据
@remarks 音频流处理
*/
- (void)writeAudioBufferList:(const AudioBufferList *)abl
frames:(UInt32)frames
sampleTime:(SInt64)sampleTime
asbd:(AudioStreamBasicDescription)asbd
playback:(BOOL)isPlay;
/*!
暂停
@remarks 音频配置
@return 暂停是否成功
*/
- (BOOL)pause;
/*!
恢复
@remarks 音频配置
@return 恢复是否成功
*/
- (BOOL)resume;
/*!
结束
@remarks 音频配置
@return 结束是否成功
*/
- (BOOL)stop;
@end
NS_ASSUME_NONNULL_END

View File

@@ -1,45 +0,0 @@
//
// RCRTCAudioOutputStream.h
// RongRTCLib
//
// Created by RongCloud on 2020/6/2.
// Copyright © 2020 RongCloud. All rights reserved.
//
#import "RCRTCOutputStream.h"
NS_ASSUME_NONNULL_BEGIN
@interface RCRTCAudioOutputStream : RCRTCOutputStream
/*!
初始化
@discussion
初始化
@warning
请勿调用, 仅供 SDK 内部调用
@remarks 资源管理
@return RCRTCAudioOutputStream 实例对象
*/
- (instancetype)init NS_UNAVAILABLE;
/*!
初始化
@discussion
初始化
@warning
请勿调用, 仅供 SDK 内部调用
@remarks 资源管理
@return RCRTCAudioOutputStream 实例对象
*/
- (instancetype)new NS_UNAVAILABLE;
@end
NS_ASSUME_NONNULL_END

View File

@@ -1,163 +0,0 @@
//
// RCBaseRoom.h
// RongRTCLib
//
// Created by RongCloud on 2020/8/3.
// Copyright © 2020 RongCloud. All rights reserved.
//
#import <Foundation/Foundation.h>
#import <RongIMLibCore/RongIMLibCore.h>
#import "RCRTCLibDefine.h"
NS_ASSUME_NONNULL_BEGIN
@class RCRTCRoomConfig;
@class RCRTCRemoteUser;
@interface RCRTCBaseRoom : NSObject
/*!
房间ID
*/
@property (nonatomic, copy, readonly) NSString *roomId;
/*!
加入房间时设置的房间配置
*/
@property (nonatomic, strong, readonly, nullable) RCRTCRoomConfig *roomConfig;
/*!
会话 id, 用于 server API会话唯一标识
*/
@property (nonatomic, copy, readonly, nullable) NSString *sessionId;
/*!
参与用户
*/
@property (nonatomic, strong, readonly) NSArray<RCRTCRemoteUser *> *remoteUsers;
/*!
获取指定远端用户
@param userId 用户 ID
@discussion
根据用户 ID 获取房间内远端用户,不存在则返回 nil
*/
- (nullable RCRTCRemoteUser *)getRemoteUser:(NSString *)userId;
/*!
发送消息
@param content 消息的内容
@param successBlock 消息发送成功的回调 [messageId:消息的ID]
@param errorBlock 消息发送失败的回调 [nErrorCode:发送失败的错误码,messageId:消息的ID]
@discussion
该接口只能发送 persistentFlag 为 MessagePersistent_STATUS 的状态消息, 远端用户如果不在线则消息丢失, 自定义消息时下面标识一定要给出, 否则会导致消息发送失败
+ (RCMessagePersistent)persistentFlag {
return MessagePersistent_STATUS;
}
@remarks 房间管理
@return 发送的消息实体
*/
- (nullable RCMessage *)sendMessage:(RCMessageContent *)content
success:(nullable void (^)(long messageId))successBlock
error:(nullable void (^)(NSInteger nErrorCode, long messageId))errorBlock;
/*!
设置房间属性
@param attributeValue 属性值
@param key 属性名称
@param message 是否在设置属性的时候携带消息内容, 传空则不往房间中发送消息
@param completion 设置完成回调
@discussion
设置房间属性
@remarks 房间管理
*/
- (void)setRoomAttributeValue:(NSString *)attributeValue
forKey:(NSString *)key
message:(nullable RCMessageContent *)message
completion:(nullable RCRTCOperationCallback)completion
DEPRECATED_MSG_ATTRIBUTE("use setAttribute:forKey:message:completion: API instead");
/*!
设置房间属性
@param attributeValue 属性值
@param key 属性名称
@param message 是否在设置属性的时候携带消息内容, 传空则不往房间中发送消息
@param completion 设置完成回调
@discussion
设置房间属性
@remarks 房间管理
*/
- (void)setAttribute:(NSString *)attributeValue
forKey:(NSString *)key
message:(nullable RCMessageContent *)message
completion:(nullable RCRTCOperationCallback)completion;
/*!
删除房间属性
@param attributeKeys 属性名称数组
@param message 是否在设置属性的时候携带消息内容, 传空则不往房间中发送消息
@param completion 删除完成回调
@discussion
删除房间属性
@remarks 房间管理
*/
- (void)deleteRoomAttributes:(NSArray<NSString *> *)attributeKeys
message:(nullable RCMessageContent *)message
completion:(nullable RCRTCOperationCallback)completion
DEPRECATED_MSG_ATTRIBUTE("use deleteAttributes:message:completion: API instead");
/*!
删除房间属性
@param attributeKeys 属性名称数组
@param message 是否在设置属性的时候携带消息内容, 传空则不往房间中发送消息
@param completion 删除完成回调
@discussion
删除房间属性
@remarks 房间管理
*/
- (void)deleteAttributes:(NSArray<NSString *> *)attributeKeys
message:(nullable RCMessageContent *)message
completion:(nullable RCRTCOperationCallback)completion;
/*!
获取房间属性
@param attributeKeys 属性名称
@param completion 获取结果回调
@discussion
获取房间属性
@remarks 房间管理
*/
- (void)getRoomAttributes:(NSArray<NSString *> *)attributeKeys
completion:(nullable RCRTCAttributeOperationCallback)completion
DEPRECATED_MSG_ATTRIBUTE("use getAttributes:completion: API instead");
/*!
获取房间属性
@param attributeKeys 属性名称
@param completion 获取结果回调
@discussion
获取房间属性
@remarks 房间管理
*/
- (void)getAttributes:(NSArray<NSString *> *)attributeKeys
completion:(nullable RCRTCAttributeOperationCallback)completion;
@end
NS_ASSUME_NONNULL_END

View File

@@ -1,93 +0,0 @@
//
// RCRTCBaseStat.h
// RongRTCLib
//
// Created by RongCloud on 2021/12/27.
// Copyright © 2021 RongCloud. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "RCRTCLibDefine.h"
NS_ASSUME_NONNULL_BEGIN
@interface RCRTCBaseStat : NSObject
/*!
媒体类型
*/
@property (nonatomic, readonly) NSString *mediaType;
/*!
媒体流类型
*/
@property (nonatomic, readonly) RCRTCMediaStreamType mediaStreamType;
/*!
音量大小, 0 - 9表示音量高低
*/
@property (nonatomic, readonly) NSInteger audioLevel;
/*!
码率
*/
@property (nonatomic, readonly) float bitRate;
/*!
丢包率
*/
@property (nonatomic, readonly) float packetLoss;
/*!
视频帧宽度
*/
@property (nonatomic, readonly) NSInteger frameWidth;
/*!
视频帧高度
*/
@property (nonatomic, readonly) NSInteger frameHeight;
/*!
往返时间
*/
@property (nonatomic, readonly) NSInteger rtt;
/*!
帧率
*/
@property (nonatomic, readonly) NSInteger frameRate;
/*!
抖动
*/
@property (nonatomic, readonly) NSInteger jitterReceived;
/*!
编码名称
*/
@property (nonatomic, readonly, nullable) NSString *codecName;
/*!
渲染延时
*/
@property (nonatomic, readonly) NSInteger renderDelayMs;
/*!
编解码器名称
*/
@property (nonatomic, readonly, nullable) NSString *codecImplementationName;
/*!
nacks 数量
*/
@property (nonatomic, readonly) NSInteger googNacksReceived;
/*!
统计格式化字符串
*/
@property (nonatomic, readonly) NSString *formString;
@end
NS_ASSUME_NONNULL_END

View File

@@ -1,82 +0,0 @@
//
// RCRTCCDNStream.h
// RongRTCLib
//
// Created by RongCloud on 2021/5/18.
// Copyright © 2021 RongCloud. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "RCRTCInputStream.h"
#import "RCRTCLibDefine.h"
#import "RCRTCDrawer.h"
NS_ASSUME_NONNULL_BEGIN
typedef void (^RCRTCConfigCallback)(BOOL isSuccess, RCRTCCode code);
@class RCRTCCDNInputStream;
@protocol RCRTCCDNInputStreamDelegate <NSObject>
/*!
SEI 数据监听回调
@param cdnStream 当前 cdn 流对象
@param data SEI 数据
@discussion
订阅 cdn 流成功后,通过 receiver 回调 cdn 流中包含 SEI 信息
回调的频次取决于 cdn 流的 SEI 帧数据间隔
*/
- (void)cdnStream:(RCRTCCDNInputStream *)cdnStream handleSEIData:(NSString *)data;
@end
@interface RCRTCCDNInputStream : RCRTCInputStream
/*!
设置 cdn 流监听代理
*/
@property (nonatomic, weak) id<RCRTCCDNInputStreamDelegate> delegate;
/*!
获取订阅 CDN 流前设置的分辨率
*/
- (RCRTCVideoSizePreset)getVideoResolution;
/*!
获取订阅 CDN 流前设置的帧率
*/
- (RCRTCVideoFPS)getVideoFps;
/*!
当前订阅成功的 CDN 流最高支持的分辨率
*/
- (RCRTCVideoSizePreset)getHighestResolution;
/*!
当前订阅成功的 CDN 流最高支持的帧率
*/
- (RCRTCVideoFPS)getHighestFPS;
/*!
设置分辨率和帧率
@param videoSizePreset 分辨率
@param fps 帧率
*/
- (void)setVideoConfig:(RCRTCVideoSizePreset)videoSizePreset
fpsValue:(RCRTCVideoFPS)fps
completion:(nullable RCRTCConfigCallback)completion;
/*!
设置视频流的渲染视图
@param render 渲染视图
@discussion
接受到远端用户的视频流,然后设置视频流的渲染视图,就可以渲染出远端视频
@remarks 视频配置
*/
- (void)setVideoView:(nullable id<RCRTCDrawer>)render;
@end
NS_ASSUME_NONNULL_END

View File

@@ -1,290 +0,0 @@
//
// RCRTCCameraOutputStream.h
// RongRTCLib
//
// Created by RongCloud on 2019/1/8.
// Copyright © 2019年 RongCloud. All rights reserved.
//
#import <CoreMedia/CoreMedia.h>
#import <UIKit/UIKit.h>
#import "RCRTCLibDefine.h"
#import "RCRTCVideoView.h"
#import "RCRTCVideoOutputStream.h"
#import "RCRTCVideoStreamConfig.h"
NS_ASSUME_NONNULL_BEGIN
/*!
摄像头输出流,以摄像头为视频源的视频输出流
*/
@interface RCRTCCameraOutputStream : RCRTCVideoOutputStream
/*!
当前开启摄像头位置
*/
@property (nonatomic, assign) RCRTCDeviceCamera cameraPosition;
/*!
摄像头采集角度
默认以 AVCaptureVideoOrientationPortrait 角度进行采集
*/
@property (nonatomic, assign) AVCaptureVideoOrientation videoOrientation;
/*!
本地摄像头采集是否镜像
前置摄像头默认: YES后置摄像头默认: NO
*/
@property (nonatomic, assign) BOOL isCaptureMirror;
/*!
本地摄像头采集是否镜像
前置摄像头默认: YES后置摄像头默认: NO
*/
@property (nonatomic, assign) BOOL isPreviewMirror DEPRECATED_MSG_ATTRIBUTE("use RCRTCCameraOutputStream.h isCaptureMirror instead");;
/*!
本地摄像头发送数据是否镜像
默认: NO, 不镜像
*/
@property (nonatomic, assign) BOOL isEncoderMirror;
/*!
是否启用视频小流
摄像头视频流,默认开启。自定义视频流,默认关闭
*/
@property (nonatomic, assign) BOOL enableTinyStream;
@property (atomic, copy, nullable) RCRTCVideoCMSampleBufferCallback videoDisplayBufferCallback DEPRECATED_MSG_ATTRIBUTE("please use RCRTCVideoOutputStream.h outputVideoStream:willRenderVideoFrame: instead");
/*!
初始化
@discussion
初始化
@warning
请勿调用, 仅供 SDK 内部调用,如要获取实例对象,请使用 [RCRTCEngine sharedInstance].defaultVideoStream 获取实例。
@remarks 资源管理
@return RCRTCCameraOutputStream 实例对象
*/
- (instancetype)init NS_UNAVAILABLE;
/*!
初始化
@discussion
初始化
@warning
请勿调用, 仅供 SDK 内部调用,如要获取实例对象,请使用 [RCRTCEngine sharedInstance].defaultVideoStream 获取实例。
@remarks 资源管理
@return RCRTCCameraOutputStream 实例对象
*/
- (instancetype)new NS_UNAVAILABLE;
/*!
写入视频流数据
@param sample 媒体数据
@param error 失败时返回的相关描述
@discussion
写入视频流数据
@warning
请勿调用,摄像头输出流内部已经实现摄像头数据采集,调用者无需自己写入视频流数据
@remarks 资源管理
*/
- (void)write:(CMSampleBufferRef)sample error:(NSError **)error NS_UNAVAILABLE;
/*!
设置视频源
@param videoSource 视频源
@discussion
请勿调用,摄像头输出流的视频源已经封装在 SDK 内,调用者无需设置视频源,如果要自定义视频流,请使用 RCRTCVideoOutputStream
@remarks 资源管理
*/
- (void)setVideoSource:(id<RCRTCVideoSourceInterface>)videoSource NS_UNAVAILABLE;
/*!
设置视频流的渲染视图
@param view 渲染视图
@discussion
设置本地摄像头采集的视频流渲染视图
@remarks 视频配置
*/
- (void)setVideoView:(nullable id<RCRTCDrawer>)view;
/*!
设置视频数的渲染纹理视图
@param view 渲染纹理视图
@discussion
设置本地摄像头采集的视频流渲染纹理视图
@remarks 视频配置
*/
- (void)setVideoTextureView:(nullable RCRTCVideoTextureView *)view;
/*!
开启摄像头数据采集
@discussion
开启摄像头采集数据
@remarks 资源管理
*/
- (void)startCapture;
/*!
停止摄像头数据采集
@discussion
关闭摄像头采集数据
@remarks 资源管理
*/
- (void)stopCapture;
/*!
切换前后摄像头
@discussion
切换前后摄像头
@remarks 视频配置
*/
- (void)switchCamera;
/*!
摄像头是否支持区域对焦
@discussion
摄像头是否支持手动对焦功能
@remarks 摄像头配置
*/
- (BOOL)isCameraFocusSupported;
/*!
设置预览视图中的对焦点
@param point 对焦点,(xy)是在预览视图中归一化的坐标,即对焦点相对预览视图的位置与预览视图宽高的比值,取值范围为[0, 1],左上角是(0, 0)
@discussion
改变对焦位置
@remarks 摄像头配置
*/
- (BOOL)setCameraFocusPositionInPreview:(CGPoint)point;
/*!
摄像头是否支持区域测光
@discussion
摄像头是否支持手动曝光功能
@remarks 摄像头配置
*/
- (BOOL)isCameraExposurePositionSupported;
/*!
设置预览视图中的曝光点
@param point 曝光点,(xy)是在预览视图中归一化的坐标,即曝光点相对预览视图的位置与预览视图宽高的比值,取值范围为[0, 1],左上角是(0, 0)
@discussion
改变对焦位置
@remarks 摄像头配置
*/
- (BOOL)setCameraExposurePositionInPreview:(CGPoint)point;
/*!
摄像头是否支持闪光灯
@discussion
摄像头是否支持闪光灯
@remarks 摄像头配置
*/
- (BOOL)isCameraTorchSupported;
/*!
设置是否打开摄像头闪光灯
@param enable YES 为打开NO 为关闭摄像头闪光灯
@discussion
设置是否打开摄像头闪光灯
@remarks 摄像头配置
*/
- (BOOL)enableCameraTorch:(BOOL)enable;
/*!
摄像头是否支持缩放
@discussion
摄像头是否支持缩放
@remarks 摄像头配置
*/
- (BOOL)isCameraZoomSupported;
/*!
设置摄像头缩放比例
@param zoomFactor 摄像头缩放比例,有效范围从 1.0 到最大缩放
@discussion
设置摄像头缩放比例
@remarks 摄像头配置
*/
- (BOOL)setCameraZoomFactor:(float)zoomFactor;
/*!
获取摄像头最大缩放比例
@discussion
获取摄像头最大缩放比例
@remarks 摄像头配置
*/
- (float)getCameraMaxZoomFactor;
/*!
设置小流视频配置
@param config 视频配置
@discussion
设置小流视频配置
@remarks 视频配置
*/
- (BOOL)setTinyVideoConfig:(RCRTCVideoStreamConfig *)config;
/*!
获取小流视频配置
@discussion
获取小流视频配置
@remarks 视频配置
*/
- (nullable RCRTCVideoStreamConfig *)getTinyVideoConfig;
@end
NS_ASSUME_NONNULL_END

View File

@@ -1,263 +0,0 @@
//
// RongRTCError.h
// RongRTCLib
//
// Created by RongCloud on 2019/1/12.
// Copyright © 2019 RongCloud. All rights reserved.
//
#import <Foundation/Foundation.h>
/*!
音视频错误码定义
服务器返回错误以 4 开头,后两位是业务代码,最后两位是错误码 4XXXX如 400XX 基础连接部分
本地返回错误以 5 开头,后两位是业务代码,最后两位是错误码 5XXXX如 500XX 初始化基础连接部分
*/
typedef NS_ENUM(NSInteger, RCRTCCode) {
/*!
成功
*/
RCRTCCodeSuccess = 0,
/*!
初始化失败, 信令服务IM Server未连接
*/
RCRTCCodeSignalServerNotConnect = 50000,
/*!
参数错误
*/
RCRTCCodeParameterError = 50001,
/*!
加入相同房间错误,表示用户在客户端重复加入相同的房间
*/
RCRTCCodeJoinToSameRoom = 50002,
/*!
不在房间中
*/
RCRTCCodeNotInRTCRoom = 50003,
/*!
请检查是否开通音视频服务
*/
RCRTCCodeVoIPNotAvailable = 50004,
/*!
RTC token为空请查看是否还在房间内或者房间是否销毁
*/
RCRTCCodeRTCTokenIsNull = 50006,
/*!
SDK 内部状态错误
*/
RCRTCCodeIllegalState = 50007,
/*!
观众加聊天室成功,kv 回调超时(30s)
*/
RCRTCCodeChatRoomKVTimeout = 50008,
/*!
HTTP 请求超时
*/
RCRTCCodeHttpTimeoutError = 50010,
/*!
HTTP 错误(含 500404405 等错误)
*/
RCRTCCodeHttpError = 50011,
/*!
发布重复资源
*/
RCRTCCodePublishDuplicateResources = 50020,
/*!
设置本地 SDP 错误
*/
RCRTCCodeSetLocalSDPError = 50021,
/*!
设置远端 SDP 错误
*/
RCRTCCodeSetRemoteSDPError = 50022,
/*!
发布的流的个数已经到达上限
*/
RCRTCCodePublishStreamsHasReachedMaxCount = 50023,
/*!
取消发布不存在的资源
*/
RCRTCCodeUnpublishUnexistStream = 50024,
/*!
创建本地 Offer 失败
*/
RCRTCCodeCreateOfferError = 50025,
/*!
创建本地 Answer 失败
*/
RCRTCCodeCreateAnswerError = 50026,
/*!
公有云 SDK 不能访问私有云服务
*/
RCRTCCodeIncompatibleWithPrivateServer = 50027,
/*!
无法使用设置的代理服务转发资源
*/
RCRTCCodeProxyUnavailableError = 50028,
/*!
订阅不存在的音视频资源
*/
RCRTCCodeSubscribeNotExistResources = 50030,
/*!
资源重复订阅
*/
RCRTCCodeSubscribeDuplicateResources = 50031,
/*!
取消订阅不存在的音视频资源
*/
RCRTCCodeUnsubscribeNotExistResouce = 50032,
/*!
当前房间不存在这个 liveUrl
*/
RCRTCCodeLiveUrlNotInCurrentRoom = 50033,
/*!
请检查当前是否开通了语音识别服务
*/
RCRTCCodeASRNotAvailable= 50034,
/*!
请检查当前是否开启了语音识别服务
*/
RCRTCCodeASRNotStart = 50035,
/*!
RTCConnection 为空
*/
RCRTCCodeRTCConnectionIsNil = 50065,
/*!
解析 Json 串出错
*/
RCRTCCodeParseJsonDataError = 50069,
/*!
未加入主房间
*/
RCRTCCodeNotJoinedMainRoom = 50074,
/*!
操作的副房间号码和主房间号码一致错误
*/
RCRTCCodeOtherRoomIDSameWithMainRoomId = 50075,
/*!
取消的跨房间连麦请求不存在
*/
RCRTCCodeCancelInviteNotExist = 50076,
/*!
响应的跨房间连麦请求不存在
*/
RCRTCCodeRespondInviteNotExist = 50077,
/*!
发布时mediaServer返回的mcu流为空
*/
RCRTCCodeMCUListNotExist = 50079,
/*!
cdn 地址配置数量到达上限最大为5个
*/
RCRTCCodeCDNCountReachToLimit = 50080,
/*!
帧时间戳非法
*/
RCRTCCodeIllegalFrameTimestamp = 50081,
/*!
解码视频帧失败
*/
RCRTCCodeDecodeVideoFrameError = 50082,
/*!
音效文件数量已经到达最大数量
*/
RCRTCCodeEffectFileCountHasBeenReached = 50090,
/*!
处理非法的 soundId如停止播放没有播放过的音效文件 id
此音效 ID 没有预设或者播放过。
*/
RCRTCCodeHandlingIllegalEffectSoundId = 50091,
/*!
自动重连异常
*/
RCRTCCodeReconnectError = 50100,
/*!
观众加聊天室成功,pullData KV没有值
*/
RCRTCCodeChatRoomKVNotExist = 50101,
/*!
音频设备启动失败
*/
RCRTCCodeAudioDeviceStartError = 52000,
/*!
订阅流时cdn流订阅失败
*/
RCRTCCodeSubscribeCDNError = 52001,
/*!
没有集成player SDK
*/
RCRTCCodePlayerModuleNotFound = 54001,
/*!
CDN内部错误
*/
RCRTCCodeCDNInnerError = 54003,
/*!
数据连接中断 或 音视频源格式不支持
*/
RCRTCCodeCdnInfoVideoInterrupt = 54008,
/*!
订阅 CDN 流时,初始化 player 模块异常
*/
RCRTCCodePlayerInitError = 54009,
/*!
* Add from 5.1.9
* 切换角色时房间类型错误,必须为直播房间
*/
RCRTCCodeSwitchRoleRoomTypeError = 55001,
/*!
* Add from 5.1.9
* 切换的角色和当前角色相同错误
*/
RCRTCCodeSwitchRoleSameRoleError = 55002,
/*!
* Add from 5.1.17
* RTC 网络探测未开始
*/
RCRTCCodeProbeTestNotStart = 56001,
/*!
* Add from 5.1.17
* RTC 网络探测已开始
*/
RCRTCCodeProbeTestExist = 56002,
/*!
* Add from 5.1.17
* RTC 通道连接断开
*/
RCRTCCodeMediaServerIceDisConnect = 56003,
/*!
* RTC 网络探测被中断
*/
RCRTCCodeProbeTestForceStop = 56004,
/*!
加房间操作打断探测
*/
RCRTCCodeInterruptByInternal = 56005,
/*!
SEI 数据长度超出限制 4096 个字节
*/
RCRTCCodeSEILengthReachToLimit = 56006,
/*!
SEI 通道未建立,请检查是否开启 SEI,或者发布音视频
*/
RCRTCCodeSEIChannelNotExist = 56007,
/*!
SEI 发送失败
*/
RCRTCCodeSEISendUnknownError = 56008,
/*!
SEI 频率超出限制, 1秒内不超过 30 次
*/
RCRTCCodeSEISendTimePerSecondReachToLimit = 56009,
};
NS_ASSUME_NONNULL_BEGIN
@interface RCRTCCodeDefine : NSObject
+ (NSString *)codeDesc:(NSInteger)code;
@end
NS_ASSUME_NONNULL_END

View File

@@ -1,69 +0,0 @@
//
// RCRTCConfig.h
// RongRTCLib
//
// Created by RongCloud on 2020/8/12.
// Copyright © 2020 RongCloud. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "RCRTCProxy.h"
NS_ASSUME_NONNULL_BEGIN
@interface RCRTCConfig : NSObject
/*!
默认 YES断网后一直保持重连 NO如果音视频房间在超时时间超时时间管理后台可以配置默认值 60s内没有连上网络SDK 会自动退出音视频房间,这个时间是一个粗略值,不保证精确,有 5s 左右的误差
*/
@property (nonatomic, assign) BOOL isEnableAutoReconnect;
/*!
设置房间统计信息的回调间隔
单位毫秒, 默认1000ms(1s)。 注意 interval 值太小会影响 SDK 性能,如果小于 100 配置无法生效
*/
@property (nonatomic, assign) NSUInteger statusReportInterval;
/*!
默认 NO是否开启媒体流加密功能SRTP
特别注意:开启该功能会对性能和用户体验有一定影响,如果没有该需求请不要打开。
*/
@property (nonatomic, assign) BOOL enableSRTP;
/*!
默认 YES是否可以和其它后台 App 进行混音
特别注意:如果该属性设置为 NO切换到其它 App 操作麦克风或者扬声器时,会导致自己 App 麦克风采集和播放被打断。
*/
@property (nonatomic, assign) BOOL enableMixWithOthers;
/*!
默认 NO使用BaseLine进行视频编码 YES使用HighProfile进行视频编码
*/
@property (nonatomic, assign) BOOL enableHardwareEncoderHighProfile;
/*!
默认 YESDebug模式下检测IMSDK和RTCSDK版本号是否一致
*/
@property (nonatomic, assign) BOOL enableVersionMismatch;
/*!
默认 YES是否支持立体声
*/
@property (nonatomic, assign) BOOL enableStereo;
/*!
设置代理服务地址
默认: 无
*/
@property (nonatomic, strong) RCRTCProxy *proxy;
/*!
默认 YES观众是否支持 PlayAndRecord 模式,该设置只对观众身份生效
YESAudioSession Category 为 AVAudioSessionCategoryPlayAndRecord可以进行听筒/扬声器切换;
NOAudioSession Category 为 AVAudioSessionCategoryPlayback。
*/
@property (nonatomic, assign) BOOL enablePlayAndRecord;
@end
NS_ASSUME_NONNULL_END

View File

@@ -1,101 +0,0 @@
//
// RCRTCCryptoDelegate.h
// RongRTCLib
//
// Created by RongCloud on 2020/7/28.
// Copyright © 2020 RongCloud. All rights reserved.
//
NS_ASSUME_NONNULL_BEGIN
/*!
自定义加密代理
*/
@protocol RCRTCCustomizedEncryptorDelegate <NSObject>
/*!
加密回调
@param payloadData 需要加密的数据起始地址
@param payloadSize 需要加密的数据的大小
@param encryptedFrame 加密后数据起始地址
@param bytesWritten 加密后数据的大小
@param mediastreamId 当前解密的音视频流名称
@param mediatype 媒体类型0为"audio" 1为"video"
@discussion
如果使用自定义加密需要实现该方法进行加密操作。
@remarks 加解密配置
*/
- (int)EncryptPayloadData:(const uint8_t *)payloadData
payloadSize:(size_t)payloadSize
encryptedFrame:(uint8_t *)encryptedFrame
bytesWritten:(size_t *)bytesWritten
mediastreamId:(NSString *)mediastreamId
mediaType:(int)mediatype;
/*!
加密后数据大小
@param frameSize 加密前数据的大小
@param mediastreamId 当前解密的音视频流名称
@param mediatype 媒体类型0为"audio" 1为"video"
@discussion
如果使用自定义加密需要根据自己的加密算法返回加密后数据的大小SDK 会根据返回加密后数据的大小进行内存申请
@remarks 加解密配置
*/
- (size_t)GetMaxCiphertextByteSize:(size_t)frameSize mediastreamId:(NSString *)mediastreamId mediaType:(int)mediatype;
@end
/*!
自定义解密代理
*/
@protocol RCRTCCustomizedDecryptorDelegate <NSObject>
/*!
解密回调
@param encryptedFrame 需要解密的数据起始地址
@param encryptedFrameSize 需要解密的数据的大小
@param frame 解密后数据起始地址
@param bytesWritten 解密后数据的大小
@param mediastreamId 当前解密的音视频流名称
@param mediatype 媒体类型0为"audio" 1为"video"
@discussion
如果使用自定义解密需要实现该方法进行解密操作。
@remarks 加解密配置
*/
- (int)DecryptFrame:(const uint8_t *)encryptedFrame
frameSize:(size_t)encryptedFrameSize
frame:(uint8_t *)frame
bytesWritten:(size_t *)bytesWritten
mediastreamId:(NSString *)mediastreamId
mediaType:(int)mediatype;
/*!
解密后数据大小
@param frameSize 解密前数据的大小
@param mediastreamId 当前解密的音视频流名称
@param mediatype 媒体类型0为"audio" 1为"video"
@discussion
如果使用自定义解密需要根据自己的解密算法返回解密后数据的大小SDK 会根据返回解密后数据的大小进行内存申请
@remarks 加解密配置
*/
- (size_t)GetMaxPlaintextByteSize:(size_t)frameSize mediastreamId:(NSString *)mediastreamId mediaType:(int)mediatype;
@end
NS_ASSUME_NONNULL_END

View File

@@ -1,44 +0,0 @@
//
// RCRTCCustomLayout.h
// RongRTCLib
//
// Created by RongCloud on 2020/2/13.
// Copyright © 2020 RongCloud. All rights reserved.
//
#import <Foundation/Foundation.h>
@class RCRTCStream;
NS_ASSUME_NONNULL_BEGIN
@interface RCRTCCustomLayout : NSObject
/*!
要混合布局的流,必须为视频流
*/
@property (nonatomic, strong, nullable) RCRTCStream *videoStream;
/*!
混流图层坐标的 y 值
*/
@property (nonatomic, assign) NSInteger y;
/*!
混流图层坐标的 x 值
*/
@property (nonatomic, assign) NSInteger x;
/*!
视频流的宽
*/
@property (nonatomic, assign) NSInteger width;
/*!
视频流的高
*/
@property (nonatomic, assign) NSInteger height;
@end
NS_ASSUME_NONNULL_END

Some files were not shown because too many files have changed in this diff Show More