この図の通り、登場人物は「メインチャンネル」「サブチャンネル」「視聴者」となります。
システムの仕様によってはサブチャンネルの映像、音声をメインチャンネルが受け取る必要が無い場合もありそうです。
視聴者は音声について1度に受け取るチャンネルを1つになるよう実装をします。
視聴者は初回アクセス時にメインチャンネルの音声のみを受信
// Occurs when a user subscribes to a remote stream.
rtc.client.on("stream-subscribed", function (evt) {
var remoteStream = evt.stream;
var id = remoteStream.getId();
rtc.remoteStreams.push(remoteStream);
addView(id);
if(id==2000){ //サブチャンネルのuidを2000に固定しています
remoteStream.setAudioVolume(0);//サブチャンネルのボリュームを0にします
}
remoteStream.play("remote_video_" + id);
Toast.info('stream-subscribed remote-uid: ' + id);
console.log('stream-subscribed remote-uid: ', id);
})
Switchボタンで音声のみ切り替えを実施します
$("#switch").on("click", function (e) {
console.log("switch")
e.preventDefault();
if(currentAudioID == 1000){
for(var i in rtc.remoteStreams){
if(rtc.remoteStreams[i].getId() == 1000){
rtc.remoteStreams[i].setAudioVolume(0);
}
if(rtc.remoteStreams[i].getId() == 2000){
console.log("switch to 2000")
rtc.remoteStreams[i].setAudioVolume(100);
}
}
currentAudioID = 2000;
}else{
for(var i in rtc.remoteStreams){
if(rtc.remoteStreams[i].getId() == 1000){
console.log("switch to 1000")
rtc.remoteStreams[i].setAudioVolume(100);
}
if(rtc.remoteStreams[i].getId() == 2000){
rtc.remoteStreams[i].setAudioVolume(0);
}
}
currentAudioID = 1000;
}
});