2015-01-06 3 views
7

Я внедряю WebRTC изначально в Android. Я был в состоянии скомпилировать и запустить код, как описано здесь http://www.webrtc.org/native-code/android, но я столкнулся с проблемой, где apprtc.appspot.com по-видимому, не возвращает токен канала, как предполагается:Сервер AppRTC возвращает html вместо 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 

При проверке исходного кода AppRTCClient .java здесь https://code.google.com/p/webrtc/source/browse/trunk/talk/examples/android/src/org/appspot/apprtc/AppRTCClient.java?r=5847 я нашел забавный комментарий по линии 234ff, именно функцию, где приложение не удается:

// 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 { 

    // ... 

} 

В функции происходит много разбора HTML кода и, кажется, маркер канала не правильно разобран из ответ html, возвращаемый сервером (неудивительно).

Я еще не исследовал, есть ли токен канала или нет, и/или если он правильный. Вместо этого, я подозревал код (ствол!) Может быть устаревшей, гугле и нашел этот проект на Github: https://github.com/pristineio/webrtc-android

та же функция, здесь на линии 232ff, проходит в & т = JSON в качестве параметра, якобы потому, что он ожидает, сервер, чтобы вернуть Json. После этого функция не работает при разборе Json. Бинго! Потому что возвращается одна и та же html-страница с параметром или без него.

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

    // ... 

} 

Для полноты полного URL, который не может:

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

где 00000000 это номер комнаты.

Итак, похоже, что г-н Фишман в Google обновил код в то же время, но код в webrtc не является текущим, а pristineio/webrtc-android в Github, похоже, знает параметр, который когда-то делал apprtc.appspot.com верните Json вместо html, но он больше не делает этого.

Я googled, но не могу найти код сервера для apprtc.appspot.com, но я помню, что видел его раньше (я считаю, что это был проект Python).

  • У кого-нибудь есть ссылка на этот исходный код?

Тогда я искал параметры для этого URL, и я нашел две страницы, на которых были перечислены эти, в том числе http://samdutton.github.io/webrtc/samples/web/content/apprtc/params.html, но ни один из них не показал параметр или альтернативный URL для запроса результата, как Json.

  • Кто-нибудь знает, что такое правильный параметр (или url)?
  • Или кто-нибудь знает, были ли полные спецификации?
  • Или у кого-нибудь есть ссылка на самый текущий и рабочий исходный код AppRTCClient.Java?

Спасибо!

ответ

3

Выполнение той же проблемы, что и вы. Я нашел код здесь:

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

В настоящее время просматривал изменения, чтобы увидеть, что могло бы сломал его. Я обновляю этот ответ, если найду что-нибудь.

UPDATE: Похоже, они сделали некоторые важные изменения в этой фиксации:

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

Они движутся от апи GAE канала, к каналу WebSocket.

+1

Как показано во второй ссылке @Aidamina, похоже, что линии 150ff были удалены, поэтому возвращение Json вместо html бесшумно выходит из строя. Большое спасибо за указание на источник сервера. –

+0

Я сообщил об этой проблеме в Google и получил следующий ответ: «Вместо этого вы захотите использовать новый apprtc.appspot.com/register API». Надеюсь, это поможет кому-то здесь. –

+1

Как вы это исправили? Можете ли вы, пожалуйста, поделиться рабочим проектом? –

Смежные вопросы