2015-01-06 8 views
7

Implementuję WebRTC natywnie w systemie Android. Udało mi się skompilować i uruchomić kod jak opisany tutaj http://www.webrtc.org/native-code/android, ale wpadłem na problem gdzie apprtc.appspot.com najwyraźniej nie zwraca token kanału jako domniemany:Serwer AppRTC zwraca html zamiast Json

01-05 20:01:51.230 15488-15488/org.appspot.apprtc E/AppRTCDemoActivity﹕ Fatal error: Missing channelToken in HTML: <!DOCTYPE html> 
    <!-- 
    * Copyright (c) 2014 The WebRTC project authors. All Rights Reserved. 
    * 
    * Use of this source code is governed by a BSD-style license 
    * that can be found in the LICENSE file in the root of the source 
    * tree. 
    --> 
    <html> 
    <head> 
    <title>WebRTC Reference App</title> 
    <meta charset="utf-8"> 
    <meta name="description" content="WebRTC reference app"> 
    <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, maximum-scale=1"> 
    <script type='text/javascript'>window.mod_pagespeed_start = Number(new Date());</script><link rel="canonical" href="https://apprtc.appspot.com/room/42272483?r=fh"> 
    <link rel="stylesheet" href="https://1-ps.googleusercontent.com/sxk/j1xSZgZ8VRf8QgCJPihVzk5mBR/s.apprtc.appspot.com/apprtc.appspot.com/css/A.main.css.pagespeed.cf.mluzaRyZGPUUQu3CIFwW.css"> 
    </head> 
    <body><noscript><meta HTTP-EQUIV="refresh" content="0;url='https://apprtc.appspot.com/r/42272483?r=fh&amp;PageSpeed=noscript'" /><style><!--table,div,span,font,p{display:none} --></style><div style="display:block">Please click <a href="https://apprtc.appspot.com/r/42272483?r=fh&amp;PageSpeed=noscript">here</a> if you are not redirected within a few seconds.</div></noscript> 
    <div id="videos"> 
    <video id="mini-video" autoplay muted></video> 
    <canvas id="remote-canvas"></canvas> 
    <video id="remote-video" autoplay></video> 
    <video id="local-video" autoplay muted></video> 
    </div> 
    <footer> 
    <div id="sharing"> 
    <div id="room-link">Waiting for someone to join this room: <a href="https://apprtc.appspot.com/room/42272483?r=fh" target="_blank">https://apprtc.appspot.com/room/42272483?r=fh</a></div> 
    </div> 
    <div id="info"></div> 
    <div id="status"></div> 
    </footer> 
    <script src="https://1-ps.googleusercontent.com/sxk/j1xSZgZ8VRf8QgCJPihVzk5mBR/s.apprtc.appspot.com/apprtc.appspot.com/js/stats.js.pagespeed.jm.A-w15PL7V0sRNC026ANH.js"></script> 
    <script src="https://1-ps.googleusercontent.com/sxk/j1xSZgZ8VRf8QgCJPihVzk5mBR/s.apprtc.appspot.com/apprtc.appspot.com/js/signaling.js.pagespeed.jm.QZ7VRUXKfNhiyV7jHkmW.js"></script> 
    <script src="https://1-ps.googleusercontent.com/sxk/j1xSZgZ8VRf8QgCJPihVzk5mBR/s.apprtc.appspot.com/apprtc.appspot.com/js/infobox.js.pagespeed.jm.C9t_78UyYtO6bMRljt_L.js"></script> 
    <script src="https://1-ps.googleusercontent.com/sxk/j1xSZgZ8VRf8QgCJPihVzk5mBR/s.apprtc.appspot.com/apprtc.appspot.com/js/sdputils.js.pagespeed.jm.DWy54ENwSOTLQKw10p1o.js"></script> 
    <script src="https://1-ps.googleusercontent.com/sxk/j1xSZgZ8VRf8QgCJPihVzk5mBR/s.apprtc.appspot.com/apprtc.appspot.com/js/util.js.pagespeed.jm.q3iuB_S1TC2eBJC_RFlb.js"></script> 
    <script src="https://1-ps.googleusercontent.com/sxk/j1xSZgZ8VRf8QgCJPihVzk5mBR/s.apprtc.appspot.com/apprtc.appspot.com/js/main.js.pagespeed.jm.mR4sH1O_ReNLDaNiS3o_.js"></script> 
    <script src="https://1-ps.googleusercontent.com/sxk/j1xSZgZ8VRf8QgCJPihVzk5mBR/s.apprtc.appspot.com/apprtc.appspot.com/js/adapter.js.pagespeed.jm.-Ip1bBjviqtsxeGluAGS.js"></script> 
    <script type="text/javascript">var params={errorMessages:[],isLoopback:false,roomId:'42272483',roomLink:'https://apprtc.appspot.com/room/42272483?r=fh',mediaConstraints:{"audio":true,"video":true},offerConstraints:{"optional":[],"mandatory":{}},peerConnectionConfig:{"iceServers":[]},peerConnectionConstraints:{"optional":[{"googImprovedWifiBwe":true}]},turnRequestUrl:'https://computeengineondemand.appspot.com/turn?username=280585048&key=4080218913',turnTransports:'',audioSendBitrate:'',audioSendCodec:'',audioRecvBitrate:'',audioRecvCodec:'',isStereoscopic:'',opusMaxPbr:'',opusFec:'',opusStereo:'',videoSendBitrate:'',videoSendInitialBitrate:'',videoSendCodec:'',videoRecvBitrate:'',videoRecvCodec:'',wssUrl:'wss://apprtc-ws.webrtc.org:443/ws',wssPostUrl:'https://apprtc-ws.webrtc.org:443'};initialize();</script> 
    <script>(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.cr 

Podczas sprawdzania kodu źródłowego AppRTCClient .java tutaj https://code.google.com/p/webrtc/source/browse/trunk/talk/examples/android/src/org/appspot/apprtc/AppRTCClient.java?r=5847 znalazłem zabawny komentarz na linii 234ff dokładnie funkcję gdzie aplikacja kończy się niepowodzeniem:

// Fetches |url| and fishes the signaling parameters out of the HTML via 
// regular expressions. 
// 
// TODO(fischman): replace this hackery with a dedicated JSON-serving URL in 
// apprtc so that this isn't necessary (here and in other future apps that 
// want to interop with apprtc). 
private AppRTCSignalingParameters getParametersForRoomUrl(String url) 
     throws IOException { 

    // ... 

} 

W funkcji dzieje się dużo analizowania kodu html i wydaje token kanał nie jest prawidłowo przetwarzany z html odpowiedzi zwrócone przez serwer (nic dziwnego).

Nie badałem dalej, czy istnieje żeton kanału i czy jest on poprawny. Zamiast Podejrzewałem kod (bagażnik!) Mogą być nieaktualne, google i znalazłem ten projekt na Github: https://github.com/pristineio/webrtc-android

tę samą funkcję, tu w wierszu 232ff przechodzi w & t = json jako parametr, przypuszczalnie dlatego, że spodziewa się, że serwer do zwrócenia Json. Funkcja następnie nie powiedzie się podczas analizowania Json, zgadnij, dlaczego. Bingo! Ponieważ zwracana jest ta sama strona HTML, z parametrem lub bez niego.

// Fetches |url| and fishes the signaling parameters out of the JSON. 
private AppRTCSignalingParameters getParametersForRoomUrl(String url) 
     throws IOException, JSONException { 
    url = url + "&t=json"; 

    // ... 

} 

Dla kompletności pełny adres URL, który kończy się niepowodzeniem:

https://apprtc.appspot.com/?r=00000000&t=json 

gdzie 00000000 to numer pokoju.

Wygląda na to, że Pan Fischman w Google zaktualizował kod w międzyczasie, ale kod webrtc nie jest aktualny, a pristineio/webrtc-android na Github wydaje się znać parametr, który kiedyś zrobił apprtc.appspot.com zwróć Json zamiast html, ale już tego nie robi.

Wyszukałem go, ale nie znalazłem kodu serwera dla apprtc.appspot.com, ale pamiętam, że widziałem go wcześniej (uważam, że był to projekt Python).

  • Czy ktoś ma link do tego kodu źródłowego?

Następnie szukałem parametrów dla tego adresu URL i znalazłem dwie strony, na których zostały wymienione, w tym http://samdutton.github.io/webrtc/samples/web/content/apprtc/params.html, ale żaden z nich nie pokazał parametru lub alternatywnego adresu URL, aby zażądać wyniku jako Json.

  • Czy ktoś wie, jaki jest prawidłowy parametr (lub adres URL)?
  • Czy ktoś wie, że są pełne specyfikacje?
  • Czy ktoś ma link do najbardziej aktualnego i działającego kodu źródłowego AppRTCClient.Java?

Dzięki!

Odpowiedz

3

Działa w tym samym numerze, co Ty. Znalazłem kod tutaj:

https://github.com/GoogleChrome/webrtc/tree/master/samples/web/content/apprtc

Obecnie pominie zmian, aby zobaczyć, co mogło go złamane. Zli zaktualizuję tę odpowiedź, jeśli coś znajdę.

AKTUALIZACJA: Wygląda na to, że poczyniły pewne zmiany w tym łamanie popełnić:

https://github.com/GoogleChrome/webrtc/commit/c36b88475fab8a3e4436a87a7ea84265b0e13a8a#diff-c3e41e94913c93dfe31babd4830c3065

Oni poruszają się z api GAE kanału, do kanału websocket.

+1

Jako że @Aidamina pokazuje w drugim linku, wygląda na to, że linie 150ff zostały usunięte, więc zwrot JSONA zamiast HTMLa nie powiedzie się. Dziękuję bardzo za skierowanie mnie do źródła serwera. –

+0

Zgłosiłem problem w Google i otrzymałem następującą odpowiedź: "Zamiast tego będziesz chciał użyć nowego interfejsu API apprtc.appspot.com/register." Mam nadzieję, że to pomoże każdemu tutaj. –

+1

Jak to naprawiłeś? Czy możesz podzielić się projektem roboczym? –

Powiązane problemy