这一段时间我在做一些关于基于webrtc应用的一些研究,做个一个android的demo,详情如下:

手机客户端:   基于webrtc的 android apk   (webrtc 代码版本 R6751)

server :       已经nodejs的javascript 版的server

web客户端:   浏览器(chrome  36.0.1985.125 m)

客户端和server之间是通过websocket来通讯。

遇到的问题

浏览器和浏览器之间能够正常的通讯(视频通话),但是android apk 一直都不能和web浏览器进行视频通讯。整了三个星期才整明白是怎么回事,我证明我有多搓,特将我解决问题的过程写下来,以防下次再犯。

1.由于官方有提供的android 版的demo,首先肯定想到的是自己对jni接口的使用上存在问题。所以查了很久的代码发现对接口的使用上存在一些问题,并改了过来,但是问题仍然没有解决。

发现的问题有:接口的调用方式存在问题,setremotedescription成功之后才能调用createanswer,mediaconstraint的设定不正确。

2.既然问题仍然存在就追查呗,后来发现android客户端试图使用受到的candidate和对方创建连接,但是对方无任何反应。就觉得是nat穿越的问题,NAT穿越失败,google上查了很多资料,相关的论坛上也找了个遍,也没什么发现。后来去设置turnserver,花了很久吧server配置好之后,问题仍然存在。

3.后来觉得是apk权限不足,找了去查了AndroidManifest.xml也没什么问题,其实这个想法有点有病乱投医的味道。

4.后来从报文入手,分别抓去官方demo和浏览器的交互报文(websocket,stun等等),自己的demo和浏览器的报文,官方web应用之间的报文,自己的web应用之间的报文。深刻对比他们的sdp之间有什么差别,结果也没什么问题,上面的四种情况中其他三种都是stun报文都是正常的,为自己的demo和浏览器之间浏览器不响应demo的stun报文。百思不得其解。

5.经过一番折腾之后还是觉得mediaconstraint的设定存在问题,然后就是mediaconstraint的各种参数的尝试,结果还是没发现问题。

6.在查看官方web应用的log时无意中发现了里面一些关于设定成功的日志(set remote session success 类似这样的提示),后来也将这些 日志加到自己的web应用中,结果发现web应用中在把androiddemo发过来的sdp设置到自己的session(我的理解是用对方的sdp,设定自己的session)里面时出错。以前从来没有怀疑过自己的web应用会有问题,现在觉得可能是web应用存在错误。于是将官方的web应用里面的一些处理数据的方式和log 加到自己的web应用中,发现问题还是没有解决。

7.为什么web应用之间就不会出错,androiddemo和web应用之间就会出错,难道web应用有什么地方可以根据报文来区分报文是androiddemo发来的还是web应用发来的?没理由啊,后来我就讲携带sdp的整个报文拿出来分析,结果androiddemo发来的报文中少了一个字段(sdp的type),查看代码发现自己在发送sdp报文的时候,无意中将type字段给漏掉了,问题还是处在android程序这边,无语。。。 ,加上该字段问题解决。

总结:

  问题其实是一个很简单的错误导致的,我追查了这么久分析了各种原因,查android 代码,查日志,查报文,查web应用的代码,查web应用的log,结果发现问题还是在android代码上。

  发现了自身很多问题,分析问题不够准确,不够自信,在压力的情况下思路不够清晰,更重要的是不够仔细(完全可以避免这样的问题),对日志的重要性认识不够深刻。

