0

我已经在我的一个站点中使用 Agora Javascript SDK 4 实现了音频通话功能,并面临本地用户语音无法流式传输到远程用户的问题,当我使用浏览器控制台禁用和启用麦克风时,它可以工作,我不知道为什么这是我使用的 4.6.3 及以下 CDN 的代码。

内容分发网络:

<script src="https://download.agora.io/sdk/release/AgoraRTC_N-4.6.3.js"></script>

var rtc = {
    client: null,
    localAudioTrack: null,
};
let searchParams = new URLSearchParams(window.location.search)
let channel = searchParams.get('cid')
var options = {
    appId: "<appId>",
    channel: channel,
    token: null,
};

async function startBasicCall() {
    rtc.client = AgoraRTC.createClient({ mode: "rtc", codec: "vp8" });
    const uid = await rtc.client.join(options.appId, options.channel, options.token, null);
    rtc.localAudioTrack = await AgoraRTC.createMicrophoneAudioTrack();
    rtc.localAudioTrack.setEnabled(true);
    await rtc.client.publish([rtc.localAudioTrack]);
    rtc.client.on("user-published", async (user, mediaType) => {
        await rtc.client.subscribe(user, mediaType);
        if (mediaType === "audio") {
            const remoteAudioTrack = user.audioTrack;
            remoteAudioTrack.play();
        }
    });
    rtc.client.on("user-unpublished", user => {
        const playerContainer = document.getElementById(user.uid);
        playerContainer.remove();
    }); 
}

async function leaveCall() {
    rtc.localAudioTrack.close();
    await rtc.client.leave();
}

if(channel != "" && channel != null){
    startBasicCall();
}

我有一个将从 URL 收集的动态频道名称。我有 2 个用户用户 A:呼叫用户 B 用户 B:B 能够听到 A 的声音,但 B 用户的声音没有流式传输到 A,所以 A 什么也听不到

但是当我在用户 A 的浏览器控制台上运行以下代码时,两个用户都可以听到对方的声音 rtc.localAudioTrack.setEnabled(false); //这是为了静音 rtc.localAudioTrack.setEnabled(true); // 这是取消静音

仅供参考:我在两端都使用了相同的代码。

4

1 回答 1

0

我认为问题在于您在通道加入后附加了事件处理程序。您应该在调用 join 方法之前执行此操作。

于 2021-12-02T15:03:50.267 回答