什么是分享系统声音?举个例子,如果你常关注游戏直播,那这种直播方式你一定不陌生,直播中不仅可以看到主播当前屏幕所展示的画面,也能听到主播的声音和游戏的声音,简单分析一下功能点:
1、看到主播当前屏幕所展示的画面可使用屏幕分享实现,这里腾讯实时音视频(简称TRTC,后文统一使用简称)SDK已支持;
2、主播的声音是通过主播那边麦克风采集到后上行
3、听到游戏的声音,这里我们要介绍的就是利用TRTC SDK实现将游戏的声音分享到直播间里使其他用户听到
为了更直观些也可看看下面这张腾讯会议的截图,被红框框起来的部分就是分享系统声音
下面介绍TRTC SDK各个端怎么实现分享系统声音:
iOS
首先实现iOS屏幕分享可参考官网文档:https://cloud.tencent.com/document/product/647/45750
这里iOS 跨应用分享使用的是苹果提供的用于 iOS 系统进行屏幕录制的框架ReplayKit,这里我们来看一下ReplayKit 的数据回调接口(SampleHandler.m中):
代码语言:txt复制- (void)processSampleBuffer:(CMSampleBufferRef)sampleBuffer withType:(RPSampleBufferType)sampleBufferType {
switch (sampleBufferType) {
case RPSampleBufferTypeVideo:
[[TXReplayKitExt sharedInstance] sendVideoSampleBuffer:sampleBuffer];
break;
case RPSampleBufferTypeAudioApp:
// Handle audio sample buffer for app audio
break;
case RPSampleBufferTypeAudioMic:
// Handle audio sample buffer for mic audio
break;
default:
break;
}
}
从枚举 sampleBufferType 上可以看出刚好能符合我们对媒体流的需求,有视频流、音频流,音频流又分为麦克风录制进来的音频流(AudioMic),与当前响应的应用播放的音频流(AudioApp)。如果在屏幕分享过程中分享系统声音可直接如下调用
代码语言:txt复制- (void)processSampleBuffer:(CMSampleBufferRef)sampleBuffer withType:(RPSampleBufferType)sampleBufferType {
//媒体数据(音视频)发送方法
[[TXReplayKitExt sharedInstance] sendSampleBuffer:sampleBuffer withType:sampleBufferType];
}
需要8.6版本以上,升级版本时请将从官网下载下来的SDK文件里面的TRTC SDK和ReplayKitExt SDK一起替换,否则在屏幕分享时会报“版本不一致”问题
MAC
TRTC Mac 端分享系统声音需要安装虚拟声卡插件TRTCAudioPlugin.driver,集成以及调用可参考官网文档https://cloud.tencent.com/document/product/647/52989
需注意的是Mac端分享系统声音需8.4版本以上,9.4版本增加对系统声音采集 startSystemAudioLoopback 的双声道支持。
Windows
Windows端算是最简单的了,直接调startSystemAudioLoopback这个接口
Web
支持屏幕分享以及系统声音分享
实现的话看接口文档介绍https://web.sdk.zijiebao.com/trtc/webrtc/doc/zh-cn/TRTC.html#createStream
安卓
更新一下,安卓也支持分享系统声音了https://cloud.tencent.com/document/product/647/79928
小程序
不支持屏幕分享以及系统声音分享......
还有一点需要注意的是iOS、Mac、Windows、分享系统声音的流与麦克风采集的音频走的同一路流,就是说上行时需要调startLocalAudio,调muteLocalAudio会静音,调stopLocalAudio会停止采集上行,使用时要注意哦。