关于基于webrtc的android-apk 和 webrtc-brows的更多相关文章

  1. WebRTC for android ios开发官方指南

    The WebRTC native code package can be found at: https://chromium.googlesource.com/external/webrtc ht ...

  2. WebRTC之Android客户端

    一.WebRTC的Android客户端搭建 1.libjingle_peerconnection_so.so 2.libjingle_peerconnection.jar 3.客户端源码一份(可以在g ...

  3. Android APK 签名 (转发)

    Cordova 3.5 为 Android APK 签名,生成可发布的 APK 程序文件  任侠  2014-06-07 00:04  移动开发  抢沙发  16,288 views  目录 [隐藏] ...

  4. 爱加密Android APk 原理解析

    转载请标明出处:http://blog.csdn.net/u011546655/article/details/45921025 爱加密Android APK加壳原理解析 一.什么是加壳? 加壳是在二 ...

  5. Python Python实现批量安装android apk包

    基于Python实现批量安装android apk包 by:授客 QQ:1033553122 1.相关软件包及文件下载 下载地址:adb软件包及批量安装apk包的py文件.zip 2.测试环境 Win ...

  6. Android之Android apk动态加载机制的研究(二):资源加载和activity生命周期管理

    转载请注明出处:http://blog.csdn.net/singwhatiwanna/article/details/23387079 (来自singwhatiwanna的csdn博客) 前言 为了 ...

  7. 基于NDK的Android防破解& Android防破解 【转载】

    两篇防破解文章转载 基于NDK的Android防破解:http://blog.csdn.net/bugrunner/article/details/8634585 Android防破解:http:// ...

  8. WebRTC入门学习之初识WebRTC (转)

    一.WebRTC基本架构 图一  WebRTC总体架构,摘自百度百科 先说说WebRTC大致的实现思路:我们创建的web app,然后在app中调用W3C提供的JS API,JS API 会调用浏览器 ...

  9. 实例具体解释:反编译Android APK,改动字节码后再回编译成APK

    本文具体介绍了怎样反编译一个未被混淆过的Android APK,改动smali字节码后,再回编译成APK并更新签名,使之可正常安装.破译后的apk不管输入什么样的username和password都能 ...

  10. [转]Android APK签名原理及方法

    准备知识:数据摘要 这个知识点很好理解,百度百科即可,其实他也是一种算法,就是对一个数据源进行一个算法之后得到一个摘要,也叫作数据指纹,不同的数据源,数据指纹肯定不一样,就和人一样. 消息摘要算法(M ...

随机推荐

  1. 使用Adreno Profiler分析android游戏

    有时候我们需要对自己的游戏或者别人的游戏进行分析,比如我们需要了解一个引擎的大体渲染的流程,这个时候我们可以借助一些工具,在PC上我们可以使用Microsoft PIX.Intel GPA.Nvidi ...

  2. mysql 插入重复值 INSERT ... ON DUPLICATE KEY UPDATE

    向数据库插入记录时,有时会有这种需求,当符合某种条件的数据存在时,去修改它,不存在时,则新增,也就是saveOrUpdate操作.这种控制可以放在业务层,也可以放在数据库层,大多数数据库都支持这种需求 ...

  3. pgbouncer+pg(fdw)+pg(datanode)分表方案

    pgbouncer+pg(fdw)+pg(datanode)分表方案 (环境RHEL6.5,PG9.4.5,pgbouncer1.5.4,libevent2.0.22) 方案架构图如下: pgboun ...

  4. PostgreSQL trigger (function) examples

    postgres=# \c warehouse_db You are now connected to database "warehouse_db" as user " ...

  5. HTML基础-- 标签、表格

    <html>    --开始标签 <head> 网页上的控制信息 <title>页面标题</title> </head> <body& ...

  6. 通达信:显示K线图日期

    INFO_A:=STRCAT('INFO_A=', STRCAT(CON2STR(REF(MONTH, REF_BAR_A), 0), STRCAT('-', STRCAT(CON2STR(REF(D ...

  7. [转]Java多线程干货系列—(一)Java多线程基础

    Java多线程干货系列—(一)Java多线程基础 字数7618 阅读1875 评论21 喜欢86 前言 多线程并发编程是Java编程中重要的一块内容,也是面试重点覆盖区域,所以学好多线程并发编程对我们 ...

  8. java项目中可能会使用到的jar包解释

    一.Struts2 用的版本是struts2.3.1.1 一个简单的Struts项目所需的jar包有如下8个 1. struts2-core-2.3.1.1.jar: Struts2的核心类库. 2. ...

  9. JSP动作跳转页面的时候与根目录的问题

    在JSP动作:<jsp:forward page="....">中,这个page属性所指定的页面要包含根目录的话,必须要用"/",不能够用" ...

  10. exec 临时表,报错

    因为零时表只存在于一个exec 会话中,所以可以用 多个 select 返回到 dataset 中处理多个table,按照select 的顺序,读取 tables[0],table[1] , 多用于统 ...