腾讯实时音视频(Tencent Real-Time Communication,TRTC)是腾讯云基于 QQ 十多年来在音视频通话技术上积累,并结合腾讯浏览服务 TBS WebRTC 能力与腾讯实时音视频 SDK ,为客户提供多平台互通高品质可定制化的 实时音视频互通服务 解决方案。
为了方便开发者技术选型、开发集成,以下是针对不同问题场景整理的 TRTC 常见问题汇总,后续会持续更新,欢迎反馈。

集成接入篇

一、通用

1. 实时音视频 TXLiteAVSDK 默认输出的日志在哪里?怎么查看?

TRTC 的日志默认压缩加密,后缀为 .xlog。日志是否加密是可以通过 setLogCompressEnabled 来控制,生成的文件名里面含 C(compressed) 的就是加密压缩的,含 R(raw) 的就是明文的。

  • iOS&Mac:sandbox的Documents/log
  • Android:
    • 6.7及之前的版本:/sdcard/log/tencent/liteav
    • 6.8之后的版本:/sdcard/Android/data/包名/files/log/tencent/liteav/
  • Windows:%appdata%/tencent/liteav/log
  • Web:打开浏览器控制台,或使用 vConsole 记录 SDK 打印信息
  • 小程序:启用 标签的 debug 属性,使用 vConsole 记录打印信息

查看 .xlog 文件需要下载解密工具,在python 2.7环境中放到 xlog 文件同目录下直接使用 python decode_mars_log_file.py 运行即可。
日志解密工具下载地址:dldir1.qq.com/hudongzhibo/log_tool/decode_mars_log_file.py,日志相关详情参考 日志输出配置
注:查看 .xlog 文件下载解密工具,在python 2.7环境中放到xlog文件同目录下直接使用 python decode_mars_log_file.py 运行即可。
日志相关详情参考:https://cloud.tencent.com/developer/article/1502366

2. TRTC集成后,文件增量有多大?

3. 如何查询 SDK 最新版本号?

二、Android SDK

1. TRTC Android端能不能支持64位的arm64-v8a架构?

  • TRTC 6.3 版本开始已提供 arm64-v8a 架构 ABI 支持。

2. 在 Android 端怎么实现动态加载 so 库?

三、iOS SDK

1. 在 iOS 端是否支持 Swift 集成?

  • 支持,直接按照支持集成三方库的流程集成 SDK 即可,还可以参考 跑通Demo(iOS&Mac)

2. iOS 端 SDK 与其它三方库冲突报错问题该如何解决?

3. iOS 端 SDK 与其它三方库冲突报错问题该如何解决?

4. TRTC SDK 是否支持 iOS 后台运行?

  • 支持,您只需选中当前工程项目,在 Capabilities 下的设置 Background ModesON,并勾选 Audio,AirPlay and Picture in Picture即可实现后台运行,详情如下图所示:

四、房间相关接口

1. 调用加入房间接口 enterRoom() 报错,onEnterRoom 回调返回错误码 -100018是什么原因?

  • 报错-100018错误原因是进房 TRTCParams 里面相关参数不正确导致的SDK校验失败,有下面几种情况:
    (1)参数 sdkAppId 传入不正确;
    (2)参数 userId 对应的验证签名 userSig 传入不正确。

排查办法,登录腾讯云控制台在实时音视频-账号信息查看sdkappid,在开发辅助可以使用签名(UserSig)校验工具校验。

2. enterRoom() 应用场景 scene 参数该怎么选择?

进房应用场景参数支持下面4种场景:

  • TRTCAppSceneVideoCall :视频通话场景,适合1对1视频通话、300人视频会议、在线问诊、视频聊天、远程面试等。
  • TRTCAppSceneLIVE :视频互动直播,适合视频低延时直播、十万人互动课堂、视频直播 PK、视频相亲房、互动课堂、远程培训、超大型会议等。
  • TRTCAppSceneAudioCall :语音通话场景,适合1对1语音通话、300人语音会议、语音聊天、语音会议、在线狼人杀等。
  • TRTCAppSceneVoiceChatRoom:语音互动直播,适合:语音低延时直播、语音直播连麦、语聊房、K 歌房、FM 电台等。

3. 离开房间接口 exitRoom() 是否必须调用?

  • 不管进房是否成功,enterRoom 都必须与 exitRoom 配对使用,在调用 exitRoom 前再次调用 enterRoom 函数会导致不可预期的错误问题。

4. 调用 exitRoom() 之后快速操作设备摄像头或麦克风出现被占用等异常现象?

  • 调用 exitRoom() 接口会执行退出房间的相关逻辑,如释放音视频设备资源和编解码器资源等。 待资源释放完毕,SDK 会通过 TRTCCloudListener 中的 onExitRoom() 回调通知上层。
    如果您要再次调用 enterRoom() 或者切换到其他的音视频 SDK,请等待 onExitRoom() 回调到来之后再执行相关操作。

