0

我目前正在使用Client.stopMediaSessions(). 这个对吗?根据我在文档中阅读的内容以及在示例中看到的内容,这似乎是正确的方法。

这应该停止本地和远程流,对吗?

调用时会触发什么事件stopMediaSessions()?从我的日志来看,似乎没有mediaStream:end调用处理程序。应该是吗?还是enterState:closed唯一的事件被触发?还是两个都被解雇了?

我的问题与<video>从 DOM 中删除元素有关——无论是远程元素还是本地元素。在您的示例MediaStreamAPI Reference,该addStream()函数同时处理mediaStream:startmediaStream:end事件。但是,当使用它来添加本地和远程流时,您不能指望处理程序mediaElement中的变量,mediaStream:end因为没有任何东西将 var 与流联系起来,所以您不知道要对哪个元素执行操作removeChild()

无论如何,这没什么大不了的。我只是好奇stopMediaSessions()调用 a 时的事件顺序是什么;从中我可以确保正确的<video>元素被删除。

但总的来说,我确实想知道在一组参与者之间挂断/终止视频通话的正确方法是什么。

非常感谢!

4

1 回答 1

1

client.stopMediaSessions()将停止所有 vline.MediaSessions给定的vline.Client,所以是的,它会“挂断”一个电话。

要“挂断”与特定用户 ( vline.Person) 的音频/视频会话,您可以使用Person.stopMedia().

Avline.MediaSession可以与本地和远程vline.MediaStreams关联,因此通过停止 avline.MediaSession您将隐式停止vline.MediaStreams与它关联的所有内容。

由于client.stopMediaSessions()正在停止所有vline.MediaSession's(因此是vline.MediaStream's),您应该同时获得一个mediaStream:end事件(来自vline.MediaStream)和一个enterState:closed事件(来自vline.MediaSession)。

对于添加和删除<video>元素并跟踪它们,我建议做一些类似于vLine shell 示例所做的事情。它使用唯一的 MediaStream ID 来命名div<video>元素放入的位置:

mediaSession.on('mediaSession:addLocalStream mediaSession:addRemoteStream', function(event) {
  var stream = event.stream;

  // guard against adding a local video stream twice if it is attached to two media sessions
  if ($('#' + stream.getId()).length) {
    return;
  }

  $('#video-wrapper').append(elem);
 });

// add event handler for remove stream events
mediaSession.on('mediaSession:removeLocalStream mediaSession:removeRemoteStream', function(event) {
  $('#' + event.stream.getId()).remove();
});
于 2013-08-05T20:54:34.390 回答