实时音视频(TRTC)常见问题

2019-09-30 11:45:01 浏览数 (1)

实时音视频(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 示例代码
代码语言:txt复制
 /**
 * 视频首帧渲染回调
 * <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 示例代码
代码语言:txt复制
- (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
代码语言:txt复制
<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 对象
代码语言:txt复制
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

代码语言:txt复制
mTRTCCloud.startLocalPreview(mMoreDialog.isCameraFront(), null);

2.设置监听setLocalVideoRenderListener,然后进行自定义渲染

代码语言:txt复制
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
代码语言:txt复制
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平台。

代码语言:txt复制
<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 示例代码
代码语言:txt复制
mTRTCCloud.setRemoteViewFillMode(userId, TRTCCloudDef.TRTC_VIDEO_RENDER_MODE_FIT);
mTRTCCloud.startRemoteView(userId, renderView);
  • iOS 示例代码
代码语言:txt复制
[_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 反馈

0 人点赞