#audio #webrtc
#Аудио #webrtc
Вопрос:
У меня есть простое приложение для группового чата WebRTC (аудио), основанное на коде в этом репозитории, между несколькими ноутбуками в локальной сети в разных комнатах. На каждом из ноутбуков, подключенных к чату, код автоматически смешивает все остальные аудиопотоки (все за вычетом захваченного потока этого ноутбука, т. Е. Обычный режим работы аудиочата).
На одном из ноутбуков, подключенных к чату (назовем его laptop0
так), я хотел бы иметь возможность выводить различные принятые потоки (в моем случае 3, поскольку всего подключено 4 ноутбука) на столько разных каналов устройства вывода, выбранных через WebRTC, т. Е. Аудио из
laptop1
на выходной канал 1laptop2
на выходной канал 2laptop3
на выходной канал 3
Идея в том, что я подключу вывод, чтобы передать его в DAW, чтобы добавить некоторые эффекты к разным каналам.
Предполагая, что у меня есть выходное аудиоустройство с достаточным количеством каналов, есть ли простой способ сделать это? Фрагмент кода, который, как я предполагаю, находится в регионе, где это может быть реализовано (согласно моему крайне плохому пониманию WebRTC), выглядит следующим образом.
var peer_connection = new RTCPeerConnection(
{"iceServers": ICE_SERVERS},
{"optional": [{"DtlsSrtpKeyAgreement": true}]}
);
peers[peer_id] = peer_connection;
peer_connection.onicecandidate = function(event) {
if (event.candidate) {
signaling_socket.emit('relayICECandidate', {
'peer_id': peer_id,
'ice_candidate': {
'sdpMLineIndex': event.candidate.sdpMLineIndex,
'candidate': event.candidate.candidate
}
});
}
}
peer_connection.onaddstream = function(event) {
console.log("onAddStream", event);
var remote_media = USE_VIDEO ? $("<video>") : $("<audio>");
remote_media.attr("autoplay", "autoplay");
// remote_media.attr('webkit-playsinline', '');
if (MUTE_AUDIO_BY_DEFAULT) {
remote_media.attr("muted", "true");
}
remote_media.attr("controls", "");
peer_media_elements[peer_id] = remote_media;
$('body').append(remote_media);
attachMediaStream(remote_media[0], event.stream);
}
/* Add our local stream */
peer_connection.addStream(local_media_stream);