2017-09-28 62 views
3

在kurento机器人,加入房间群组视频通话,每当有人连接并开始分流,功能kurento android客户端库:如何从sdp提供视频流?

onRemoteStreamAdded(MediaStream mediaStream, NBMPeerConnection nbmPeerConnection)

被调用,我可以简单地附上mediastream与videorenderer和它的作品之后。 但是,当我加入与现有同行发布其视频的房间时,不会显示任何媒体流,但会生成sdp优惠。如何使用sdp优惠从房间内的所有用户获取视频流?

回答

-1

您好,首先您需要的时候有人离开使用

nbmWebRTCPeer.closeConnection("username"); 

你可以在这个方法管理组关闭连接:

public void onIceStatusChanged(PeerConnection.IceConnectionState  iceConnectionState, NBMPeerConnection nbmPeerConnection) { 
if (iceConnectionState.name().equalsIgnoreCase("CLOSED")) 
    { 
    nbmWebRTCPeer.closeConnection(nbmPeerConnection.getConnectionId()); 
    } 

} 
+0

那不是我问的,我想使用的应用程序作为一个群组视频聊天应用程序,我创建了多个渲染视图,其做工精细,只要新的人被添加到房间,因为我在这个函数'''onRemoteStreamAdded(MediaStream mediaStream,NBMPeerConnection nbmPeerConnection)''''获取meadiaStream'''但是当我加入有现有用户的房间时,我无法找到mediaStreams所有现有的用户....所以当我连接到房间,即使有5人,我只能看到1人。 –

+0

你的意思是说, 1)房间里有5个成员。 2)第6人进入房间时,他/她无法接收其他5位成员的媒体流。 3)第6人是从5人断开,然后连接到房间。 4)或第6名成员是新加入的成员。 –

+0

当第6个人进入房间时,他/她无法接收其他5位成员的媒体流。 –

0

@aditya我对M2M流工作。 我做这样的: -

@Override 
public void onRoomResponse(RoomResponse response) { 
    int requestId = response.getId(); 
    boolean check = false; 
    for (Map.Entry<Integer, String> entry : videoRequestUserMapping.entrySet()) { 

     if (entry.getKey() == requestId) { 
      check = true; 
     } 
    } 
    if (check || (requestId == publishVideoRequestId)) { 

     SessionDescription sd = new SessionDescription(SessionDescription.Type.ANSWER, 
       response.getValue("sdpAnswer").get(0)); 

     if (callState == CallState.PUBLISHING) { 

      callState = CallState.PUBLISHED; 
      nbmWebRTCPeer.processAnswer(sd, "local"); 
      mHandler.postDelayed(offerWhenReady, 2000); 

     } else if (callState == CallState.WAITING_REMOTE_USER) { 
      callState = CallState.RECEIVING_REMOTE_USER; 
      String connectionId = videoRequestUserMapping.get(requestId); 
      Log.e("ConnectionId", ":" + connectionId); 
      nbmWebRTCPeer.processAnswer(sd, connectionId); 
     } else { 

      callState = CallState.RECEIVING_REMOTE_USER; 
      String connectionId = videoRequestUserMapping.get(requestId); 

      nbmWebRTCPeer.processAnswer(sd, connectionId); 
     } 
    } 
} 
+0

你能解释为什么你添加了其他块吗?我会试试这个,如果它有效的话,我会把它作为答案。另外,这个函数是什么“nbmWebRTCPeer.processAnswer(sd,connectionId);”做到了吗?谢谢。 –

+0

这是我的逻辑,你可以开发你想要的 nbmWebRTCPeer.processAnswer(sd,connectionId);将生成connectionId的报价。您必须根据 requestId处理您在IceCandidate中发送的请求。 –