Я считаю, что вы отправляете один и тот же локальный поток обеим сторонам (party-B и party-C) в multiconnection, потому что, если вы попытаетесь создать разные локальные потоки для разных подключений, это вызовет ошибку, поскольку она попытается снова получить доступ к микрофону и фотоаппарату, что невозможно (я считаю).
Вы должны создать localstream что-то вроде этого:
stream = sessionFactory.createLocalMediaStream(LOCAL_MEDIA_ID);
Для отправки потока Party-B Стороне-C вы можете сделать это:
- step1-- создать соединение между p2p party-A и party-B
- step2-- создать p2p-соединение между party-A и party-C
step3-- при добавлении локального потока, который вы вызываете mething как этот
peerconnection2.addStream(myStream)
На месте myStream (для взаимного соединения с C), вы можете добавить в remoteStreamB (удаленный поток, который вы получаете от B). Это добавит поток, который вы получаете от B, как localstream во второй PeerConnection, который с С.
Для отправки удаленного потока от Party-C Стороне-B:
- Предположим, вы peerconnection1 с партией -B. Чтобы добавить удаленный поток из C в локальный поток, вам сначала нужно удалить текущие треки, а затем добавить новые треки.
для этого вы можете сделать что-то вроде этого
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);
}
}
Этим способом вы будете изменять содержание localstream, что вы отправляете в B. Теперь, когда поток будет иметь аудио и видео треков, поступающих от remotestreamC ,
Но, чтобы сделать эту ошибку процесс освобождения вы должны использовать обработку ошибок, потому что, когда кто-то разрывает соединение (или B или C), вы будете получать нулевые дорожки .... В этом случае вам придется немедленно отправьте запрос на зависание другой стороне.
Зачем вам нужно смешивать A и B и отправлять на C? Есть ли какая-либо причина для того, чтобы B и C не устанавливали соединение напрямую? – samgak
@samgak Значение, B и C соединяются напрямую друг с другом? Если клиент (A) является Android-приложением и создал 2 одноранговых соединения с B, а другой - с C ... Я не понимаю, как можно было бы напрямую подключить B к C, как вы сказали, от клиента? – EdGs
Являются ли B и C тем же приложением? Если нет, то каковы они? – samgak