5. switchRole() 接口有什么作用?

  • switchRole 接口用于切换角色,仅适用于进房直播场景( TRTCAppSceneLIVE 和 TRTCAppSceneVoiceChatRoom ),支持 TRTCRoleAnchor(主播)和 TRTCRoleAudience(观众)2种角色,区别是主播角色可以上行本地音视频数据,观众角色只支持下行。

6. connectOtherRoom() 接口怎么使用?

  • connectOtherRoom 的应用场景用于跨房连麦(主播PK), 接口的逻辑是:主播调用 connectOtherRoom() 后,可以通过 onConnectOtherRoom 回调得到跨房PK的结果;调用之后,主播一所在房间里的所有人,都会通过onUserEnter的回调,得到主播二进房的通知;主播二所在房间的所有人,也都会通过onUserEnter的回调,得到主播一进房的通知。

详情参考API接口文档:https://cloud.tencent.com/document/product/647/32228

7. 在小程序端创建了一个房间,移动端能否进入该房间?

  • 可以,实时音视频支持全平台互通。

8. SDK 是否可以监听远端离开房间?

  • 可以使用 onRemoteUserLeaveRoom 来监听用户离开房间事件,且该接口仅在 VideoCall 的所有用户和 LIVE 模式下的主播离开房间时会触发回调,观众离开房间不会有回调。

9. 同一个页面中,是否可以创建 N 个 TRTC 对象,通过 N 个 UserID,分别登录到 N 个房间?

五、视频相关接口

1. stopLocalPreviewd() 和 muteLocalVideo() 区别?

  • stopLocalPreviewd 是停止本地视频采集,当调用该接口之后自己本地和远端画面就是黑屏;muteLocalVideo 是设置是否向后台发送自己的视频画面,当调用该接口之后其他用户观看的画面变成黑屏,自己本地的预览还是能看到画面。

2. TRTC SDK 怎么设置上行视频码率、分辨率、帧率?

  • 可以通过 TRTCCloud 里面的 setVideoEncoderParam() 接口设置 TRTCVideoEncParam 参数中 videoResolution(分辨率)、videoFps(帧率)、videoBitrate(码率)。

3. TRTC SDK 都支持哪些分辨率?

4. SDK 控制画面角度与方向是怎么确定的?

  • 首先,确保已经阅读过文档中关于视频旋转的相关内容:https://cloud.tencent.com/document/product/647/32237
    关于画面旋转角度,会涉及到四个方面:

    1、发送端本地画面的旋转角度,SDK 里通过 setLocalViewRotation 控制,有 4 个方向;

    2、发送端本地编码器处理的方向,SDK 里面通过:

    2.1、resMode 来指定画面采集的方向是横屏(宽大于高)或竖屏(高大于宽)

    2.2、setGSensorMode 指定相机的角度是否随重力感应旋转

    2.3、setVideoEncoderRotation 控制编码时旋转画面的角度

    其中,GSensorMode 影响的是相机的方向角度; setVideoEncoderRotation 是人为指定的旋转角度;

    3、接收端本地解码器的方向,这个一般不用管;

    4、接收端显示画面的角度,SDK 里通过 setRemoteViewRotation 控制,有 4 个方向。

    由上可以看出,画面旋转的内容较为复杂,因此我们将其放置于高级功能之中,建议开发者按照Demo示例进行处理,避免因为误操作旋转参数导致画面旋转角度不达预期。

5. TRTC 怎样实现横屏视频通话?

6. TRTC 视频画面出现黑边怎么去掉?

  • 设置 TRTCVideoFillMode_Fill(填充)可以解决,TRTC 视频渲染模式有2种分别是填充和适应,本地渲染画面可以通过 setLocalViewFillMode() 设置,远端渲染画面可以通过 setRemoteViewFillMode 设置:
参数 描述
TRTCVideoFillMode_Fill 图像铺满屏幕,超出显示视窗的视频部分将被截掉,所以画面显示可能不完整。
TRTCVideoFillMode_Fit 图像长边填满屏幕,短边区域会被填充黑色,但画面的内容肯定是完整的。

7. TRTC 自己的本地画面和远端画面左右相反?

  • 本地默认采集的画面是镜像的,可以通过 setLocalViewMirror 接口设置,该接口只改变本地摄像头的预览画面的镜像模式,;或者通过 setVideoEncoderMirror 接口设置置编码器输出的画面镜像模式,该接口不改变本地摄像头的预览画面,但会改变另一端用户看到的(以及服务器录制下来的)画面效果。
