我们是否需要WebRTC中的会话?

时间:2017-02-23 06:59:34

标签: webrtc kurento

我正在创建一个用于学习目的的示例项目(稍后我将开发基于webrtc和kurento的项目),我正在使用Kurento媒体服务器,我修改了kurento服务器的教程并制作了一个示例出来的。

在Kurento Server的所有示例中,他们使用UserRegistry.java存储UserSession的对象,如下所示:

public class UserSession {

  private static final Logger log = LoggerFactory.getLogger(UserSession.class);

  private final String name;
  private final WebSocketSession session;

  private String sdpOffer;
  private String callingTo;
  private String callingFrom;
  private WebRtcEndpoint webRtcEndpoint;
  private WebRtcEndpoint playingWebRtcEndpoint;
  private final List<IceCandidate> candidateList = new ArrayList<>();

  public UserSession(WebSocketSession session, String name) {
    this.session = session;
    this.name = name;
  }

  public void sendMessage(JsonObject message) throws IOException {
    log.debug("Sending message from user '{}': {}", name, message);
    session.sendMessage(new TextMessage(message.toString()));
  }

  public String getSessionId() {
    return session.getId();
  }

  public void setWebRtcEndpoint(WebRtcEndpoint webRtcEndpoint) {
    this.webRtcEndpoint = webRtcEndpoint;

    if (this.webRtcEndpoint != null) {
      for (IceCandidate e : candidateList) {
        this.webRtcEndpoint.addIceCandidate(e);
      }
      this.candidateList.clear();
    }
  }

  public void addCandidate(IceCandidate candidate) {
    if (this.webRtcEndpoint != null) {
      this.webRtcEndpoint.addIceCandidate(candidate);
    } else {
      candidateList.add(candidate);
    }

    if (this.playingWebRtcEndpoint != null) {
      this.playingWebRtcEndpoint.addIceCandidate(candidate);
    }
  }

  public void clear() {
    this.webRtcEndpoint = null;
    this.candidateList.clear();
  }
}

我有两个问题:

  1. 为什么我们需要会话对象?
  2. 管理会话有哪些替代方案(如果有的话)?
  3. 让我再谈谈第二个问题。我发现我可以运行Kurento-JavaScript-Client(我需要将它转换为浏览器版本然后我可以使用它。)仅在客户端(这样我就不需要后端服务器,即nodejs或者tomcat - 这是我的假设)。所以在这种情况下我将如何管理会话,或者我可以完全删除UserRegistry概念并使用其他方式。

    谢谢&amp;此致

1 个答案:

答案 0 :(得分:0)

您需要存储会话以在客户端和应用程序服务器之间实现信令。请参阅示例here。信令图描述了启动/停止/等WebRTC视频通信所需的消息。

如果您计划摆脱应用程序服务器(即完全转移到JavaScript客户端),您可以查看发布/订阅API,例如PubNub