製品概要
製品の利点
応用シナリオ




sudo gem install cocoapods
pod init
platform :ios, '8.0'target 'App' do# TRTC Lite版# インストールパッケージのサイズ増加は最小限だが、Real-Time Communication(TRTC)とライブプレーヤー(TXLivePlayer)の2つの機能のみをサポートします。pod 'TXLiteAVSDK_TRTC', :podspec => 'https://liteav.sdk.qcloud.com/pod/liteavsdkspec/TXLiteAVSDK_TRTC.podspec'# Add the IM SDKpod 'TXIMSDK_Plus_iOS'# pod 'TXIMSDK_Plus_iOS_XCFramework'# pod 'TXIMSDK_Plus_Swift_iOS_XCFramework'# If you need to add the Quic plugin, please uncomment the next line.# Note: This plugin must be used with the Objective-C edition or XCFramework edition of the IM SDK, and the plugin version number must match the IM SDK version number.# pod 'TXIMSDK_Plus_QuicPlugin'end
pod install
pod update
pod setuppod repo updaterm ~/Library/Caches/CocoaPods/search_index.json
Privacy - Microphone Usage Description、そしてマイク使用目的も入力してくださいPrivacy - Camera Usage Description、そしてカメラ使用目的も入力してください。



// ChatIMコントロールパネルからアプリケーションのSDKAppIDを取得します。// V2TIMSDKListenerのイベントリスナーを追加、selfはid<V2TIMSDKListener>の実装クラス。IM SDKのイベントをリスニングする必要がない場合、このステップは無視できます。[[V2TIMManager sharedInstance] addIMSDKListener:self];// IM SDKを初期化、このインターフェースを呼び出した後、すぐにログインインターフェースを呼び出すことができます。[[V2TIMManager sharedInstance] initSDK:sdkAppID config:config];// SDK初期化後にはいくつかのイベントが発生します。例えば、接続状態、ログインチケットの有効期限切れなど。- (void)onConnecting {NSLog(@"IM SDKがTencent Cloudクラウドサーバーに接続中");}- (void)onConnectSuccess {NSLog(@"IM SDKはすでにTencent Cloudクラウドサーバーに接続しました");}// イベントリスナーを削除// selfはid<V2TIMSDKListener>の実装クラス[[V2TIMManager sharedInstance] removeIMSDKListener:self];// SDKの初期化解除[[V2TIMManager sharedInstance] unInitSDK];
// TRTC SDKのインスタンスを作成する(シングルトンパターン)self.trtcCloud = [TRTCCloud sharedInstance];// イベントリスナーを設定するself.trtcCloud.delegate = self;// SDKからの各種イベント通知(例:エラーコード、警告コード、オーディオ・ビデオの状態パラメータなど)- (void)onError:(TXLiteAVError)errCode errMsg:(nullable NSString *)errMsg extInfo:(nullable NSDictionary *)extInfo {NSLog(@"%d: %@", errCode, errMsg);}- (void)onWarning:(TXLiteAVWarning)warningCode warningMsg:(nullable NSString *)warningMsg extInfo:(nullable NSDictionary *)extInfo {NSLog(@"%d: %@", warningCode, warningMsg);}// イベントリスナーを削除self.trtcCloud.delegate = nil;// TRTC SDKインスタンスを破棄する(シングルトンパターン)[TRTCCloud destroySharedIntance];
// ログイン:userIDはカスタマイズ可能、userSigはステップ1を参照して取得します。[[V2TIMManager sharedInstance] login:userID userSig:userSig succ:^{NSLog(@"success");} fail:^(int code, NSString *desc) {// 以下のエラーコードが返された場合、UserSigの使用期限が切れている。新しく発行されたUserSigを使用して再ログインします。// 1. ERR_USER_SIG_EXPIRED(6206)// 2. ERR_SVR_ACCOUNT_USERSIG_EXPIRED(70001)// 注意:他のエラーコードの場合、IM SDKのログインが無限ループになる恐れがありますので、ログインインターフェースをここで呼び出さないでください。NSLog(@"failure, code:%d, desc:%@", code, desc);}];
// ログアウト[[V2TIMManager sharedInstance] logout:^{NSLog(@"success");} fail:^(int code, NSString *desc) {NSLog(@"failure, code:%d, desc:%@", code, desc);}];
- (void)setupTRTC {// ビデオエンコードのパラメータを設定し、リモートのユーザーが見る画面の品質を決定TRTCVideoEncParam *encParam = [[TRTCVideoEncParam alloc] init];encParam.videoResolution = TRTCVideoResolution_960_540;encParam.videoFps = 15;encParam.videoBitrate = 850;encParam.resMode = TRTCVideoResolutionModePortrait;[self.trtcCloud setVideoEncoderParam:encParam];// ローカルのカメラプレビューを開始(イン/アウトカメラを指定してビデオキャプチャーが可能)[self.trtcCloud startLocalPreview:self.isFrontCamera view:self.previewView];}
// カスタムデータの構築NSDictionary *dic = @{@"cmd": @"av_call",@"msg": @{// 通話タイプ(ビデオ通話、ボイス通話)を指定@"callType": @"videoCall",// TRTCルーム番号を指定(発信側でランダム生成)@"roomId": @"xxxRoomId",},};NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dicoptions:NSJSONWritingPrettyPrintederror:nil];if (jsonData) {NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];// 通話招待シグナルを送信[[V2TIMManager sharedInstance] invite:self.receiverId data:jsonString onlineUserOnly:false offlinePushInfo:self.offlinePushInfo timeout:self.timeout succ:^{// 通話招待シグナルの送信に成功// 発信ページをレンダリングし、呼出音を再生} fail:^(int code, NSString *desc) {// 通話招待シグナルの送信に失敗// 発信失敗、再試行可能}];}
offlinePushInfoを設定する必要があります。詳細はオフラインプッシュメッセージを参照してください。timeoutを設定することをお勧めします。単位は秒です。SDKはタイムアウトしたかを検知し、発信がタイムアウトした時の自動切断を実現します。[[V2TIMManager sharedInstance] addSignalingListener:self];#pragma mark - V2TIMSignalingListener// 着信ユーザーが発信リクエストを受信し、inviteIDはそのリクエストのためのID、inviterは発信ユーザーのIDです。- (void)onReceiveNewInvitation:(NSString *)inviteID inviter:(NSString *)inviter groupID:(NSString *)groupID inviteeList:(NSArray<NSString *> *)inviteeList data:(NSString *)data {if (data && ![data isEqualToString:@""]) {NSData *jsonData = [data dataUsingEncoding:NSUTF8StringEncoding];NSDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:jsonDataoptions:NSJSONReadingMutableContainerserror:nil];if (dictionary) {NSString *command = dictionary[@"cmd"];NSDictionary *msg = dictionary[@"msg"];if ([command isEqualToString:@"av_call"]) {NSString *callType = msg[@"callType"];NSString *roomId = msg[@"roomId"];// 発信ページをレンダリングし、呼出音を再生}}}}
if ([callType isEqualToString:@"videoCall"]) {// ビデオエンコードのパラメータを設定し、リモートのユーザーが見る画面の品質を決定TRTCVideoEncParam *encParam = [[TRTCVideoEncParam alloc] init];encParam.videoResolution = TRTCVideoResolution_960_540;encParam.videoFps = 15;encParam.videoBitrate = 850;encParam.resMode = TRTCVideoResolutionModePortrait;[self.trtcCloud setVideoEncoderParam:encParam];// ローカルのカメラプレビューを開始(イン/アウトカメラを指定してビデオキャプチャーが可能)[self.trtcCloud startLocalPreview:self.isFrontCamera view:self.previewView];}
[[V2TIMManager sharedInstance] cancel:inviteId data:data succ:^{// 呼び出しをキャンセルしました// 発信ページが破棄され、呼び出し音の再生が停止します} fail:^(int code, NSString *desc) {// 呼び出しのキャンセルに失敗しました// 提示のキャンセルに失敗しました。再試行してみてください。}];
#pragma mark - V2TIMSignalingListener- (void)onInvitationCancelled:(NSString *)inviteID inviter:(NSString *)inviter data:(NSString *)data {// 発信ページが破棄され、呼び出し音の再生が停止します}
#pragma mark - V2TIMSignalingListener- (void)onInvitationTimeout:(NSString *)inviteID inviteeList:(NSArray<NSString *> *)inviteeList {// タイムアウトの通知、ページの破棄、呼出着信音の再生停止}
[[V2TIMManager sharedInstance] accept:inviteId data:data succ:^{// 応答に成功、通話ページをレンダリング、呼出音の再生が停止します。if ([callType isEqualToString:@"videoCall"]) {// ビデオ通話を開始[self startVideoCall];} else {// ボイス通話を開始[self startAudioCall];}} fail:^(int code, NSString *desc) {// 応答に失敗、「例外が発生しました」、「再試行してください」が表示されます。}];
#pragma mark - V2TIMSignalingListener- (void)onInviteeAccepted:(NSString *)inviteID invitee:(NSString *)invitee data:(NSString *)data {if ([self.callType isEqualToString:@"videoCall"]) {// ビデオ通話を開始[self startVideoCall];} else {// ボイス通話を開始[self startAudioCall];}}
- (void)startAudioCall {TRTCParams *params = [[TRTCParams alloc] init];// TRTC認証クレデンシャル、サーバー側で生成params.sdkAppId = SDKAPPID;// TRTCアプリケーションID、コントロールパネルで取得params.userSig = USERSIG;// 文字列のルーム番号を例にparams.strRoomId = self.roomId;// ユーザー名はIMに同期することをお勧めしますparams.userId = self.userId;[self.trtcCloud startLocalAudio:TRTCAudioQualitySpeech];[self.trtcCloud enterRoom:params appScene:TRTCAppSceneAudioCall];}
TRTCAppSceneAudioCallを選択する必要があり、入室ロールTRTCRoleTypeを指定する必要がありません。startLocalAudioを開始する時、音質パラメータを設定できます。オーディオ通話モードではTRTCAudioQualitySpeechの使用をお勧めします。// 通話の状態をラベリングする@property (nonatomic, assign) BOOL isOnCalling;#pragma mark - TRTCCloudDelegate// 入室結果イベントコールバック- (void)onEnterRoom:(NSInteger)result {if (result > 0) {// 入室成功、通話中であることをラベリングするself.isOnCalling = YES;} else {// 入室失敗、通話異常を表示self.isOnCalling = NO;}}
- (void)startVideoCall {TRTCParams *params = [[TRTCParams alloc] init];// TRTC認証クレデンシャル、サーバー側で生成params.sdkAppId = SDKAPPID;// TRTCアプリケーションID、コントロールパネルで取得params.userSig = USERSIG;// 文字列のルーム番号を例にparams.strRoomId = self.roomId;// ユーザー名はIMに同期することをお勧めしますparams.userId = self.userId;[self.trtcCloud startLocalAudio:TRTCAudioQualitySpeech];[self.trtcCloud enterRoom:params appScene:TRTCAppSceneVideoCall];}
TRTCAppSceneVideoCallを選択する必要があり、入室ロールTRTCRoleTypeを指定する必要がありません。startLocalAudioを開始する時、音質パラメータを設定できます。ビデオ通話モードではTRTCAudioQualitySpeechの使用をお勧めします。startRemoteViewを呼び出してリモートビデオストリームをプルしてレンダリングし再生する必要があります。// 通話の状態をラベリングする@property (nonatomic, assign) BOOL isOnCalling;#pragma mark - TRTCCloudDelegate// 入室結果イベントコールバック- (void)onEnterRoom:(NSInteger)result {if (result > 0) {// 入室成功、通話中であることをラベリングするself.isOnCalling = YES;} else {// 入室失敗、通話異常を表示self.isOnCalling = NO;}}// リモートビデオストリームをプル- (void)onUserVideoAvailable:(NSString *)userId available:(BOOL)available {// リモートユーザーがメインビデオ画面をパブリッシュ/キャンセルif (available) {// リモートユーザーのビデオストリームを購読し、ビデオレンダリングコントロールにバインド[self.trtcCloud startRemoteView:userId streamType:TRTCVideoStreamTypeBig view:self.previewView];} else {// リモートユーザーのビデオストリームの購読を停止し、レンダリングコントロールをリリース[self.trtcCloud stopRemoteView:userId streamType:TRTCVideoStreamTypeBig];}}
NSDictionary *dic = @{@"cmd": @"av_call",@"msg": @{// 通話タイプ(ビデオ通話、ボイス通話)を指定@"callType": @"videoCall",// 拒否タイプを指定(アクティブ拒否、ビジー拒否)@"reason": @"active",},};NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dicoptions:NSJSONWritingPrettyPrintederror:nil];if (jsonData) {NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];[[V2TIMManager sharedInstance] reject:self.inviteId data:jsonString succ:^{// 拒否に成功、発信ページが破棄され、着信音の再生をが停止します。} fail:^(int code, NSString *desc) {// 拒否に失敗、「例外が発生しました」、「再試行してください」が表示されます。}];}
#pragma mark - V2TIMSignalingListener- (void)onInviteeRejected:(NSString *)inviteID invitee:(NSString *)invitee data:(NSString *)data {if (data && ![data isEqualToString:@""]) {NSData *jsonData = [data dataUsingEncoding:NSUTF8StringEncoding];NSDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:jsonDataoptions:NSJSONReadingMutableContainerserror:nil];if (dictionary) {NSString *command = dictionary[@"cmd"];NSDictionary *msg = dictionary[@"msg"];if ([command isEqualToString:@"av_call"]) {NSString *reason = msg[@"reason"];if ([reason isEqualToString:@"active"]) {// 相手が拒否したと表示} else if ([reason isEqualToString:@"busy"]) {// 相手がビジー状態であると表示}// 発信ページが破棄され、呼び出し音の再生が停止します}}}}
- (void)onReceiveNewInvitation:(NSString *)inviteID inviter:(NSString *)inviter groupID:(NSString *)groupID inviteeList:(NSArray<NSString *> *)inviteeList data:(NSString *)data {if (data && ![data isEqualToString:@""]) {NSData *jsonData = [data dataUsingEncoding:NSUTF8StringEncoding];NSDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:jsonDataoptions:NSJSONReadingMutableContainerserror:nil];if (dictionary) {NSString *command = dictionary[@"cmd"];NSDictionary *msg = dictionary[@"msg"];if ([command isEqualToString:@"av_call"] && self.isOnCalling) {NSDictionary *dic = @{@"cmd": @"av_call",@"msg": @{// 通話タイプ(ビデオ通話、ボイス通話)を指定@"callType": @"videoCall",// 拒否タイプを指定(アクティブ拒否、ビジー拒否)@"reason": @"busy",},};NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dicoptions:NSJSONWritingPrettyPrintederror:nil];if (jsonData) {NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];// ローカル通話中、ビジー拒否シグナルを送信[[V2TIMManager sharedInstance] reject:inviteID data:jsonString succ:^{// ビジー拒否に成功} fail:^(int code, NSString *desc) {// ビジー拒否に失敗}];}}}}}
- (void)hangup {[self.trtcCloud stopLocalAudio];[self.trtcCloud stopLocalPreview];[self.trtcCloud exitRoom];}#pragma mark - TRTCCloudDelegate- (void)onExitRoom:(NSInteger)reason {// 部屋から正常に退出し、通話を切断しましたself.isOnCalling = NO;}
#pragma mark - TRTCCloudDelegate- (void)onRemoteUserLeaveRoom:(NSString *)userId reason:(NSInteger)reason {[self hangup];}- (void)onExitRoom:(NSInteger)reason {// 部屋から正常に退出し、通話を切断しましたself.isOnCalling = NO;}
// マイクをオンにする[self.trtcCloud muteLocalAudio:NO];// マイクをオフにする[self.trtcCloud muteLocalAudio:YES];
// スピーカーをオンにする[self.trtcCloud muteAllRemoteAudio:NO];// スピーカーをオフにする[self.trtcCloud muteAllRemoteAudio:YES];
// カメラを開き、イン・アウトカメラとレンダリングコントロールを指定[self.trtcCloud startLocalPreview:self.isFrontCamera view:self.previewView];// カメラをオフにする[self.trtcCloud stopLocalPreview];
// スピーカーに切り替える[[self.trtcCloud getDeviceManager] setAudioRoute:TXAudioRouteEarpiece];// ハンズフリーに切り替える[[self.trtcCloud getDeviceManager] setAudioRoute:TXAudioRouteSpeakerphone];
// 現在がインカメラかどうかを判断BOOL isFrontCamera = [[self.trtcCloud getDeviceManager] isFrontCamera];// 前後カメラの切り替え、true: :インカメラに切り替える、; false: :アウトカメラに切り替える[[self.trtcCloud getDeviceManager] switchCamera:!isFrontCamera];
#pragma mark - TRTCCloudDelegate- (void)onNetworkQuality:(TRTCQualityInfo *)localQuality remoteQuality:(NSArray<TRTCQualityInfo *> *)remoteQuality {if (remoteQuality.count > 0) {switch(remoteQuality[0].quality) {case TRTCQuality_Excellent:NSLog(@"相手のネットワーク状態がとてもいい");break;case TRTCQuality_Good:NSLog(@"相手のネットワーク状態が比較的良い");break;case TRTCQuality_Poor:NSLog(@"相手のネットワーク状態が普通");break;case TRTCQuality_Bad:NSLog(@"相手のネットワーク状態が不安定");break;case TRTCQuality_Vbad:NSLog(@"相手のネットワーク状態がかなり悪い");break;case TRTCQuality_Down:NSLog(@"相手のネットワーク状態が極めて悪い");break;default:NSLog(@"未定義");break;}}}
localQualityはローカルユーザーのネットワーク品質評価結果で、そのuserIdフィールドは空です。remoteQualityはリモートユーザーのネットワーク品質評価結果を表し、その結果はリモートとローカルの両方の影響を受けます。// 通話開始時間@property (nonatomic, assign) NSTimeInterval callStartTime;// 通話終了時間@property (nonatomic, assign) NSTimeInterval callFinishTime;// 通話の持続時間(秒)@property (nonatomic, assign) NSInteger callDuration;// リモートユーザー入室コールバック- (void)onRemoteUserEnterRoom:(NSString *)userId {self.callStartTime = [[NSDate date] timeIntervalSince1970];}// ローカルユーザー退室コールバック- (void)onExitRoom:(NSInteger)reason {self.callFinishTime = [[NSDate date] timeIntervalSince1970];self.callDuration = (NSInteger)(self.callFinishTime - self.callStartTime);}
NSString *beautyConfigPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];beautyConfigPath = [beautyConfigPath stringByAppendingPathComponent:@"beauty_config.json"];NSFileManager *localFileManager=[[NSFileManager alloc] init];BOOL isDir = YES;NSDictionary * beautyConfigJson = @{};if ([localFileManager fileExistsAtPath:beautyConfigPath isDirectory:&isDir] && !isDir) {NSString *beautyConfigJsonStr = [NSString stringWithContentsOfFile:beautyConfigPath encoding:NSUTF8StringEncoding error:nil];NSError *jsonError;NSData *objectData = [beautyConfigJsonStr dataUsingEncoding:NSUTF8StringEncoding];beautyConfigJson = [NSJSONSerialization JSONObjectWithData:objectDataoptions:NSJSONReadingMutableContainerserror:&jsonError];}NSDictionary *assetsDict = @{@"core_name":@"LightCore.bundle",@"root_path":[[NSBundle mainBundle] bundlePath],@"tnn_"@"beauty_config":beautyConfigJson};// SDKの初期化:widthとheightはそれぞれtextureの幅と高さself.xMagicKit = [[XMagic alloc] initWithRenderSize:CGSizeMake(width,height) assetsDict:assetsDict];
// TRTC SDKサードパーティー顔加工のビデオデータコールバックを設定[self.trtcCloud setLocalVideoProcessDelegete:self pixelFormat:TRTCVideoPixelFormat_Texture_2D bufferType:TRTCVideoBufferType_Texture];#pragma mark - TRTCVideoFrameDelegate// YTProcessInputを作成しSDKに渡してレンダリング処理を実行- (uint32_t)onProcessVideoFrame:(TRTCVideoFrame *_Nonnull)srcFrame dstFrame:(TRTCVideoFrame *_Nonnull)dstFrame {if (!self.xMagicKit) {[self buildBeautySDK:srcFrame.width and:srcFrame.height texture:srcFrame.textureId];// XMagic SDKを初期化self.heightF = srcFrame.height;self.widthF = srcFrame.width;}if(self.xMagicKit!=nil && (self.heightF!=srcFrame.height || self.widthF!=srcFrame.width)){self.heightF = srcFrame.height;self.widthF = srcFrame.width;[self.xMagicKit setRenderSize:CGSizeMake(srcFrame.width, srcFrame.height)];}YTProcessInput *input = [[YTProcessInput alloc] init];input.textureData = [[YTTextureData alloc] init];input.textureData.texture = srcFrame.textureId;input.textureData.textureWidth = srcFrame.width;input.textureData.textureHeight = srcFrame.height;input.dataType = kYTTextureData;YTProcessOutput *output = [self.xMagicKit process:input withOrigin:YtLightImageOriginTopLeft withOrientation:YtLightCameraRotation0];dstFrame.textureId = output.textureData.texture;return 0;}
// ローカルプレビュー画面のレンダリングコントロールを更新[self.trtcCloud updateLocalView:self.previewView];// リモートユーザーのビデオレンダリングコントロールを更新[self.trtcCloud updateRemoteView:self.previewView streamType:TRTCVideoStreamTypeBig forUser:self.userId];
streamTypeはTRTCVideoStreamTypeBigとTRTCVideoStreamTypeSubのみをサポートしています。NSDictionary *dic = @{@"cmd": @"av_call",@"msg": @{// 通話タイプ(ビデオ通話、ボイス通話)を指定@"callType": @"videoCall",// TRTCルーム番号を指定(発信側でランダム生成)@"roomId": @"xxxRoomId",},};NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dic options:NSJSONWritingPrettyPrinted error:nil];NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];V2TIMOfflinePushInfo *pushInfo = [[V2TIMOfflinePushInfo alloc] init];pushInfo.title = self.nickName;pushInfo.desc = @"You have a new call invitation";NSDictionary *ext = @{@"entity" : @{@"action" : @1,@"content" : jsonString,@"sender" : self.senderId,@"nickname" : self.nickName,@"faceUrl" : faceUrl,}};NSData *data = [NSJSONSerialization dataWithJSONObject:ext options:NSJSONWritingPrettyPrinted error:nil];pushInfo.ext = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];pushInfo.iOSSound = @"phone_ringing.mp3";// 以下はAndroid互換のフィールド、記入が必要pushInfo.AndroidOPPOChannelID = @"tuikit";pushInfo.AndroidSound = @"phone_ringing";pushInfo.AndroidHuaWeiCategory = @"IM";pushInfo.AndroidVIVOCategory = @"IM";[[V2TIMManager sharedInstance] invite:@"receiverId" data:jsonString onlineUserOnly:false offlinePushInfo:pushInfo timeout:self.timeout succ:^{// 通話招待シグナルの送信に成功} fail:^(int code, NSString *desc) {// 通話招待シグナルの送信に失敗}];
AppDelegate -> didReceiveRemoteNotificationシステムコールバックでextフィールドを取得できます。そして、extフィールドの内容に基づいて指定されたUIページにジャンプします。// アプリ起動後、以下のコールバックを受け取る- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfofetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler {// プッシュ拡張フィールドを解析if ([userInfo[@"ext"]) {// 指定されたUIページにジャンプ}}
列挙値 | 取得値 | 説明 |
ERR_TRTC_INVALID_USER_SIG | -3320 | 入室パラメータuserSigが正しくありません。 TRTCParams.userSigが空であるかどうかを確認してください。 |
ERR_TRTC_USER_SIG_CHECK_FAILED | -100018 | UserSig検証失敗、パラメータ TRTCParams.userSigが正しく入力されているか、または期限切れでないかを確認してください。 |
列挙値 | 取得値 | 説明 |
ERR_TRTC_CONNECT_SERVER_TIMEOUT | -3308 | 入室リクエストがタイムアウトしました。ネットワークが切断されているか、VPNが使用されているかを確認してください。また、4Gに切り替えてテストすることもできます。 |
ERR_TRTC_INVALID_SDK_APPID | -3317 | 入室パラメータsdkAppIdエラー。 TRTCParams.sdkAppIdが空であるかどうか確認してください。 |
ERR_TRTC_INVALID_ROOM_ID | -3318 | 入室パラメータroomIdエラー。 TRTCParams.roomIdまたはTRTCParams.strRoomIdが空であるかどうか確認してください。roomIdとstrRoomIdは混在できません。 |
ERR_TRTC_INVALID_USER_ID | -3319 | 入室パラメータuserIdが正しくありません。 TRTCParams.userIdが空であるかどうかを確認してください。 |
ERR_TRTC_ENTER_ROOM_REFUSED | -3340 | 入室リクエストが拒否されました。 enterRoomで同じIdのルームに連続して入室しようとしていないか確認してください。 |
列挙値 | 取得値 | 説明 |
ERR_CAMERA_START_FAIL | -1301 | カメラの起動に失敗しました。例えば、WindowsまたはMacデバイスで、カメラの設定プログラム(ドライバー)に異常があります。デバイスを無効にしてから再度有効にするか、マシンを再起動するか、または設定プログラムを更新してください。 |
ERR_MIC_START_FAIL | -1302 | マイクの起動に失敗しました。例えば、WindowsまたはMacデバイスで、マイクの設定プログラム(ドライバー)に異常があります。デバイスを無効にしてから再度有効にするか、マシンを再起動するか、設定プログラムを更新してください。 |
ERR_CAMERA_NOT_AUTHORIZED | -1314 | カメラが許可されていません。これは通常、モバイルデバイスで発生し、ユーザーによって権限が拒否された可能性があります。 |
ERR_MIC_NOT_AUTHORIZED | -1317 | マイクが許可されていません。これは通常、モバイルデバイスで発生し、ユーザーによって権限が拒否された可能性があります。 |
ERR_CAMERA_OCCUPY | -1316 | カメラが使用中です。他のカメラを試してみてください。 |
ERR_MIC_OCCUPY | -1319 | マイクが使用中です。たとえば、モバイルデバイスが通話中の場合、マイクを開くと失敗します。 |
deviceTokenの申請を行うと失敗する可能性がありますが、本番環境ではこの問題は発生していません。本番環境に切り替えてテストしてください。- application:didRegisterForRemoteNotificationsWithDeviceToken:コールバックが返すのは本番環境のtokenで、この時businessIDは本番環境の証明書IDを設定する必要があります。- application:didRegisterForRemoteNotificationsWithDeviceToken:コールバックが返すのは開発環境のtokenで、この時businessIDは開発環境の証明書IDを設定する必要があります。V2TIMAPNSConfig *confg = [[V2TIMAPNSConfig alloc] init];/* ユーザー自身でAppleに開発者証明書を登録し、開発者アカウントから証明書(p12ファイル)をダウンロードして生成し、生成されたp12ファイルをTencentの証明書管理コントロールパネルにアップロードすると、コントロールパネルは自動的に証明書IDを生成し、その証明書IDを以下のbusiIdパラメータに入力します。*///証明書IDをプッシュconfg.businessID = sdkBusiId;confg.token = self.deviceToken;[[V2TIMManager sharedInstance] setAPNS:confg succ:^{NSLog(@"%s, succ, %@", __func__, supportTPNS ? @"TPNS": @"APNS");} fail:^(int code, NSString *msg) {NSLog(@"%s, fail, %d, %@", __func__, code, msg);}];
Was this page helpful?
You can also Contact sales or Submit a Ticket for help.
Help us improve! Rate your documentation experience in 5 mins.
Feedback