开发人员与远程会话中基于 WebRTC 的通话应用的多媒体重定向集成
多媒体重定向将远程会话中的视频播放和通话从 Azure 虚拟桌面、Windows 365 云电脑或 Microsoft Dev Box 重定向到本地设备,以便更快地处理和呈现。
通话重定向可优化基于 WebRTC 的通话应用程序的音频呼叫,减少延迟并提高通话质量。 连接发生在本地设备和电话应用服务器之间,系统会将其中的 WebRTC 通话从远程会话卸载到本地设备。 建立连接后,通话质量将依赖于网页或应用提供商,就像使用非重定向呼叫一样。
通话重定向可与大多数基于 WebRTC 的通话应用程序配合使用,无需修改。 但是,可能存在不支持的方案,或者你可能想要在远程会话中提供不同的体验。
本文提供有关受支持的 API 接口和实例方法的信息,并介绍了可与导航器界面的 mediaDevices
属性一起使用的 JavaScript 代码片段。
导航器界面是媒体捕获和流 API 的一部分,用于将网站与通话重定向集成。 这些 API 与 WebRTC API 一起,为基于 WebRTC 的通话应用程序提供流式传输音频和视频数据的支持。 多媒体重定向取代了 API 中的 mediaDevices
对象的实现,以检测通话重定向、处理断开连接和重新连接事件以及收集诊断信息。
提示
如果要测试与多媒体重定向的集成,可以启用通话重定向,以便适用于所有网站。 有关详细信息,请参阅为所有站点启用通话重定向以进行测试。
支持的 API 接口和实例方法
通话重定向旨在通过将通话从远程会话重定向到本地设备的实现无缝地取代标准 WebRTC 的使用。
以下是媒体捕获和流 API 以及 WebRTC API 的通话重定向所支持的接口和实例方法的列表:
AnalyserNode
AudioContext
HTMLAudioElement
MediaDevices
MediaStream
MediaStreamAudioDestinationNode
MediaStreamAudioSourceNode
MediaStreamTrack
RTCDataChannel
RTCPeerConnection
RTCRtpReceiver
RTCRtpSender
RTCRtpTransceiver
已知限制
通话重定向具有以下 API 限制:
目前仅支持有限数量的
WebAudio
节点。HTMLAudioElement
上的setSinkId
适用于 WebRTCsrcObject
轨道,但是任何本地播放(例如铃声)始终在远程会话的默认音频输出上播放。正常情况下,部分 API 在会同步返回,但在与通话重定向一起使用时必须使用代理,因此可能无法立即获得对象的状态。
检测通话重定向
若要检测通话重定向是否处于活动状态,可以检查 MediaDevices
对象的 isCallRedirectionEnabled
属性。 如果此属性为 true
,则通话重定向处于活动状态。 如果此属性为 undefined
或 false
,则通话重定向未处于活动状态。
window.navigator.mediaDevices['isCallRedirectionEnabled'] = true;
检测与远程会话的连接
如果用户在网页上使用通话重定向,当他们断开连接并重新连接到远程会话时,支持对象的本地 WebRTC 实例不再可用。 通常,如果用户刷新页面,他们能够再次进行通话。
网页可以通过拆除并重新创建所有 WebRTC 对象、音频或视频元素以及 MediaStream
或 MediaStreamTrack
接口来检测和处理这些断开连接和重新连接事件。 此方法无需刷新网页。
若要获取这些事件的通知,请在 MediaDevices
对象上注册 rdpClientConnectionStateChanged
事件,如以下示例所示。 此事件包含新状态,可以是 connected
或 disconnected
。
navigator.mediaDevices.addEventListener('rdpClientConnectionStateChanged', () =>
console.log("state change: " + event.detail.state);
);
通话重定向诊断
以下示例列出 MediaDevices
对象上公开的属性。 这些属性会提供有关正在使用的通话重定向版本和会话标识符的具体诊断信息。 向 Microsoft 报告问题时,此信息非常有用,建议将其作为自己的遥测或诊断数据的一部分进行收集。
window.navigator.mediaDevices['mmrClientVersion'];
window.navigator.mediaDevices['mmrHostVersion'];
window.navigator.mediaDevices['mmrExtensionVersion'];
window.navigator.mediaDevices['activityId'];
window.navigator.mediaDevices['connectionId'];
下面是每个属性代表的内容:
mmrClientVersion:本地计算机上文件
MsMmrDVCPlugin.dll
的版本,此文件是 Windows 应用程序和远程桌面应用程序的一部分。mmrHostVersion:在会话主机、云电脑或开发箱中安装的文件
MsMMRHost.exe
的版本。mmrExtensionVersion:在浏览器中运行的 Microsoft 多媒体重定向扩展的版本。
activityId:Microsoft 用于将遥测数据关联到特定会话并映射到当前网页多媒体重定向的唯一标识符。
connectionId:Microsoft 用来将遥测与特定会话关联起来的唯一标识符,并且与本地设备与远程会话之间的给定连接相关。
在浏览器扩展的详细信息中,最终用户可以使用所有这些信息,但此示例提供了一种用于收集的编程方式。
通话重定向日志
默认情况下,多媒体重定向不会记录到控制台。 浏览器扩展有一个按钮供用户收集日志。 以下示例演示如何以编程方式启用控制台日志。 如果正在集成或捕获需要比浏览器扩展界面提供的选项更长的运行日志的问题,可能需要以编程方式启用控制台日志。
window.navigator.mediaDevices['mmrConsoleLoggingEnabled'] = true;
你可能还需要以编程方式收集多媒体重定向日志,以帮助调查。 还可以通过注册文档上的 mmrExtensionLog
事件来获取网页的所有日志。
事件对象在“详情”下有两个属性:
级别:表示条目的跟踪类型,并允许筛选特定事件。 级别为下列值之一:
- info
- verbose
- warning
- error
消息:基于文本的跟踪消息。
以下示例显示如何注册 mmrExtensionLog
事件:
document.addEventListener('mmrExtensionLog', () =>
console.log("MMR event, level:" + event.detail.level + " : " + event.detail.message);
);
相关内容
有关详细信息,请参阅远程会话中视频播放和通话的多媒体重定向。