實時音影片(TRTC)常見問題
- 2019 年 10 月 8 日
- 筆記
實時音影片(TRTC)常見問題目錄:
集成類
1.如何選擇媒體音量和通話音量?
該場景適用於 iOS 、Android 平台。 需將 SDK 版本更新至 6.6 版本或以上
一般而言,媒體音量指播放音樂、影片的聲音、遊戲聲音等的音量,而通話音量指打電話的音量,影片通話的音量。
默認情況下,麥上用戶(影片通話場景中的所有用戶,低延時直播場景下的主播和連麥觀眾)使用的是通話音量。麥下用戶(低延時直播場景下的普通觀眾)使用的是媒體音量。
另外 TRTCSDK 開放 void setSystemVolumeType(int type)
介面,支援自主選擇通話音量和媒體音量。
TRTCAudioVolumeTypeAuto
:默認類型,麥上通話音量、麥下媒體音量;
TRTCAudioVolumeTypeMedia
:始終使用媒體音量。
2.如何判斷打開攝影機成功?
該場景適用於 iOS/Mac、Android 、Windows 平台。 需將 SDK 版本更新至 6.6 版本或以上
SDK 提供回調方法onCameraDidReady()
,當收到該回調時表示攝影機已經準備就緒。
3.如何判斷打開麥克風成功?
該場景適用於 iOS/Mac、Android 、Windows 平台。 需將 SDK 版本更新至 6.6 版本或以上
SDK 提供回調方法onMicDidReady()
,當收到該回調時表示麥克風已經準備就緒。
4.音影片通話,如何判斷推流成功?
該場景適用於 iOS/Mac、Android 、Windows 平台。
SDK 提供回調方法 onSendFirstLocalVideoFrame(int streamType)
,在 enterRoom()
並 startLocalPreview()
成功後開始攝影機採集,並將採集到的畫面進行編碼。 當 SDK 成功向雲端送出第一幀影片數據後,會拋出這個回調事件。
5.純音頻通話,如何判斷推流成功?
該場景適用於 iOS/Mac、Android 、Windows 平台。 需將 SDK 版本更新至 6.5 版本或以上 SDK 提供回調方法
onSendFirstLocalAudioFrame()
,在enterRoom()
並startLocalPreview()
成功後開始麥克風采集,並將採集到的聲音進行編碼。 當 SDK 成功向雲端送出第一幀音頻數據後,會拋出這個回調事件。
6.如何判斷拉取遠端觀眾流成功?
該場景適用於 iOS/Mac、Android 、Windows 平台。
SDK 提供回調方法 onFirstVideoFrame(String userId, int streamType, int width, int height)
,如果 userId 為 null,代表開始渲染本地採集的攝影機畫面,需要您先調用 startLocalPreview()
觸發。 如果 userId 不為 null,代表開始渲染遠程用戶的首幀畫面,需要您先調用 startRemoteView
觸發。
- Android 示例程式碼
/** * 影片首幀渲染回調 * <p> * 一般客戶可不關注,專業級客戶品質統計等;您可以根據您的項目情況決定是否進行統計或實現其他功能。 * * @param userId 用戶 ID * @param streamType 影片流類型 * @param width 畫面寬度 * @param height 畫面高度 */ @Override public void onFirstVideoFrame(String userId, int streamType, int width, int height) { Log.i(TAG, "onFirstVideoFrame: userId = " + userId + " streamType = " + streamType + " width = " + width + " height = "+ height); }
- iOS 示例程式碼
- (void)onFirstVideoFrame:(NSString *)userId streamType:(TRTCVideoStreamType)streamType width:(int)width height:(int)height { NSLog(@"onFirstVideoFrame userId:%@ streamType:%d width:%d height:%d", userId, streamType, width, height); }
7.是否支援 SurfaceView 自定義渲染?
該場景適用於 Android 平台的本地預覽端和遠端觀眾端。 需將 SDK 版本更新至 6.6 版本或以上
- 在布局文件中,使用 SurfaceView 控制項代替 TXCloudVideoView
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/trtc_rl_bar" android:layout_width="match_parent" android:layout_height="match_parent"> <!--<com.tencent.rtmp.ui.TXCloudVideoView--> <!--android:id="@+id/trtc_tc_cloud_view"--> <!--android:layout_width="match_parent"--> <!--android:layout_height="match_parent" />--> <SurfaceView android:id="@+id/trtc_tc_cloud_view" android:layout_width="match_parent" android:layout_height="match_parent" /> </RelativeLayout>
- 在Java層程式碼中,初始化 TXCloudVideoView 對象
private TXCloudVideoView mVideoView; SurfaceView mSurfaceView = (SurfaceView) findViewById(R.id.trtc_tc_cloud_view); mVideoView = new TXCloudVideoView(mSurfaceView);
8.如何實現本地預覽畫面自定義渲染?
該場景適用於 iOS、Android 平台。
Android 平台
1.調用攝影機預覽介面,第二參數設置為 null,表示不設置SDK的內部渲染控制項 TXCloudVideoView
mTRTCCloud.startLocalPreview(mMoreDialog.isCameraFront(), null);
2.設置監聽setLocalVideoRenderListener
,然後進行自定義渲染
mTRTCCloud.setLocalVideoRenderListener(TRTCCloudDef.TRTC_VIDEO_PIXEL_FORMAT_Texture_2D, TRTCCloudDef.TRTC_VIDEO_BUFFER_TYPE_TEXTURE, new TRTCCloudListener.TRTCVideoRenderListener() { @Override public void onRenderVideoFrame(String userId, int streamType, TRTCCloudDef.TRTCVideoFrame trtcVideoFrame) { // 拿到 trtcVideoFrame(待渲染影片幀) 進行渲染 } });
3.自定義渲染的具體用法可以參考文檔 自定義影片渲染 、 setLocalVideoRenderListener 、 TRTCVideoRenderListener
9.有哪些技術統計指標?
該場景適用於 iOS/Mac、Android 、Windows 平台。
SDK 提供回調方法 onStatistics(TRTCStatistics statics)
,每 2 秒回一次技術指標。包括當前 appCpu(App 的 CPU 使用率)、systemCpu(當前系統的 CPU 使用率)、rtt(延遲)、upLoss(上行丟包率)、downLoss(下行丟包率)以及本地成員和遠端成員的音影片統計資訊,具體參數可參考 TRTCStatistics 類型說明文檔
10.如何純音頻通話?
該場景適用於 iOS/Mac、Android 、Windows 平台。
場景1:業務場景中沒有使用到 CDN 旁路直播
用戶在 enterRoom()
之前,只調用開啟麥克風采集介面 startLocalAudio()
,不需要調用攝影機預覽介面startLocalPreview()
。
場景2:業務場景中使用到 CDN 旁路直播
需要在音頻推流配置參數中增加 TRTCParams.businessInfo
欄位,指定 CDN 旁路能支援純音頻流。
- Android
JSONObject Str_uc_params = new JSONObject(); JSONObject pure_audio_push_mod = new JSONObject(); try { pure_audio_push_mod.put("pure_audio_push_mod", 1); // 1: 允許純音頻推流,2: 允許純音頻推流+錄製 Str_uc_params.put("Str_uc_params", pure_audio_push_mod); Log.i(TAG, "純音頻推流參數: " + Str_uc_params.toString()); } catch (JSONException e) { e.printStackTrace(); } trtcParams = new TRTCCloudDef.TRTCParams(sdkAppId, selfUserId, userSig, roomId, "", Str_uc_params.toString());
具體使用流程可以參考文檔:實時音影片V2版本,如何進行純音頻旁路直播。
11.TRTC 需要哪些用戶許可權?
適用於Android平台。
<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.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> <uses-feature android:name="android.hardware.camera" /> <uses-feature android:name="android.hardware.camera.autofocus" />
品質類
1.播放遠端觀眾畫面出現黑邊
如下程式碼所示,播放遠端觀眾的畫面渲染模式選擇 TRTC_VIDEO_RENDER_MODE_FIT
模式, 當渲染控制項 View 的寬高比與影片寬高此不一致時,有黑邊情況。
- Android 示例程式碼
mTRTCCloud.setRemoteViewFillMode(userId, TRTCCloudDef.TRTC_VIDEO_RENDER_MODE_FIT); mTRTCCloud.startRemoteView(userId, renderView);
- iOS 示例程式碼
[_trtc startRemoteView:userId view:remoteView]; [_trtc setRemoteViewFillMode:userId mode:TRTCVideoFillMode_Fit];
解決方案:
1.確保渲染控制項 View 寬高和影片寬高一致
2.渲染模式選擇TRTC_VIDEO_RENDER_MODE_FIT
,但畫面可能會出現能會被拉伸裁剪的情況。
2.播放遠端觀眾畫面出現卡頓
1.檢測網路情況,建議更換網路重現
2.找到 roomid、userid ,然後到控制台的 監控儀錶盤 ,自主查詢用戶的卡頓情況。
3.打開攝影機失敗
- 確認攝影機許可權是否授予
- 如果設備是電視、盒子等,使用的攝影機是外接的。目前 TRTCSDK 是支援識別外接攝影機的。因此,需要確認攝影機接頭和設備是否接觸良好。
4.預覽/播放畫面出現旋轉
使用TRTCSDK攝影機採集
- 建議更新 SDK 版本到最新版本。
- 如果是特殊設備,可以使用本地預覽畫面渲染角度介面
setLocalViewRotation
,遠端影片畫面的渲染角度介面setRemoteViewRotation
,設置編碼器輸出的畫面渲染角度介面setVideoEncoderRotation
進行調整。具體介面使用說明文檔見影片畫面旋轉
使用自定義影片採集
- 建議更新 SDK 版本到最新版本。
- 確認下將採集的影片畫面的角度是正確。
- 將影片數據填充給 TRTCSDK,檢查是否給
TRTCCloudDef.TRTCVideoFrame
設置旋轉角度 - 如果是特殊設備,可以使用本地預覽畫面渲染角度介面
setLocalViewRotation
,遠端影片畫面的渲染角度介面setRemoteViewRotation
,設置編碼器輸出的畫面渲染角度介面setVideoEncoderRotation
進行調整。具體介面使用說明文檔見影片畫面旋轉
5.影片鏡像問題
使用前攝影機進行影片通話,會有鏡像效果,所以本地預覽和遠端觀眾畫面是左右顛倒。如果開發者想讓兩端畫面一致,可以參考文檔使用前攝影機進行影片通話,本地預覽和遠端觀眾畫面是左右顛倒?
6.如何橫屏推流
開發者可能用設備是電視或者因場景需要橫屏推流,具體實現可以參考 Android TRTC 實現橫屏影片通話 文檔。
7.殺死進程,如何確認主播是否在直播中?
該場景適用於 iOS/Mac、Android 、Windows 平台。
在 TRTC 房間中有推流上行的用戶,當應用進程被殺死或者主動斷開網路,超過 30 秒之後,主播還沒有恢復推流。TRTC 房間裡面其他用戶會收到主播(有推流上行的用戶)退出房間的回調。
產品諮詢類
1.騰訊實時音影片提供的解決方案有哪些?
騰訊實時音影片(TRTC)目前有兩種解決方案,一種是影片通話,另一種是萬人低延時直播。
2.影片通話和低延時直播的區別?
- 按房間人數劃分 影片通話裡面所有的角色都是主播,適用於人數不超過 10 人(考慮到手機性能限制)的多人雙向影片通話場景,例如在在線教育、影片客服、在線招聘、小型會議等業務場景。低延時直播裡面有多個主播角色,但是絕大部分都是觀眾,方案適用於主播在線直播以及主播觀眾互動連麥場景。
- 按照伺服器線路劃分 在影片通話下,服務端會分配主幹網上核心機房的伺服器供主播連接。低延時直播中,伺服器分配主幹網上核心機房的伺服器供主播連接,觀眾則是分配高速網上機房的伺服器。
3.TRTCSDK支援哪些平台和版本
騰訊實時音影片(TRTC) SDK 支援 iOS、Android、Mac OS、Windows、Web 和微信小程式等平台,並平台間互通。具體兼容性見下表:
平台 |
支援版本 |
---|---|
Android |
最低兼容 Android 4.1(SDK API Level 16),建議使用 Android 5.0 (SDK API Level 21)及以上版本 |
iOS |
iOS 9.0 以上的 iPhone 或者 iPad |
Windows(C++) |
Microsoft Windows 7及以上版本 |
Windows(C#) |
Microsoft Windows 7及以上版本 |
Mac OS |
OS X10.10+ |
微信小程式 |
最新版本 |
Web |
最新版本的 Chrome 瀏覽器 |
4.TRTCSDK 支援Android哪些設備?
騰訊實時音影片(TRTC) SDK 已經針對手機、盒子、電視等設置做了相關的兼容優化,所以 SDK 能在相關的設備上運行。如果你設備運行有問題,歡迎在評論留言回饋或者在 Github 上提 issue 回饋