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







sudo gem install cocoapods
pod init
platform :ios, '8.0'target 'App' do# RTC Engine 軽量版# インストールパッケージのサイズ増加が最小限ですが、RTC Engineとライブプレーヤー(TXLivePlayer)の2つの機能のみをサポートしています。pod 'TXLiteAVSDK_TRTC', :podspec => 'https://liteav.sdk.qcloud.com/pod/liteavsdkspec/TXLiteAVSDK_TRTC.podspec'# Professional版# RTC Engine、ライブプレーヤー(TXLivePlayer)、RTMPプッシュ(TXLivePusher)、オンデマンドプレーヤー(TXVodPlayer)、ショートビデオ録画・編集(UGSV)など、多数の機能を含みます。# pod 'TXLiteAVSDK_Professional', :podspec => 'https://liteav.sdk.qcloud.com/pod/liteavsdkspec/TXLiteAVSDK_Professional.podspec'# 美顔AR SDK 例:S1-07プランは以下の通りpod 'TencentEffect_S1-07'end
pod install
pod update
pod setuppod repo updaterm ~/Library/Caches/CocoaPods/search_index.json
-ObjCを追加します。


[TELicenseCheck setTELicense:LicenseURL key:LicenseKey completion:^(NSInteger authresult, NSString * _Nonnull errorMsg) {if (authresult == TELicenseCheckOk) {NSLog(@"認証成功");} else {NSLog(@"認証失敗");}}];
// RTC Engine 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;// RTC Engine SDK インスタンスの破棄(シングルトンパターン)[TRTCCloud destroySharedIntance];
// 美顔関連リソースを読み込むNSDictionary *assetsDict = @{@"core_name":@"LightCore.bundle",@"root_path":[[NSBundle mainBundle] bundlePath]};// Tencent Effect SDKの初期化self.beautyKit = [[XMagic alloc] initWithRenderSize:previewSize assetsDict:assetsDict];// Tencent Effect SDKをリリース[self.beautyKit deinit]
// アンカーのローカル画面のプレビューを表示するためのビデオレンダリングコントロールを取得@property (nonatomic, strong) UIView *anchorPreviewView;@property (nonatomic, strong) TRTCCloud *trtcCloud;- (void)setupTRTC {self.trtcCloud = [TRTCCloud sharedInstance];self.trtcCloud.delegate = self;// ビデオエンコードのパラメータを設定し、リモートのユーザーが見る画面の品質を決定TRTCVideoEncParam *encParam = [[TRTCVideoEncParam alloc] init];encParam.videoResolution = TRTCVideoResolution_960_540;encParam.videoFps = 15;encParam.videoBitrate = 1300;encParam.resMode = TRTCVideoResolutionModePortrait;[self.trtcCloud setVideoEncoderParam:encParam];// ビデオキャプチャーには、isFrontCameraでフロント/アウトカメラを指定できます。[self.trtcCloud startLocalPreview:self.isFrontCamera view:self.anchorPreviewView];// ここでは音声品質を指定。低いから高い順:SPEECH/DEFAULT/MUSIC[self.trtcCloud startLocalAudio:TRTCAudioQualityDefault];}
enterRoomの前に、上記のインターフェースを呼び出すと、SDKはカメラのプレビューとオーディオのキャプチャーのみを開始し、enterRoomを呼び出した後にのみプッシュを開始します。enterRoomの後に、上記のインターフェースを呼び出すと、SDKはカメラのプレビューとオーディオのキャプチャーを開始し、自動的にプッシュを開始します。- (void)setupRenderParams {TRTCRenderParams *params = [[TRTCRenderParams alloc] init];// イメージモードparams.mirrorType = TRTCVideoMirrorTypeAuto;// フィルモードparams.fillMode = TRTCVideoFillMode_Fill;// 回転角度params.rotation = TRTCVideoRotation_0;// ローカル画面のレンダリングパラメータを設定[self.trtcCloud setLocalRenderParams:params];// エンコーダー出力のイメージモードを設定[self.trtcCloud setVideoEncoderMirror:YES];// ビデオエンコーダーの出力する画像の向きを設定[self.trtcCloud setVideoEncoderRotation:TRTCVideoRotation_0];}
- (void)enterRoomByAnchorWithUserId:(NSString *)userId roomId:(NSString *)roomId {TRTCParams *params = [[TRTCParams alloc] init];// 文字列のルーム番号を例にparams.strRoomId = roomId;params.userId = userId;// 業務バックエンドから取得したUserSigparams.userSig = @"userSig";// 自分のSDKAppIDに置き換えるparams.sdkAppId = 0;// アンカーロール指定params.role = TRTCRoleAnchor;// インタラクティブライブシナリオで入室[self.trtcCloud enterRoom:params appScene:TRTCAppSceneLIVE];}// 入室結果イベントコールバック- (void)onEnterRoom:(NSInteger)result {if (result > 0) {// resultは入室にかかった時間(ミリ秒)NSLog(@"Enter room succeed!");} else {// result入室失敗のエラーコードNSLog(@"Enter room failed!");}}
roomIdと文字列型のstrRoomIdに分かれており、2種類のルームは相互接続されません。ルーム番号のタイプを統一することをお勧めします。TRTCAppSceneLIVEを選択することをお勧めします。- (void)enterRoomByAudienceWithUserId:(NSString *)userId roomId:(NSString *)roomId {TRTCParams *params = [[TRTCParams alloc] init];// 文字列のルーム番号を例にparams.strRoomId = roomId;params.userId = userId;// 業務バックエンドから取得したUserSigparams.userSig = @"userSig";// 自分のSDKAppIDに置き換えるparams.sdkAppId = 0;// 指定視聴者ロールparams.role = TRTCRoleAudience;// インタラクティブライブシナリオで入室[self.trtcCloud enterRoom:params appScene:TRTCAppSceneLIVE];}// 入室結果イベントコールバック- (void)onEnterRoom:(NSInteger)result {if (result > 0) {// resultは入室にかかった時間(ミリ秒)NSLog(@"Enter room succeed!");} else {// result入室失敗のエラーコードNSLog(@"Enter room failed!");}}
- (void)onUserAudioAvailable:(NSString *)userId available:(BOOL)available {// リモートユーザーが自分のオーディオをパブリッシュ/キャンセル// 自動購読モードでは、何も操作する必要はありません。SDKはリモートユーザーのオーディオを自動的に再生します。}- (void)onUserVideoAvailable:(NSString *)userId available:(BOOL)available {// リモートユーザーがメインビデオ画面をパブリッシュ/キャンセルif (available) {// リモートユーザーのビデオストリームを購読し、ビデオレンダリングコントロールにバインド[self.trtcCloud startRemoteView:userId streamType:TRTCVideoStreamTypeBig view:self.remoteView];} else {// リモートユーザーのビデオストリームの購読を停止し、レンダリングコントロールをリリース[self.trtcCloud stopRemoteView:userId streamType:TRTCVideoStreamTypeBig];}}
- (void)setupRemoteRenderParams {TRTCRenderParams *params = [[TRTCRenderParams alloc] init];// イメージモードparams.mirrorType = TRTCVideoMirrorTypeAuto;// フィルモードparams.fillMode = TRTCVideoFillMode_Fill;// 回転角度params.rotation = TRTCVideoRotation_0;// リモート画面のレンダリングモードを設定[self.trtcCloud setRemoteRenderParams:@"userId" streamType:TRTCVideoStreamTypeBig params:params];}
- (void)switchToAnchor {// アンカーロールに切り替え[self.trtcCloud switchRole:TRTCRoleAnchor];}// ロール切り替えイベントコールバック- (void)onSwitchRole:(TXLiteAVError)errCode errMsg:(NSString *)errMsg {if (errCode == ERR_NULL) {// ロールの切り替えに成功}}
- (void)setupTRTC {// ビデオエンコードのパラメータを設定し、リモートのユーザーが見る画面の品質を決定TRTCVideoEncParam *encParam = [[TRTCVideoEncParam alloc] init];encParam.videoResolution = TRTCVideoResolution_480_270;encParam.videoFps = 15;encParam.videoBitrate = 550;encParam.resMode = TRTCVideoResolutionModePortrait;[self.trtcCloud setVideoEncoderParam:encParam];// ビデオキャプチャーには、isFrontCameraでフロント/アウトカメラを指定できます。[self.trtcCloud startLocalPreview:self.isFrontCamera view:self.audiencePreviewView];// ここでは音声品質を指定。低いから高い順:SPEECH/DEFAULT/MUSIC[self.trtcCloud startLocalAudio:TRTCAudioQualityDefault];}
- (void)switchToAudience {// 視聴者ロールに切り替える[self.trtcCloud switchRole:TRTCRoleAudience];}// ロール切り替えイベントコールバック- (void)onSwitchRole:(TXLiteAVError)errCode errMsg:(NSString *)errMsg {if (errCode == ERR_NULL) {// カメラのキャプチャーのパブリッシュを停止[self.trtcCloud stopLocalPreview];// マイクのキャプチャー及びパブリッシュを停止[self.trtcCloud stopLocalAudio];}}
- (void)exitRoom {[self.trtcCloud stopLocalAudio];[self.trtcCloud stopLocalPreview];[self.trtcCloud exitRoom];}// 退室イベントコールバック- (void)onExitRoom:(NSInteger)reason {if (reason == 0) {NSLog(@"exitRoomアクティブコールでルーム退出します");} else if (reason == 1) {NSLog(@"現在のルームからサーバーによってキックされました");} else if (reason == 2) {NSLog(@"現在のルームは解散されました");}}
onExitRoomコールバック通知をスローして知らせます。enterRoomを呼び出す場合や他のオーディオ・ビデオSDKに切り替える場合は、onExitRoomのコールバックが返ってくるまで関連操作を行わないでください。そうしないと、カメラやマイクが強制的に使用されるなど、さまざまな異常が発生する可能性があります。DismissRoom(数字ルームIDと文字列ルームIDを区別)を提供しています。このインターフェースを呼び出すことで、ルーム内の全ユーザーを退室させ、ルームを解散することができます。exitRoom インターフェースを通じて、ルーム内の全ての配信者と視聴者の退室を完了させます。RTC Engineのルームライフサイクルルールに従い、ルームは自動的に解散されます。詳細はルーム退室をご参照ください。- (void)connectOtherRoom:(NSString *)roomId {NSMutableDictionary *jsonDict = [[NSMutableDictionary alloc] init];// 数字のルーム番号はroomIdです。[jsonDict setObject:roomId forKey:@"strRoomId"];[jsonDict setObject:self.userId forKey:@"userId"];NSData *jsonData = [NSJSONSerialization dataWithJSONObject:jsonDict options:NSJSONWritingPrettyPrinted error:nil];NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];[self.trtcCloud connectOtherRoom:jsonString];}// クロスルームPKのレスポンスコールバック- (void)onConnectOtherRoom:(NSString *)userId errCode:(TXLiteAVError)errCode errMsg:(NSString *)errMsg {// クロスルームアンカーと交流したいユーザーID// エラーコード、ERR_NULLはリクエスト成功// エラーメッセージ}
- (void)onUserAudioAvailable:(NSString *)userId available:(BOOL)available {// リモートユーザーが自分のオーディオをパブリッシュ/キャンセル// 自動購読モードでは、何も操作する必要はありません。SDKはリモートユーザーのオーディオを自動的に再生します。}- (void)onUserVideoAvailable:(NSString *)userId available:(BOOL)available {// リモートユーザーがメインビデオ画面をパブリッシュ/キャンセルif (available) {// リモートユーザーのビデオストリームを購読し、ビデオレンダリングコントロールにバインド[self.trtcCloud startRemoteView:userId streamType:TRTCVideoStreamTypeBig view:self.remoteView];} else {// リモートユーザーのビデオストリームの購読を停止し、レンダリングコントロールをリリース[self.trtcCloud stopRemoteView:userId streamType:TRTCVideoStreamTypeBig];}}
// クロスルームPKからの退出[self.trtcCloud disconnectOtherRoom];// クロスルームPKの退出結果コールバック- (void)onDisconnectOtherRoom:(TXLiteAVError)errCode errMsg:(NSString *)errMsg {}
DisconnectOtherRoom()を呼び出した後、他のすべてのルームのアンカーとのクロスルームPKを退出します。DisconnectOtherRoom()でクロスルームPKを退出することができます。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];
// RTC Engine 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;}
- (void)enableDualStreamMode:(BOOL)enable {// 小画面のビデオエンコードパラメータ(カスタマイズ可能)TRTCVideoEncParam *smallVideoEncParam = [[TRTCVideoEncParam alloc] init];smallVideoEncParam.videoResolution = TRTCVideoResolution_480_270;smallVideoEncParam.videoFps = 15;smallVideoEncParam.videoBitrate = 550;smallVideoEncParam.resMode = TRTCVideoResolutionModePortrait;[self.trtcCloud enableEncSmallVideoStream:enable withQuality:smallVideoEncParam];}
// リモートユーザーのビデオストリームを購読する際にストリームタイプが選択可能[self.trtcCloud startRemoteView:userId streamType:TRTCVideoStreamTypeBig view:view];// 指定されたリモートユーザーの大画面と小画面をいつでも切り替え可能[self.trtcCloud setRemoteVideoStreamType:userId type:TRTCVideoStreamTypeSmall];
streamTypeをTRTCVideoStreamTypeSmallに設定することで、低解像度の小画面で視聴することができます。// ローカルプレビュー画面のレンダリングコントロールを更新[self.trtcCloud updateLocalView:view];// リモートユーザーのビデオレンダリングコントロールを更新[self.trtcCloud updateRemoteView:view streamType:TRTCVideoStreamTypeBig forUser:userId];
viewにターゲットビデオレンダリングコントロールを渡します。streamTypeはTRTCVideoStreamTypeBigとTRTCVideoStreamTypeSubのみに対応します。// いいねメッセージのボディーNSDictionary *msgDict = @{@"type": @1, // いいねの種類@"likeCount": @10 // いいねの数};NSDictionary *dataDict = @{@"cmd": @"like_msg",@"msg": msgDict};NSError *error;NSData *data = [NSJSONSerialization dataWithJSONObject:dataDict options:0 error:&error];// グループカスタムメッセージを送信(「いいね」メッセージは低優先度に設定することをお勧めします)[[V2TIMManager sharedInstance] sendGroupCustomMessage:data to:groupID priority:V2TIM_PRIORITY_LOW succ:^{// いいねメッセージの送信に成功// ローカルでの「いいね」エフェクトのレンダリング} fail:^(int code, NSString *desc) {// いいねメッセージの送信に失敗}];
// グループカスタムメッセージを受信[[V2TIMManager sharedInstance] addSimpleMsgListener:self];- (void)onRecvGroupCustomMessage:(NSString *)msgID groupID:(NSString *)groupID sender:(V2TIMGroupMemberInfo *)info customData:(NSData *)data {if (data.length > 0) {NSError *error;NSDictionary *dataDict = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error];if (!error) {NSString *command = dataDict[@"cmd"];NSDictionary *msgDict = dataDict[@"msg"];if ([command isEqualToString:@"like_msg"]) {NSNumber *type = msgDict[@"type"]; // いいねの種類NSNumber *likeCount = msgDict[@"likeCount"]; // いいねの数// いいねの種類と数に応じていいねの効果をレンダリング}} else {NSLog(@"解析エラー: %@", error.localizedDescription);}}}
https://xxxxxx/v4/group_open_http_svc/send_group_msg?sdkappid=88888888&identifier=admin&usersig=xxx&random=99999999&contenttype=json
{"GroupId": "@TGS#12DEVUDHQ","Random": 2784275388,"MsgPriority": "High", // メッセージの優先度、ギフトメッセージは高優先度に設定するべきです"MsgBody": [{"MsgType": "TIMCustomElem","MsgContent": {// type: ギフトタイプ; giftUrl: ギフトリソースアドレス; giftName: ギフト名称; giftCount: ギフト数"Data": "{\\"cmd\\": \\"gift_msg\\", \\"msg\\": {\\"type\\": 1, \\"giftUrl\\": \\"xxx\\", \\"giftName\\": \\"xxx\\", \\"giftCount\\": 1}}"}}]}
// グループカスタムメッセージを受信[[V2TIMManager sharedInstance] addSimpleMsgListener:self];- (void)onRecvGroupCustomMessage:(NSString *)msgID groupID:(NSString *)groupID sender:(V2TIMGroupMemberInfo *)info customData:(NSData *)data {if (data.length > 0) {NSError *error;NSDictionary *dataDict = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error];if (!error) {NSString *command = dataDict[@"cmd"];NSDictionary *msgDict = dataDict[@"msg"];if ([command isEqualToString:@"gift_msg"]) {NSNumber *type = msgDict[@"type"]; // ギフトタイプNSNumber *giftCount = msgDict[@"giftCount"]; // ギフトの数NSString *giftUrl = msgDict[@"giftUrl"]; // ギフトリソースアドレスNSString *giftName = msgDict[@"giftName"]; // ギフト名称// ギフトタイプ、ギフト数、ギフトリソースアドレス、ギフト名称に基づいてギフトのエフェクトをレンダリングします。}} else {NSLog(@"解析エラー: %@", error.localizedDescription);}}}
// パブリックチャットに弾幕メッセージを送信[[V2TIMManager sharedInstance] sendGroupTextMessage:text to:groupID priority:V2TIM_PRIORITY_NORMAL succ:^{// 弾幕メッセージの送信に成功// ローカルにメッセージテキストを表示} fail:^(int code, NSString *desc) {// 弾幕メッセージの送信に失敗}];// パブリックチャットの弾幕メッセージを受信[[V2TIMManager sharedInstance] addSimpleMsgListener:self];- (void)onRecvGroupTextMessage:(NSString *)msgID groupID:(NSString *)groupID sender:(V2TIMGroupMemberInfo *)info text:(NSString *)text {// 送信者情報infoとメッセージテキストtextに基づいて弾幕メッセージをレンダリング}
列挙値 | 取得値 | 説明 |
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 | マイクが使用中です。たとえば、モバイルデバイスが通話中の場合、マイクを開くと失敗します。 |
setLocalRenderParams とビデオエンコーダーミラーリングsetVideoEncoderMirrorに分かれており、それぞれローカルプレビュー画面のミラーリング効果と、ビデオエンコード出力画面のミラーリング効果(リモート視聴者およびクラウド録画のミラーリングモード)に影響します。ローカルプレビューのイメージエフェクトをリモートの視聴者側で同時に有効にしたい場合は、以下の方法でエンコードしてください。// ローカル画面のレンダリングパラメータを設定TRTCRenderParams *params = [[TRTCRenderParams alloc] init];params.mirrorType = TRTCVideoMirrorTypeEnable; // イメージモードparams.fillMode = TRTCVideoFillMode_Fill; // フィルモードparams.rotation = TRTCVideoRotation_0; // 回転角度[self.trtcCloud setLocalRenderParams:params];// エンコーダー出力のイメージモードを設定[self.trtcCloud setVideoEncoderMirror:YES];
// カメラの最大ズーム倍率を取得する(モバイル端末のみ適用)CGFloat zoomRatio = [[self.trtcCloud getDeviceManager] getCameraZoomMaxRatio];// カメラのズーム倍率を設定する(モバイル端末のみ適用)// 値の範囲1-5、1が最も遠い(通常のカメラ)、5が最も近い(拡大鏡)。推奨最大値は5、5を超えるとビデオデータがぼやけてしまう[[self.trtcCloud getDeviceManager] setCameraZoomRatio:zoomRatio];
// カメラのオートフォーカス機能をオンまたはオフ(モバイル端末のみ適用)[[self.trtcCloud getDeviceManager] enableCameraAutoFocus:NO];// カメラのフォーカス位置を設定(モバイル端末のみ適用)// このインターフェースを使用する前提条件は、まずenableCameraAutoFocusでオートフォーカス機能をオフにすることです。[[self.trtcCloud getDeviceManager] setCameraFocusPosition:CGPointMake(x, y)];
// 現在がインカメラかどうかを判断(モバイル端末のみ適用)BOOL isFrontCamera = [[self.trtcCloud getDeviceManager] isFrontCamera];// インカメラとアウトカメラを切り替え(モバイル端末のみ適用)// trueに渡す: インカメラに。falseに渡す: アウトカメラに[[self.trtcCloud getDeviceManager] switchCamera:!isFrontCamera];
フィードバック