腾讯实时音视频(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/
- 6.7及之前的版本:
- 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集成后,文件增量有多大?
- TRTC 各个版本 SDK 的体积增量可参考文档:https://cloud.tencent.com/document/product/647/32689
3. 如何查询 SDK 最新版本号?
- 若您使用自动加载的方法,latest.release 为匹配最新版并进行自动加载,不需要对版本号进行修改。具体集成方法请参见 一分钟集成 SDK。
- 当前 SDK 最新版本号可通过发布日志查看,具体请参见:
- iOS & Android 端,请参见 发布日志(App)。
- Web 端,请参见 发布日志(Web)。
- Electron 端,请参见 发布日志(Electron)。
二、Android SDK
1. TRTC Android端能不能支持64位的arm64-v8a架构?
- TRTC 6.3 版本开始已提供 arm64-v8a 架构 ABI 支持。
2. 在 Android 端怎么实现动态加载 so 库?
- 具体的操作步骤请参考 Android 端实现动态加载 so 库。
三、iOS SDK
1. 在 iOS 端是否支持 Swift 集成?
- 支持,直接按照支持集成三方库的流程集成 SDK 即可,还可以参考 跑通Demo(iOS&Mac)。
2. iOS 端 SDK 与其它三方库冲突报错问题该如何解决?
3. iOS 端 SDK 与其它三方库冲突报错问题该如何解决?
4. TRTC SDK 是否支持 iOS 后台运行?
- 支持,您只需选中当前工程项目,在 Capabilities 下的设置 Background Modes 为 ON,并勾选 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 个房间?
- 可以。Version 7.6 版本 开始支持一个用户进入多个房间了。
五、视频相关接口
1. stopLocalPreviewd() 和 muteLocalVideo() 区别?
- stopLocalPreviewd 是停止本地视频采集,当调用该接口之后自己本地和远端画面就是黑屏;muteLocalVideo 是设置是否向后台发送自己的视频画面,当调用该接口之后其他用户观看的画面变成黑屏,自己本地的预览还是能看到画面。
2. TRTC SDK 怎么设置上行视频码率、分辨率、帧率?
- 可以通过 TRTCCloud 里面的 setVideoEncoderParam() 接口设置 TRTCVideoEncParam 参数中 videoResolution(分辨率)、videoFps(帧率)、videoBitrate(码率)。
3. TRTC SDK 都支持哪些分辨率?
- 建议参考文档配置分辨率达到更合适的画面质量https://cloud.tencent.com/document/product/647/32236。
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
提问或者查询历史问题以及解决方案。
- 云+社区各产品问答页查询及提问:
实时音视频:https://cloud.tencent.com/developer/tag/10373?entry=ask
即时通信:https://cloud.tencent.com/developer/tag/126?entry=ask
移动直播:https://cloud.tencent.com/developer/tag/10374?entry=ask
短视频:https://cloud.tencent.com/developer/tag/10375?entry=ask
超级播放器:https://cloud.tencent.com/developer/tag/10855?entry=ask
互动直播:https://cloud.tencent.com/developer/tag/10379?entry=ask - GitHub 的 issue 页面:
移动直播:https://github.com/tencentyun/MLVBSDK/issues
实时音视频:https://github.com/tencentyun/TRTCSDK/issues
播放器:https://github.com/tencentyun/SuperPlayer_Android/issues、https://github.com/tencentyun/SuperPlayer_iOS/issues
即时通信IM:https://github.com/tencentyun/TIMSDK/issues