實時音影片(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.自定義渲染的具體用法可以參考文檔 自定義影片渲染setLocalVideoRenderListenerTRTCVideoRenderListener

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攝影機採集

  1. 建議更新 SDK 版本到最新版本。
  2. 如果是特殊設備,可以使用本地預覽畫面渲染角度介面setLocalViewRotation ,遠端影片畫面的渲染角度介面setRemoteViewRotation ,設置編碼器輸出的畫面渲染角度介面setVideoEncoderRotation進行調整。具體介面使用說明文檔見影片畫面旋轉

使用自定義影片採集

  1. 建議更新 SDK 版本到最新版本。
  2. 確認下將採集的影片畫面的角度是正確。
  3. 將影片數據填充給 TRTCSDK,檢查是否給TRTCCloudDef.TRTCVideoFrame設置旋轉角度
  4. 如果是特殊設備,可以使用本地預覽畫面渲染角度介面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 回饋