接口 描述含义
setLocalViewMirror() 该接口只改变本地摄像头的预览画面。
setVideoEncoderMirror() 该接口不改变本地摄像头的预览画面,但会改变另一端用户看到的(以及服务器录制下来的)画面效果。

8. TRTC 设置视频编码输出的方向没有效果?

  • 调用 setVideoEncoderRotation() 接口的前提,需要设置 setGSensorMode() 为 TRTCGSensorMode_Disable,否则远端用户观看到的画面没有变化。

9. 移动端 SDK 推流怎么设置1080p分辨率?

1080P在 TX_Enum_Type_VideoResolution 定义是114,直接设置分辨率传枚举值即可。

10. TRTC 移动端怎么实现录屏(屏幕分享)?

  • Android 端:Version 7.2 及以上版本支持手机录屏,具体实践方法请参见 实时屏幕分享(Android)
  • iOS 端:Version 7.2 及以上版本支持 App 内录屏;Version 7.6 及以上版本支持手机录屏和 App 内录屏。具体实践方法请参见 实时屏幕分享(iOS)

六、音频相关接口

1. stopLocalAudio() 和 muteLocalAudio() 的区别是什么?

  • stopLocalAudio 是关闭本地音频的采集和上行,而muteLocalAudio 并不会停止发送音视频数据,而是会继续发送码率极低的静音包。

2. TRTC的通话同时用了点播播放器 TXVodPlayer 播放,为什么播放声音很小?

  • 目前 TRTC 的音量类型默认使用通话音量,而点播播放器默认使用媒体音量,在 TRTC 设置了通话音量之后,为了保证通话,点播播放器也会复用音频通道走通话音量。可以通过 setSystemVolumeType 接口设置通话时使用的系统音量类型,设置为媒体音量模式 TRTCSystemVolumeTypeMedia 可以解决。

3. 移动端(Andriod/iOS)支持哪几种系统音量模式?

支持2种系统音量类型,即通话音量类型和媒体音量类型:

  • 通话音量,手机专门为通话场景设计的音量类型,使用手机自带的回声抵消功能,音质相比媒体音量类型较差, 无法通过音量按键将音量调成零,但是支持蓝牙耳机上的麦克风。
  • 媒体音量,手机专门为音乐场景设计的音量类型,音质相比于通话音量类型要好,通过通过音量按键可以将音量调成零。 使用媒体音量类型时,如果要开启回声抵消(AEC)功能,SDK 会开启内置的声学处理算法对声音进行二次处理。 在媒体音量模式下,蓝牙耳机无法使用自带的麦克风采集声音,只能使用手机上的麦克风进行声音采集。

七、自定义采集和渲染

1. TRTC 自定义采集视频数据怎么实现?

2. TRTC 自定义采集音频数据怎么实现?

八、旁路推流和录制

1. TRTC 正常上行有数据,旁路拉流失败看不到画面?

  • 首先确认在控制台中已打开自动旁路,未打开的话无法旁路推流;
  • 打开了控制台旁路推流,音视频上行可以正常旁路;纯音频上行需要设置使用 AudioCall 和 VoiceChatRoom 这两个场景。

2. 旁路录制的各种场景下生成录制文件是怎样的?

  • 未打开控制台旁路推流,未配置云端录制,不会生成录制文件;
  • 控制台打开了,音视频上行可以正常录制;
  • 设置了pure_audio_push_mod:1,音视频上行可以正常录制;纯音频上行不会录制;
  • 设置了pure_audio_push_mod:2,音视频上行和纯音频上行都只会生成MP3录制文件;
  • 先音视频上行,中途切换了纯音频,生成的录制文件前一部分是音视频都有,切换后的部分只有音频;
  • 先纯视频上行,中途切换了音视频,上传的录制文件只会有音视频上行的那一部分;
  • 音视频上行需要生成AAC的音频录制文件,可以在云直播配置录制模板加上AAC格式;
  • 纯音频上行不支持录制成视频文件格式,配置了模板也录制不了;
  • 云直播配置的录制模板是账号级别的。实时音视频配置的模板是应用级别的(sdkappid),同一个 sdkappid 发起的旁路推到直播优先选取实时音视频配置的 sdkappid 级别的模板。如果这个账号下还有其它 sdkappid,并且没有在实时音视频配置模板的话就会选用直播的录制模板;
  • 如果云直播录制模板配置了AAC和其它视频格式,刚开始上行只有音频,那也只会生成AAC格式一个录制文件。

九、其它

1. 实时音视频(TRTC)如何打印日志?

技术支持

亲爱的开发者,如果在使用产品过程中遇到任何问题,欢迎到 云+社区GitHub 提问或者查询历史问题以及解决方案。

文章来源于腾讯云开发者社区,点击查看原文