Google App Engine。渠道API。提供的令牌无效。

时间:2013-05-19 08:33:38

标签: google-app-engine webrtc channel-api rtc

我一直在努力创建一个使用WebRTC将浏览器调用到浏览器的应用程序。我写了一个简单的servlet来创建频道:

  PrefClubChannelServletServlet extends HttpServlet {
public void doPost(HttpServletRequest req, HttpServletResponse resp)
        throws IOException {
    String channelKey = req.getParameter("userid");
    resp.addHeader("Access-Control-Allow-Origin", "*");

    ChannelService channelService = ChannelServiceFactory.getChannelService();
    String token = channelService.createChannel(channelKey);
    resp.setContentType("text/plain");
    resp.getWriter().println(token);
}
}

我已将其部署在Google App Engine中。 在我的Web应用程序中,我有一个带有Java脚本的页面,类似于https://apprtc.appspot.com。在我的代码中,调用者调用prepare(1)和Callee - prepare(0)。

function prepare(ini) {
    initiator = ini;
    card = document.getElementById("card");
    localVideo = document.getElementById("localVideo");
    miniVideo = document.getElementById("miniVideo");
    remoteVideo = document.getElementById("remoteVideo");
    resetStatus();

    console.log("Try to get token");
    getToken();
}

function getToken() {
    var token;
    if (initiator) {
        var xhr = new XMLHttpRequest();
        var url = 'http://pref-club.appspot.com/prefclubchannelservlet?userid=GGGG';
        xhr.open('POST', url, true);

        // Specify that the body of the request contains form data
        xhr.setRequestHeader("Content-Type",
            "application/x-www-form-urlencoded");

        xhr.send(url);

        xhr.onreadystatechange = function () {
            if (xhr.readyState == 4 && xhr.status == 200) {
                token = xhr.responseText;
                console.log("token = " + token);
                document.getElementById("token").value = token;

                openChannel(token);
                doGetUserMedia();
            }
        };
    } else {
        token = document.getElementById("token").value;
        console.log("token = " + token);

        openChannel(token);
        doGetUserMedia();
    }
};

因此,Caller和Callee都使用相同的令牌打开频道,实际上他们打开频道,获得媒体并制作RTCPeerConnection

function openChannel(channelToken) {
    console.log("Opening channel.");
    var channel = new goog.appengine.Channel(channelToken);
    var handler = {
        'onopen': onChannelOpened,
        'onmessage': onChannelMessage,
        'onerror': onChannelError,
        'onclose': onChannelClosed
    };
    socket = channel.open(handler);
}

主要问题是事件处理程序onChannelMessage不起作用。我在控制台日志中看不到任何S-> C :. Callee看不到来电者的提议。

然后,我刷新了我的servlet,重新部署了它,发现我根本无法打开通道。在打开频道时,我收到了未捕捉的错误:

  

提供的令牌无效。

0 个答案:

没有答案