【问题标题】:kurento android client library: how to get video stream from sdp offer?kurento android 客户端库:如何从 sdp 报价获取视频流?
【发布时间】:2017-09-28 12:45:30
【问题描述】:

在kurento android中,加入房间进行群组视频通话后,每当有人连接并开始流式传输时,该功能

onRemoteStreamAdded(MediaStream mediaStream, NBMPeerConnection nbmPeerConnection)

被调用,我可以简单地使用 videorenderer 附加媒体流并且它可以工作。 但是,当我与现有同行一起发布他们的视频时,没有媒体流出现,但会生成 sdp 报价。如何使用 sdp 优惠获取房间内所有用户的视频流?

【问题讨论】:

    标签: android webrtc kurento


    【解决方案1】:

    @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);
            }
        } 
    }
    

    【讨论】:

    • 您能解释一下为什么要添加 else 块吗?我会试试这个,如果它有效,我会打勾作为答案。另外,这个函数是什么“nbmWebRTCPeer.processAnswer(sd, connectionId);”究竟是做什么的?谢谢。
    • 这是我的逻辑,你可以随意开发 nbmWebRTCPeer.processAnswer(sd, connectionId);将为 connectionId 生成报价。您必须根据您在 onIceCandidate 中发送的 requestId 处理请求。
    【解决方案2】:

    您好,当有人离开群组时,首先您需要关闭连接

    nbmWebRTCPeer.closeConnection("username");
    

    您可以使用此方法进行管理:

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

    【讨论】:

    • 这不是我问的,我正在尝试将该应用程序用作群组视频聊天应用程序,并且我创建了多个渲染器视图,并且它工作正常,只要将新人添加到房间,因为我在这个功能onRemoteStreamAdded(MediaStream mediaStream, NBMPeerConnection nbmPeerConnection) 中获得了 mediaStream,但是当我加入一个有现有用户的房间时,我无法找到所有现有用户的 mediaStreams....所以当我连接到房间时,即使有5个人,我只能看到1个人。
    • 你的意思是说,1)房间里有5个成员。 2)当第6个人进入房间时,他/她无法接收其他5名成员的媒体流。 3)第 6 个人来自 5 个断开连接然后连接到房间的成员。 4)或者第6个成员是新加入的成员。
    • 当第 6 个人进入房间时,他/她无法接收其他 5 名成员的媒体流。
    • 这意味着当第5个成员进入房间时,他/她无法接收其他4个成员的媒体流。根据你的最后评论。我认为您的第 6 个人可能是 1 到 5 个成员之一。您的第 6 个人正在断开通话并尝试再次加入。
    • 不,伙计,所有 6 台都是我使用 6 台不同的计算机测试应用程序,没有人断开任何连接,我只是问你如何编写函数以从现有房间获取所有用户的所有媒体流,你看一下github中的nubo-test android仓库中的代码你就明白了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-20
    • 1970-01-01
    • 2016-11-11
    • 1970-01-01
    相关资源
    最近更新 更多