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







dependencies {// RTC Engine 軽量版 SDK、RTC Engineとライブストリーミング再生の2つの機能を含み、コンパクトなサイズですimplementation 'com.tencent.liteav:LiteAVSDK_TRTC:latest.release'// RTC Engine フル機能版 SDK、ライブ配信、ショートビデオ、オンデマンドなどの複数の機能を含み、サイズがやや大きいです// implementation 'com.tencent.liteav:LiteAVSDK_Professional:latest.release'// 美顔AR SDK 例:S1-07プランは以下の通りimplementation 'com.tencent.mediacloud:TencentEffect_S1-07:latest.release'}
defaultConfig {ndk {abiFilters "armeabi-v7a", "arm64-v8a"}}
../assets/MotionRes../assets/lut<uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /><uses-permission android:name="android.permission.RECORD_AUDIO" /><uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /><uses-permission android:name="android.permission.BLUETOOTH" /><uses-permission android:name="android.permission.CAMERA" /><uses-feature android:name="android.hardware.camera.autofocus" />
android:hardwareAccelerated="false"を設定しないでください。ハードウェアアクセラレーションをオフにすると、相手のビデオストリームがレンダリングできなくなります。targetSdkVersionが31または対象デバイスがAndroid 12以上のシステムバージョンに関連している場合、Bluetooth機能を正常に使用するため、公式にはコード内でandroid.permission.BLUETOOTH_CONNECT権限を動的な申請する必要があります。詳細はBluetooth権限を参照してください。-keep class com.tencent.** { *; }-keep class org.light.** { *;}-keep class org.libpag.** { *;}-keep class org.extra.** { *;}-keep class com.gyailib.**{ *;}-keep class androidx.exifinterface.** { *;}

import com.tencent.xmagic.telicense.TELicenseCheck;// Licenseのダウンロードや更新をトリガーするだけで、認証結果を気にしない場合は、第4のパラメータにnullを渡してください。TELicenseCheck.getInstance().setTELicense(context, URL, KEY, new TELicenseCheck.TELicenseCheckListener() {@Overridepublic void onLicenseCheckFinish(int errorCode, String msg) {// 注意:このコールバックは必ずしも呼び出しスレッドで実行されるわけではありません。if (errorCode == TELicenseCheck.ERROR_OK) {// 認証成功} else {// 認証失敗}}});
// RTC Engine SDK インスタンスの作成(シングルトンパターン)TRTCCloud mTRTCCloud = TRTCCloud.sharedInstance(context);// イベントリスナーを設定するmTRTCCloud.addListener(trtcSdkListener);// SDKからの各種イベント通知(例:エラーコード、警告コード、オーディオ・ビデオの状態パラメータなど)private TRTCCloudListener trtcSdkListener = new TRTCCloudListener() {@Overridepublic void onError(int errCode, String errMsg, Bundle extraInfo) {Log.d(TAG, errCode + errMsg);}@Overridepublic void onWarning(int warningCode, String warningMsg, Bundle extraInfo) {Log.d(TAG, warningCode + warningMsg);}};// イベントリスナーを削除mTRTCCloud.removeListener(trtcSdkListener);// RTC Engine SDK インスタンスの破棄(シングルトンパターン)TRTCCloud.destroySharedInstance();
import com.tencent.xmagic.XmagicApi;// 美顔SDKを初期化XmagicApi mXmagicApi = new XmagicApi(context, XmagicResParser.getResPath(), new XmagicApi.OnXmagicPropertyErrorListener());// 開発デバッグ時には、ログレベルをDEBUGに設定できますが、パフォーマンスに影響しますので、リリースパッケージではWARNに設定してください。mXmagicApi.setXmagicLogLevel(Log.WARN);// 美顔SDKをリリース、この方法はGLスレッド内で呼び出す必要があります。mXmagicApi.onDestroy();
TXCloudVideoViewタイプのみをサポートしています。そのため、まずレイアウトファイルでビューレンダリングコントロールを定義する必要があります。<com.tencent.rtmp.ui.TXCloudVideoViewandroid:id="@+id/live_cloud_view_main"android:layout_width="match_parent"android:layout_height="match_parent" />
// アンカーのローカル画面のプレビューを表示するためのビデオレンダリングコントロールを取得TXCloudVideoView mTxcvvAnchorPreviewView = findViewById(R.id.live_cloud_view_main);// ビデオエンコードのパラメータを設定し、リモートのユーザーが見る画面の品質を決定TRTCCloudDef.TRTCVideoEncParam encParam = new TRTCCloudDef.TRTCVideoEncParam();encParam.videoResolution = TRTCCloudDef.TRTC_VIDEO_RESOLUTION_960_540;encParam.videoFps = 15;encParam.videoBitrate = 1300;encParam.videoResolutionMode = TRTCCloudDef.TRTC_VIDEO_RESOLUTION_MODE_PORTRAIT;mTRTCCloud.setVideoEncoderParam(encParam);// ビデオキャプチャーには、boolean mIsFrontCameraでフロント/アウトカメラを指定できます。mTRTCCloud.startLocalPreview(mIsFrontCamera, mTxcvvAnchorPreviewView);// ここでは音声品質を指定。低いから高い順:SPEECH/DEFAULT/MUSICmTRTCCloud.startLocalAudio(TRTCCloudDef.TRTC_AUDIO_QUALITY_DEFAULT);
enterRoomの前に、上記のインターフェースを呼び出すと、SDKはカメラのプレビューとオーディオのキャプチャーのみを開始し、enterRoomを呼び出した後にのみプッシュを開始します。enterRoomの後に、上記のインターフェースを呼び出すと、SDKはカメラのプレビューとオーディオのキャプチャーを開始し、自動的にプッシュを開始します。TRTCCloudDef.TRTCRenderParams params = new TRTCCloudDef.TRTCRenderParams();params.mirrorType = TRTCCloudDef.TRTC_VIDEO_MIRROR_TYPE_AUTO; // イメージモードparams.fillMode = TRTCCloudDef.TRTC_VIDEO_RENDER_MODE_FILL; // フィルモードparams.rotation = TRTCCloudDef.TRTC_VIDEO_ROTATION_0; // 回転角度// ローカル画面のレンダリングパラメータを設定mTRTCCloud.setLocalRenderParams(params);// エンコーダー出力のイメージモードを設定mTRTCCloud.setVideoEncoderMirror(boolean mirror);// ビデオエンコーダーの出力する画像の向きを設定mTRTCCloud.setVideoEncoderRotation(int rotation);
public void enterRoomByAnchor(String roomId, String userId) {TRTCCloudDef.TRTCParams params = new TRTCCloudDef.TRTCParams();// 文字列のルーム番号を例にparams.strRoomId = roomId;params.userId = userId;// 業務バックエンドから取得したUserSigparams.userSig = getUserSig(userId);// 自分のSDKAppIDに置き換えるparams.sdkAppId = SDKAppID;// アンカーロール指定params.role = TRTCCloudDef.TRTCRoleAnchor;// インタラクティブライブシナリオで入室mTRTCCloud.enterRoom(params, TRTCCloudDef.TRTC_APP_SCENE_LIVE);}// 入室結果イベントコールバック@Overridepublic void onEnterRoom(long result) {if (result > 0) {// resultは入室にかかった時間(ミリ秒)Log.d(TAG, "Enter room succeed");} else {// result入室失敗のエラーコードLog.d(TAG, "Enter room failed");}}
roomIdと文字列型のstrRoomIdに分かれており、2種類のルームは相互接続されません。ルーム番号のタイプを統一することをお勧めします。TRTC_APP_SCENE_LIVEを選択することをお勧めします。public void enterRoomByAudience(String roomId, String userId) {TRTCCloudDef.TRTCParams params = new TRTCCloudDef.TRTCParams();// 文字列のルーム番号を例にparams.strRoomId = roomId;params.userId = userId;// 業務バックエンドから取得したUserSigparams.userSig = getUserSig(userId);// 自分のSDKAppIDに置き換えるparams.sdkAppId = SDKAppID;// 指定視聴者ロールparams.role = TRTCCloudDef.TRTCRoleAudience;// インタラクティブライブシナリオで入室mTRTCCloud.enterRoom(params, TRTCCloudDef.TRTC_APP_SCENE_LIVE);}// 入室結果イベントコールバック@Overridepublic void onEnterRoom(long result) {if (result > 0) {// resultは入室にかかった時間(ミリ秒)Log.d(TAG, "Enter room succeed");} else {// result入室失敗のエラーコードLog.d(TAG, "Enter room failed");}}
@Overridepublic void onUserAudioAvailable(String userId, boolean available) {// リモートユーザーが自分のオーディオをパブリッシュ/キャンセル// 自動購読モードでは、何も操作する必要はありません。SDKはリモートユーザーのオーディオを自動的に再生します。}@Overridepublic void onUserVideoAvailable(String userId, boolean available) {// リモートユーザーがメインビデオ画面をパブリッシュ/キャンセルif (available) {// リモートユーザーのビデオストリームを購読し、ビデオレンダリングコントロールにバインドmTRTCCloud.startRemoteView(userId, TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_BIG, TXCloudVideoView view);} else {// リモートユーザーのビデオストリームの購読を停止し、レンダリングコントロールをリリースmTRTCCloud.stopRemoteView(userId, TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_BIG);}}
TRTCCloudDef.TRTCRenderParams params = new TRTCCloudDef.TRTCRenderParams();params.mirrorType = TRTCCloudDef.TRTC_VIDEO_MIRROR_TYPE_AUTO; // イメージモードparams.fillMode = TRTCCloudDef.TRTC_VIDEO_RENDER_MODE_FILL; // フィルモードparams.rotation = TRTCCloudDef.TRTC_VIDEO_ROTATION_0; // 回転角度// リモート画面のレンダリングモードを設定mTRTCCloud.setRemoteRenderParams(userId, TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_BIG, params)
// アンカーロールに切り替えmTRTCCloud.switchRole(TRTCCloudDef.TRTCRoleAnchor);// ロール切り替えイベントコールバック@Overridepublic void onSwitchRole(int errCode, String errMsg) {if (errCode == TXLiteAVCode.ERR_NULL) {// ロールの切り替えに成功}}
// マイクオン視聴者のローカル画面プレビューを表示するためのビデオレンダリングコントロールを取得します。TXCloudVideoView mTxcvvAudiencePreviewView = findViewById(R.id.live_cloud_view_sub);// ビデオエンコードのパラメータを設定し、リモートのユーザーが見る画面の品質を決定TRTCCloudDef.TRTCVideoEncParam encParam = new TRTCCloudDef.TRTCVideoEncParam();encParam.videoResolution = TRTCCloudDef.TRTC_VIDEO_RESOLUTION_480_270;encParam.videoFps = 15;encParam.videoBitrate = 550;encParam.videoResolutionMode = TRTCCloudDef.TRTC_VIDEO_RESOLUTION_MODE_PORTRAIT;mTRTCCloud.setVideoEncoderParam(encParam);// ビデオキャプチャーには、boolean mIsFrontCameraでフロント/アウトカメラを指定できます。mTRTCCloud.startLocalPreview(mIsFrontCamera, mTxcvvAudiencePreviewView);// ここでは音声品質を指定。低いから高い順:SPEECH/DEFAULT/MUSICmTRTCCloud.startLocalAudio(TRTCCloudDef.TRTC_AUDIO_QUALITY_DEFAULT);
// 視聴者ロールに切り替えるmTRTCCloud.switchRole(TRTCCloudDef.TRTCRoleAudience);// ロール切り替えイベントコールバック@Overridepublic void onSwitchRole(int errCode, String errMsg) {if (errCode == TXLiteAVCode.ERR_NULL) {// カメラのキャプチャーのパブリッシュを停止mTRTCCloud.stopLocalPreview();// マイクのキャプチャー及びパブリッシュを停止mTRTCCloud.stopLocalAudio();}}
public void exitRoom() {mTRTCCloud.stopLocalAudio();mTRTCCloud.stopLocalPreview();mTRTCCloud.exitRoom();}// 退室イベントコールバック@Overridepublic void onExitRoom(int reason) {if (reason == 0) {Log.d(TAG, "exitRoomアクティブコールでルーム退出します");} else if (reason == 1) {Log.d(TAG, "現在のルームからサーバーによってキックされました");} else if (reason == 2) {Log.d(TAG, "現在のルームは解散されました");}}
onExitRoomコールバック通知をスローして知らせます。enterRoomを呼び出す場合や他のオーディオ・ビデオSDKに切り替える場合は、onExitRoomのコールバックが返ってくるまで関連操作を行わないでください。そうしないと、カメラやマイクが強制的に使用されるなど、さまざまな異常が発生する可能性があります。DismissRoom(数字ルームIDと文字列ルームIDを区別)を提供しています。このインターフェースを呼び出すことで、ルーム内の全ユーザーを退室させ、ルームを解散することができます。exitRoom インターフェースを通じて、ルーム内の全ての配信者と視聴者の退室を完了させます。RTC Engineのルームライフサイクルルールに従い、ルームは自動的に解散されます。詳細はルーム退室をご参照ください。public void connectOtherRoom(String roomId, String userId) {try {JSONObject jsonObj = new JSONObject();// 数字のルーム番号はroomIdです。jsonObj.put("strRoomId", roomId);jsonObj.put("userId", userId);mTRTCCloud.ConnectOtherRoom(jsonObj.toString());} catch (JSONException e) {e.printStackTrace();}}// クロスルームPKのレスポンスコールバック@Overridepublic void onConnectOtherRoom(String userId, int errCode, String errMsg) {// クロスルームアンカーと交流したいユーザーID// エラーコード、ERR_NULLはリクエスト成功// エラーメッセージ}
@Overridepublic void onUserAudioAvailable(String userId, boolean available) {// リモートユーザーが自分のオーディオをパブリッシュ/キャンセル// 自動購読モードでは、何も操作する必要はありません。SDKはリモートユーザーのオーディオを自動的に再生します。}@Overridepublic void onUserVideoAvailable(String userId, boolean available) {// リモートユーザーがメインビデオ画面をパブリッシュ/キャンセルif (available) {// リモートユーザーのビデオストリームを購読し、ビデオレンダリングコントロールにバインドmTRTCCloud.startRemoteView(userId, TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_BIG, TXCloudVideoView view);} else {// リモートユーザーのビデオストリームの購読を停止し、レンダリングコントロールをリリースmTRTCCloud.stopRemoteView(userId, TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_BIG);}}
// クロスルームPKからの退出mTRTCCloud.DisconnectOtherRoom();// クロスルームPKの退出結果コールバック@Overridepublic void onDisConnectOtherRoom(int errCode, String errMsg) {super.onDisConnectOtherRoom(errCode, errMsg);}
DisconnectOtherRoom()を呼び出した後、他のすべてのルームのアンカーとのクロスルームPKを退出します。DisconnectOtherRoom()でクロスルームPKを退出することができます。XmagicResParser.setResPath(new File(getFilesDir(), "xmagic").getAbsolutePath());//loading//リソースファイルをプライベートディレクトリにcopyする必要がありますが、一度だけ実行必要です。XmagicResParser.copyRes(getApplicationContext());
XmagicResParser.setResPath(ダウンロードしたリソースファイルのローカルパス);
mTRTCCloud.setLocalVideoProcessListener(TRTCCloudDef.TRTC_VIDEO_PIXEL_FORMAT_Texture_2D, TRTCCloudDef.TRTC_VIDEO_BUFFER_TYPE_TEXTURE, new TRTCCloudListener.TRTCVideoFrameListener() {@Overridepublic void onGLContextCreated() {// SDK内部のOpenGL環境が作成、この時点でサードパーティー美顔の初期化作業が可能if (mXmagicApi == null) {XmagicApi mXmagicApi = new XmagicApi(context, XmagicResParser.getResPath(), new XmagicApi.OnXmagicPropertyErrorListener());} else {mXmagicApi.onResume();}}@Overridepublic int onProcessVideoFrame(TRTCCloudDef.TRTCVideoFrame srcFrame, TRTCCloudDef.TRTCVideoFrame dstFrame) {// サードパーティー美顔コンポーネントをアクセスするためのビデオ処理コールバックif (mXmagicApi != null) {dstFrame.texture.textureId = mXmagicApi.process(srcFrame.texture.textureId, srcFrame.width, srcFrame.height);}return 0;}@Overridepublic void onGLContextDestory() {// SDK内部のOpenGL環境が破棄、この時点でサードパーティー美顔のリソース破棄が可能mXmagicApi.onDestroy();}});
public void enableDualStreamMode(boolean enable) {// 小画面のビデオエンコードパラメータ(カスタマイズ可能)TRTCCloudDef.TRTCVideoEncParam smallVideoEncParam = new TRTCCloudDef.TRTCVideoEncParam();smallVideoEncParam.videoResolution = TRTCCloudDef.TRTC_VIDEO_RESOLUTION_480_270;smallVideoEncParam.videoFps = 15;smallVideoEncParam.videoBitrate = 550;smallVideoEncParam.videoResolutionMode = TRTCCloudDef.TRTC_VIDEO_RESOLUTION_MODE_PORTRAIT;mTRTCCloud.enableEncSmallVideoStream(enable, smallVideoEncParam);}
// リモートユーザーのビデオストリームを購読する際にストリームタイプが選択可能mTRTCCloud.startRemoteView(userId, streamType, videoView);// 指定されたリモートユーザーの大画面と小画面をいつでも切り替え可能mTRTCCloud.setRemoteVideoStreamType(userId, streamType);
streamTypeをTRTC_VIDEO_STREAM_TYPE_SMALLに設定することで、低解像度の小画面で視聴することができます。TXCloudVideoViewをビデオレンダリングコントロールとして使用し、SurfaceViewとTextureViewの2つのレンダリング方式をサポートしています。以下、レンダリングコントロールのタイプを指定する方法と、ビデオレンダリングコントロールを更新する方法について説明します。TXCloudVideoViewに変換したい場合は、以下の方法でプログラムを組めます。// TextureViewの強制使用TextureView textureView = findViewById(R.id.texture_view);TXCloudVideoView cloudVideoView = new TXCloudVideoView(context);cloudVideoView.addVideoView(textureView);// SurfaceViewの強制使用SurfaceView surfaceView = findViewById(R.id.surface_view);TXCloudVideoView cloudVideoView = new TXCloudVideoView(surfaceView);
// ローカルプレビュー画面のレンダリングコントロールを更新mTRTCCloud.updateLocalView(videoView);// リモートユーザーのビデオレンダリングコントロールを更新mTRTCCloud.updateRemoteView(userId, streamType, videoView);
videoViewにターゲットビデオレンダリングコントロールを渡します。streamTypeはTRTC_VIDEO_STREAM_TYPE_BIGとTRTC_VIDEO_STREAM_TYPE_SUBのみに対応します。// いいねメッセージのボディーJSONObject jsonObject = new JSONObject();try {jsonObject.put("cmd", "like_msg");JSONObject msgJsonObject = new JSONObject();msgJsonObject.put("type", 1); // いいねの種類msgJsonObject.put("likeCount", 10); // いいねの数jsonObject.put("msg", msgJsonObject);} catch (JSONException e) {e.printStackTrace();}String data = jsonObject.toString();// グループカスタムメッセージを送信(「いいね」メッセージは低優先度に設定することをお勧めします)V2TIMManager.getInstance().sendGroupCustomMessage(data.getBytes(), mRoomId,V2TIMMessage.V2TIM_PRIORITY_LOW, new V2TIMValueCallback<V2TIMMessage>() {@Overridepublic void onError(int i, String s) {// いいねメッセージの送信に失敗}@Overridepublic void onSuccess(V2TIMMessage v2TIMMessage) {// いいねメッセージの送信に成功// ローカルでの「いいね」エフェクトのレンダリング}});
// グループカスタムメッセージを受信V2TIMManager.getInstance().addSimpleMsgListener(new V2TIMSimpleMsgListener() {@Overridepublic void onRecvGroupCustomMessage(String msgID, String groupID, V2TIMGroupMemberInfo sender, byte[] customData) {String customStr = new String(customData);if (!customStr.isEmpty()) {try {JSONObject jsonObject = new JSONObject(customStr);String command = jsonObject.getString("cmd");JSONObject messageJsonObject = jsonObject.getJSONObject("msg");if (command.equals("like_msg")) {int type = messageJsonObject.getInt("type"); // いいねの種類int likeCount = messageJsonObject.getInt("likeCount"); // いいねの数// いいねの種類と数に応じていいねの効果をレンダリング}} catch (JSONException e) {e.printStackTrace();}}}});
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.getInstance().addSimpleMsgListener(new V2TIMSimpleMsgListener() {@Overridepublic void onRecvGroupCustomMessage(String msgID, String groupID, V2TIMGroupMemberInfo sender, byte[] customData) {String customStr = new String(customData);if (!customStr.isEmpty()) {try {JSONObject jsonObject = new JSONObject(customStr);String command = jsonObject.getString("cmd");JSONObject messageJsonObject = jsonObject.getJSONObject("msg");if (command.equals("gift_msg")) {int type = messageJsonObject.getInt("type"); // ギフトタイプint giftCount = messageJsonObject.getInt("giftCount"); // ギフトの数String giftUrl = messageJsonObject.getString("giftUrl"); // ギフトリソースアドレスString giftName = messageJsonObject.getString("giftName"); // ギフト名称// ギフトタイプ、ギフト数、ギフトリソースアドレス、ギフト名称に基づいてギフトのエフェクトをレンダリングします。}} catch (JSONException e) {e.printStackTrace();}}}});
// パブリックチャットに弾幕メッセージを送信V2TIMManager.getInstance().sendGroupTextMessage(text, groupID, V2TIMMessage.V2TIM_PRIORITY_NORMAL, new V2TIMValueCallback<V2TIMMessage>() {@Overridepublic void onError(int i, String s) {// 弾幕メッセージの送信に失敗}@Overridepublic void onSuccess(V2TIMMessage v2TIMMessage) {// 弾幕メッセージの送信に成功// ローカルにメッセージテキストを表示}});// パブリックチャットの弾幕メッセージを受信V2TIMManager.getInstance().addSimpleMsgListener(new V2TIMSimpleMsgListener() {@Overridepublic void onRecvGroupTextMessage(String msgID, String groupID, V2TIMGroupMemberInfo sender, String text) {// 送信者情報senderとメッセージテキスト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に分かれており、それぞれローカルプレビュー画面のミラーリング効果と、ビデオエンコード出力画面のミラーリング効果(リモート視聴者およびクラウド録画のミラーリングモード)に影響します。ローカルプレビューのイメージエフェクトをリモートの視聴者側で同時に有効にしたい場合は、以下の方法でエンコードしてください。// ローカル画面のレンダリングパラメータを設定TRTCCloudDef.TRTCRenderParams params = new TRTCCloudDef.TRTCRenderParams();params.mirrorType = TRTCCloudDef.TRTC_VIDEO_MIRROR_TYPE_ENABLE; // イメージモードparams.fillMode = TRTCCloudDef.TRTC_VIDEO_RENDER_MODE_FILL; // フィルモードparams.rotation = TRTCCloudDef.TRTC_VIDEO_ROTATION_0; // 回転角度mTRTCCloud.setLocalRenderParams(params);// エンコーダー出力のイメージモードを設定mTRTCCloud.setVideoEncoderMirror(true);
// カメラの最大ズーム倍率を取得する(モバイル端末のみ適用)float zoomRatio = mTRTCCloud.getDeviceManager().getCameraZoomMaxRatio();// カメラのズーム倍率を設定する(モバイル端末のみ適用)// 値の範囲は1-5で、1が最も遠く(通常のカメラ)、5が最も近い(拡大鏡)です。推奨最大値は5で、5を超えるとビデオデータがぼやけてしまいます。mTRTCCloud.getDeviceManager().setCameraZoomRatio(zoomRatio);
// カメラのオートフォーカス機能をオンまたはオフ(モバイル端末のみ適用)mTRTCCloud.getDeviceManager().enableCameraAutoFocus(false);// カメラのフォーカス位置を設定(モバイル端末のみ適用)// このインターフェースを使用する前提条件は、まずenableCameraAutoFocusでオートフォーカス機能をオフにすることです。mTRTCCloud.getDeviceManager().setCameraFocusPosition(int x, int y);
// 現在がインカメラかどうかを判断(モバイル端末のみ適用)boolean isFrontCamera = mTRTCCloud.getDeviceManager().isFrontCamera();// インカメラとアウトカメラを切り替え(モバイル端末のみ適用)// trueに渡す: インカメラに。falseに渡す: アウトカメラにmTRTCCloud.getDeviceManager().switchCamera(!isFrontCamera);
フィードバック