云服务器上搭建kurento而webrtc不通问题

云服务器上搭建kurento而webrtc不通问题

可能有朋友也遇到在局域网上搭建kunrento是能正常视频通讯的,但在阿里云上搭建kurento就每次webrtc视频通讯都失败,云服务器的端口都打开了还是不行,开始怀疑是不是要搭建STUN和TURN服务器,捣鼓来捣鼓去还是解决不了。
这这跟大家提醒一点,客户端能直接通过网络访问到服务器(没有经过映射 打洞等技术)都不需要STUN/TURN。

If Kurento Media Server, its Application Server, or any of the clients
are located behind a NAT, you need to use a STUN or a TURN server in
order to achieve NAT traversal.

接下来要说webrtc的技术了,建议先具有一定webrtc的基础知识。

webrtc技术需要用信令服务进行媒体信息通信,对kurento来说kurento-tutorial-java里面的子项目WebSocket就是信令服务KMS与浏览器互相交换信息。
webrct信令通讯流程分为

  1. 浏览器向服务器offer自己的SDP对象,服务器对应answer回复SDP对象,SDP对象有音频Channel、视频Channel等信息
  2. 浏览器和服务器相互发送自己的iceCandidate(集成自己了IP地址信息本地IP地址、公网IP地址、Relay服务端分配的地址等),直到双方都检测到对方发来的iceCandidate可用(或超时)就停止发送开始webrtc通讯(或webrtc通讯失败)。

回归问题

而阿里云上搭建服务器正是在这个环节出了问题,对自己的阿里云进行 ifconfig 看看拿到的ip是不是公网ip,应该不是吧!!?kurento服务器就是把这个ip封装到iceCandidate里面发给浏览器,而且浏览器拿到这个ip也就当然不可用。你们也可以在浏览器捉包确定这一点
所有最简单的方式就是改了iceCandidate里面的ip信息,改成公网ip

本来列子是kurento-tutorial-java\kurento-group-call项目所以修改文件
tutorial-java\kurento-group-call\src\main\java\org\kurento\tutorial\groupcall\UserSession.java


	private String public_ip = "*.*.*.*";// 当搭云服务器时需要配置 外网访问的地址
    private String private_ip = "192.168.1.111";// 当搭云服务器时需要配置 服务器读到网卡的地址

    this.outgoingMedia.addOnIceCandidateListener(new EventListener<OnIceCandidateEvent>() {

      @Override
      public void onEvent(OnIceCandidateEvent event) {
        JsonObject response = new JsonObject();
        response.addProperty("id", "iceCandidate");
        response.addProperty("name", name);
        response.add("candidate", JsonUtils.toJsonObject(event.getCandidate()));
        try {
          synchronized (session) {
            String re = response.toString();
            if (re.contains(private_ip)) {
	            re = re.replaceAll(private_ip, public_ip);/
            }
            session.sendMessage(new TextMessage(response.toString()));
          }
        } catch (IOException e) {
          log.debug(e.getMessage());
        }
      }
    });
  }

祝你生活愉快!!!

你可能感兴趣的:(kurento)