实时音视频(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 反馈