接入了腾讯实时音视频TRTC的SDK,使用中遇到一些问题,比较严重的是在音视频过程中进行本地录屏,获取不到声音导致录屏失败。
1.通道
SDK 目前提供了三种系统音量类型的控制模式,分别为
(1)TRTCCloudDef#TRTCSystemVolumeTypeAuto: “麦上通话,麦下媒体”,即主播上麦时使用通话音量,观众不上麦则使用媒体音量,适合在线直播场景。 如果您在 enterRoom 时选择的场景为 TRTCCloudDef#TRTC_APP_SCENE_LIVE 或 TRTCCloudDef#TRTC_APP_SCENE_VOICE_CHATROOM,SDK 会自动选择该模式。
(2)TRTCCloudDef#TRTCSystemVolumeTypeVOIP: 通话全程使用通话音量,适合多人会议场景。 如果您在 enterRoom 时选择的场景为 TRTCCloudDef#TRTC_APP_SCENE_VIDEOCALL 或 TRTCCloudDef#TRTC_APP_SCENE_AUDIOCALL,SDK 会自动选择该模式。
(3)TRTCCloudDef#TRTCSystemVolumeTypeMedia: 通话全程使用媒体音量,不常用,适合个别有特殊需求(如主播外接声卡)的应用场景。
判断是通话通道还是媒体通道:
音量键关音量,如果可以关到没有声音为媒体通道,如果不能关到没声音则为通话通道。
2.Xlog日志
使用过程中可以有问题或异常可以查看xlog日志,可以发给腾讯的客服去看,xlog日志在手机本地文件的路径
xlog日志:https://cloud.tencent.com/developer/article/1502366
3.麦克风抢占
麦克风抢占可能与手机尝试的底层实现有关,其中一个处理方法是关闭腾讯实时音视频的音频,然后使用其提供的API实时传输自己的音频数据,这样既不会冲突,也可以传输音频数据。
(1)设置tRTCCloud.enableCustomAudioCapture(true)
启用音频自定义采集模式
开启该模式后,SDK 不在运行原有的音频采集流程,只保留编码和发送能力。 您需要用 sendCustomAudioData() 不断地向 SDK 塞入自己采集的音频数据。
参数
enable | 是否启用 true:启用;false:关闭,默认值:false |
(2)不调用tRTCCloud.startLocalAudio();,如果调用了需要注掉。关掉后就没有腾讯实时音视频sdk的音频传输了
(3)通过tRTCCloud.sendCustomAudioData(mTRTCAudioFrame);实时发送音频数据,
private TRTCCloudDef.TRTCAudioFrame mTRTCAudioFrame = new TRTCCloudDef.TRTCAudioFrame();
mTRTCAudioFrame.data = data; //data为你自己采集到的音频数据
mTRTCAudioFrame.sampleRate = 48000; //采样率需要与自己音频的采样率一样,不与其推荐的一样也可以
mTRTCAudioFrame.channel = 1; //1-单声道,2-双声道
mTRTCAudioFrame.timestamp = 0; //时间戳设为0即可
if (trtcCloud != null) {
trtcCloud.sendCustomAudioData(mTRTCAudioFrame);
}
sendCustomAudioData()
向 SDK 投送自己采集的音频数据
TRTCAudioFrame 推荐如下填写方式:
data:音频帧 buffer。音频帧数据必须是 PCM 格式,推荐每帧20ms采样数。【48000采样率、单声道的帧长度:48000 × 0.02s × 1 × 16bit = 15360bit = 1920字节】。
sampleRate:采样率。
channel:频道数量(如果是立体声,数据是交叉的),单声道:1; 双声道:2。
timestamp:如果 timestamp 间隔不均匀,会严重影响音画同步和录制出的 MP4 质量。
参考文档:自定义采集和渲染。
参数
frame 音频帧。目前只支持单声道,仅支持48K采样率。请参考 TRTCAudioFrame
注意
可以设置 frame 中的 timestamp 为 0,相当于让 SDK 自己设置时间戳,但请“均匀”地控制 sendCustomAudioData 的调用间隔,否则会导致声音断断续续。