2016-09-19 2 views
2

WebRTC Native Android에서 문제를 해결하려고합니다. AppRTCDemo를 1-1 호출에서 1-N 호출로 성공적으로 변경했습니다.Android WebRTC - 컨퍼런스 용 오디오 트랙 믹스

  • A가 (나를)
  • 을 B로 (나) 듣기/대화를 나눌 수 C
  • B와 C가 말할 수 또는 청취/대화를 나눌 수 : 현재 나는 다음과 같은 시나리오를 가지고 서로 들으십시오.

는 I (A)는 내가 몇 가지를 혼합 할 필요가 이해 B와 C로 각각 2 PeerConnections을 가지고 수행하는 방법 미디어 스트림 또는 오디오 트랙, 또는 다른 말로 :

  • 믹스 (A는 B) -

것을 수행하는 방법에 대한 포인터를 B로 보내> -> C

  • 믹스 (A, C)에게 전송? 고마워요

  • +0

    왜 A와 B를 섞어서 C로 보내야합니까? B와 C가 직접 연결을 설정하지 않는 이유가 있습니까? – samgak

    +0

    @samgak 의미, B와 C는 서로 직접 연결됩니까? 클라이언트 (A)가 Android 앱이고 B와의 2 피어 연결과 C 연결을 만든 경우 ... 클라이언트에서 제안한대로 B를 C에 직접 연결하는 것이 가능하지 않습니다. – EdGs

    +0

    B와 C는 같은 앱으로 실행됩니까? 그렇지 않다면, 그들은 무엇입니까? – samgak

    답변

    1

    여러 연결에 대해 서로 다른 로컬 스트림을 만들려고하면 다른 로컬 스트림을 시도 할 때마다 동일한 로컬 스트림을 여러 당사자 (파티 B 및 C)에 보내고 있다고 생각합니다. 가능하지 않은 마이크와 카메라에 다시 액세스 할 수 있습니다 (저는 믿습니다). 이 같은

    당신은 작성해야 localstream 뭔가 :

    stream = sessionFactory.createLocalMediaStream(LOCAL_MEDIA_ID); 
    

    파티-C을 위해 파티-B의 스트림을 전송하는 당신은이 작업을 수행 할 수 있습니다

    • 사이의 P2P 연결을 만들 step1-- party-A와 party-B
    • step2-- party-A와 party-C 사이의 P2P 연결을 만듭니다.
    • step3 - 당신이 호출하는 localstream을 추가 할 때 someth 당신이 remoteStreamB (당신은 B에서 점점 원격 스트림)를 추가 할 수 있습니다 (C와 피어 연결) myStream 대신에이

      peerconnection2.addStream(myStream) 
      

    처럼 보내고.

    • 는 당신이 파티에 peerconnection1 있다고 가정하자 : 이것은 당신이 파티 B를 위해 파티-C에서 원격 스트림을 전송하기 위해 C.

      함께 두 번째의 PeerConnection에서 localstream로 B에서 점점 스트림을 추가합니다 -비. C에서 원격 스트림을 로컬 스트림으로 추가하려면 먼저 현재 트랙을 제거한 다음 새 트랙을 추가해야합니다.

    • 이를 위해 당신은 당신이 이제 스트림 remotestreamC에서 나오는 오디오 및 비디오 트랙을 낳게 될 것이다 B로 보내는 localstream의 내용을 변경합니다 이런 식으로이

      AudioTrack t1 = mystream.audioTracks.get(0); 
      VideoTrack v1 = myStream.videoTracks.get(0); 
      if(myStream.removeTrack(t1)){ 
      if(myStream.removeTrack(v1)){ 
          t1 = remoteStreamC.audioTracks.get(0); 
          v1 = remoteStreamC.videoTracks.get(0); 
      
          myStream.addTrack(t1); 
          myStream.addTrack(v1); 
      } 
      } 
      

      과 같은 작업을 수행 할 수 있습니다 .

    그러나이 프로세스 오류가 당신이 누군가가 연결을 중단 할 때 때문에 오류 처리를 사용해야합니다 무료로 만들기 (중 B 또는 C) 당신이 경우 당신이해야합니다 .... 널 트랙을 받고있을 것입니다 즉시 다른 사람에게 hangup 요청을 보냅니다.

    +0

    곧 귀하의 제안을 구현하려고합니다. 결과를 알려 드리겠습니다. 고맙습니다!! – EdGs

    +0

    당신이 옳습니다. 한 번만 localStream을 만들고 있습니다. 그리고 첫 번째 예인 C 파티 용 B 파티에서 C 파티 용 피어 연결 만들기에서 B 파티 스트림을 localMedia로 C 파티에 전달합니다. 나는 두 번째 예제 C 파티를 B 파티에 성공시키지 않으려 고 노력했다. B 진영에는 이미 localStream이 연결되어 있습니다. 내가 제안한대로 트랙을 대체하면 B-Party에서 오디오가 손실됩니다. B-PeerConnection.removeStream (localStream)을 호출 한 다음 B-PeerConnection.addStream (modifiedStream)을 호출해야합니까? 즉, B- 파티 스트림을 어떻게 "대체"합니까? 그건 새로운 제안을 유발할 것입니다, 맞습니까? – EdGs

    +0

    좋아, 나 한테 필요한대로 대답했다. OnRenegotiationNeeded가 발생했지만 PeerConnection에서 MediaStream을 추가하거나 제거 할 때 제공되는 오퍼가 없었습니다. 그래서 저는 그것을 "createOffer"에 강제합니다. 이상한 점은, "아무 것도 할 필요가 없으며, AppRTC가 미리 동의 한 신호/협상 프로토콜을 따른다"는 코멘트 이후로 동작 할 것이라고 생각하기 때문입니다. 메서드 본문에 있습니다. 제안한 것을 구현하는 3 방향 호출을 만든 후 피어의 오디오 품질이 크게 저하됩니다. 어떤 아이디어? 감사합니다. – EdGs

    관련 문제