【发布时间】:2021-08-05 09:11:59
【问题描述】:
来自WebRTC浏览器版本的MediaStreamTrack具有onended处理程序,允许在轨道结束时接收通知,即(from MDN docs):
当轨道出于任何原因不再向流提供数据时会发生此事件,包括到达媒体输入的末尾、用户撤销所需的权限、源设备被移除或远程对等端结束连接.
有没有办法在 Android 版本的 WebRTC 中做同样的事情?
【问题讨论】:
来自WebRTC浏览器版本的MediaStreamTrack具有onended处理程序,允许在轨道结束时接收通知,即(from MDN docs):
当轨道出于任何原因不再向流提供数据时会发生此事件,包括到达媒体输入的末尾、用户撤销所需的权限、源设备被移除或远程对等端结束连接.
有没有办法在 Android 版本的 WebRTC 中做同样的事情?
【问题讨论】:
最近,我遇到了这个问题。 我尝试检测轨道的状态,我假设,如果它已结束,则它已被删除。 轨道.State() 但无论远程轨道是否被移除,状态始终为 Live。
然后我检查 RtpTransceiver 的 getCurrentDirection。有用 RtpTransceiver.RtpTransceiverDirection 方向 = 收发器.getCurrentDirection() 当删除轨道被删除时,方向可能设置为 INACTIVE 或 SEND_ONLY。 这意味着远程侧轨已被移除,不再发送数据。
在重新协商 webrtc 后总是检查这个,然后处理你的东西(删除轨道后)。
List<RtpTransceiver> list = _peerConnection.getTransceivers();
Iterator var1 = list.iterator();
while(var1.hasNext()) {
RtpTransceiver transceiver = (RtpTransceiver)var1.next();
RtpTransceiver.RtpTransceiverDirection direction = transceiver.getCurrentDirection();
if(direction == RtpTransceiver.RtpTransceiverDirection.INACTIVE) {
// remote track removed, do your stuff
}
}
【讨论】: