无法使用 Agora.io 和 Unity Standalone 加入频道(警告代码:104)

Posted

技术标签:

【中文标题】无法使用 Agora.io 和 Unity Standalone 加入频道(警告代码:104)【英文标题】:Impossible to join the channel with Agora.io and Unity Standalone (Warning code: 104) 【发布时间】:2021-03-26 13:25:04 【问题描述】:

自从我尝试以任何方式连接 Unity 中的 Agora.io SDK 以来已经有几天了。 我是 Agora 的新手,刚开始学习如何使用它,我基本上尝试了所有教程来学习如何使用 SDK,但我无法让它以任何方式工作。

这是我做的步骤:

    创建了一个新的 Agora 帐户 创建了新的 appID(尝试了使用和不使用令牌) 统一创建了一个新的空项目 从asset store the SDK导入 设置 appID 以及是否询问令牌(取决于项目是空项目还是 GitHub 上的 example project) 尝试连接/加入频道 得到如下错误: 警告代码:104 消息:查找通道超时(服务器无响应)

这些是我遵循的教程:

https://www.youtube.com/watch?v=uxIQOZr6RiU https://www.agora.io/en/blog/agora-video-sdk-for-unity-quick-start-programming-guide/ https://docs.agora.io/en/Video/start_call_unity?platform=Unity https://docs.agora.io/en/Video/run_demo_video_call_unity?platform=Unity https://medium.com/agora-io/how-to-create-a-video-chat-app-in-unity-26780b479a78 https://www.agora.io/en/blog/how-to-embed-group-video-chat-in-your-unity-games/?utm_source=twitter&utm_medium=social&utm_campaign=embed-group-videochat-into-unity

这真是令人沮丧,我真的不知道我还能做什么。另外,我尝试在我的 PC 上打开 firewall ports 或禁用防病毒软件,但没有成功。 (在我使用 Mirror 的另一个项目中使用相同版本的 Unity 并且它可以工作,没有任何东西阻止它)

如果有用的话,这里是我遵循的tutorial 代码:

using agora_gaming_rtc;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

namespace Agora_tutorial

    public class AgoraChat : MonoBehaviour
    
        public string AppID;
        public string ChannelName;

    VideoSurface myView;
    VideoSurface remoteView;
    IRtcEngine mRtcEngine;

    void Awake()
    
        SetupUI();
    

    void Start()
    
        SetupAgora();
    

    void SetupUI()
    
        GameObject go = GameObject.Find("MyView");
        myView = go.AddComponent<VideoSurface>();

        go = GameObject.Find("JoinButton");
        if (go != null)
        
            Button objectButton = go.GetComponent<Button>();

            objectButton.onClick.AddListener(Join);
        

        go = GameObject.Find("LeaveButton");
        if (go != null)
        
            Button objectButton = go.GetComponent<Button>();

            objectButton.onClick.AddListener(Leave);
        
    

    void SetupAgora()
    
        mRtcEngine = IRtcEngine.GetEngine(AppID);

        // Callbacks for the local user
        mRtcEngine.OnJoinChannelSuccess = OnJoinChannelSuccessHandler;      // When the local user joins the channel successfully
        mRtcEngine.OnLeaveChannel = OnLeaveChannelHandler;                  // When the local user leaves the channel

        // Callbacks for the remote users
        mRtcEngine.OnUserJoined = OnUserJoined;                             // When the remote user joins the channel
        mRtcEngine.OnUserOffline = OnUserOffline;                           // When the remote user leaves the channel
    

    public void Join()
    
        Debug.Log($"Joining");

        mRtcEngine.EnableVideo();
        mRtcEngine.EnableVideoObserver();
        myView.SetEnable(true);
        mRtcEngine.JoinChannel(ChannelName, "", 0);
    

    public void Leave()
    
        Debug.Log($"Leaving");

        mRtcEngine.LeaveChannel();
        mRtcEngine.DisableVideo();
        mRtcEngine.DisableVideoObserver();
    

    private void OnJoinChannelSuccessHandler(string channelName, uint uid, int elapsed)
    
        // can add other logics here, for now just print to the log
        Debug.LogFormat("Joined channel 0 successful, my uid = 1", channelName, uid);
    

    void OnLeaveChannelHandler(RtcStats stats)
    
        // Turn off the rendering, otherwise, the last frame of the camera video will stay on the RawImage.
        myView.SetEnable(false);
        if (remoteView != null)
        
            remoteView.SetEnable(false);
        
    

    void OnUserJoined(uint uid, int elapsed)
    
        GameObject go = GameObject.Find("RemoteView");

        if (remoteView == null)
        
            remoteView = go.AddComponent<VideoSurface>();
        

        remoteView.SetForUser(uid);
        remoteView.SetEnable(true);
        remoteView.SetVideoSurfaceType(AgoraVideoSurfaceType.RawImage);
        remoteView.SetGameFps(30);
    

    void OnUserOffline(uint uid, USER_OFFLINE_REASON reason)
    
        remoteView.SetEnable(false);
    

    void OnApplicationQuit()
    
        if (mRtcEngine != null)
        
            IRtcEngine.Destroy();
            mRtcEngine = null;
        
    


但是当我按下加入按钮时,只有一个按钮调用(加入方法)并且没有调用回调 OnJoinChannelSuccessHandler。

【问题讨论】:

【参考方案1】:

感谢您与我们联系。 首先,让我们运行基本的演示。

    创建一个新的 Unity 项目 downloading the Agora Video SDK,并从我们的基础演示项目开始。 将 SDK 导入 Unity,然后导航到 Assets > AgoraEngine > Demo > SceneHome。您拥有开始所需的一切,只需将您的 AppID 添加到 GameController 对象 > TestHome 脚本。 选择 File > Build Settings... 并将 SceneHome(0) 和 SceneHelloVideo(1) 添加到 Scenes In Build 部分(这很可能是出错的地方)。

一旦你开始工作: 试试看这个Github Repo。它将带您进入可用于开始的众多项目。

您很快就会成为 Agora 专业人士!

【讨论】:

感谢您的回答!我已经尝试了教程演示和 repo,但由于某些原因,两者都不起作用。如果我在 Unity 中运行它,我会收到以下警告:Warning code:104 msg:lookup channel timed out (server no response) UnityEngine.Debug:LogWarningFormat(String, Object[]) c:b__3_0(Int32, String ) (at Assets/AgoraEngine/Demo/TestHelloUnityVideo.cs:52) agora_gaming_rtc.c__DisplayClass261_0:b__0() (at Assets/AgoraEngine/Scripts/AgoraGamingSDK/AgoraGamingRtcEngine.cs:3905) agora_gaming_rtc.AgoraCallbackQueue:Update() (在 Assets/AgoraEngine/Scripts/Agora... 嘿马修,我在你的推特上给你发了私信。让我们离线解决这个问题并在此处跟进解决方案。

以上是关于无法使用 Agora.io 和 Unity Standalone 加入频道(警告代码:104)的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 agora.io Unity SDK 检索频道用户列表

尝试将 Agora IO 与 Unity WebGL 集成。构建演示场景时出错

Unity3d 中创建实时视频聊天

Unity3d 中创建实时视频聊天

Unity3d 中创建实时视频聊天

Agora 视频通话 Unity3d 的最大参与者数量