这一段时间我在做一些关于基于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. SweetAlert2 使用教程

    SweetAlert2是一款功能强大的纯Js模态消息对话框插件.SweetAlert2用于替代浏览器默认的弹出对话框,它提供各种参数和方法,支持嵌入图片,背景,HTML标签等,并提供5种内置的情景类, ...

  2. CentOS安装NodeJS v0.10.25 + Express

    安装必需组件 yum -y install gcc make gcc-c++ openssl-devel wget cd ~wget http://nodejs.org/dist/v0.10.25/n ...

  3. Oracle 10G如何从recovery catalog中Unregister目标数据库

    从10g开始,RMAN简化了unregister目标数据库的步骤 方法1: $rman target system/oracle@test catalog rman/rman@catadb rman& ...

  4. Private strand flush not complete

    当切换日志的时候,所有private strands的内容都会被flush到当前的日志中,然后日志切换才可以完成. strand是在oracle 10g中引入的新术语,和redo的latches相关. ...

  5. MySQL复制-设置延迟复制

    mysql> stop slave ; Query OK, 0 rows affected (0.00 sec) mysql> change master to master_delay= ...

  6. javascript创建对象的方法总结

    Javascript创建对象 最简单的方法:创建object实例. var person=new Object(); person.name="Joey";person.age=2 ...

  7. Ruby操作VBA的注意事项和技巧(1):乱码、获取VBA活动和非活动窗口的名称与路径、文件路径的智能拼接与截取(写入日期)

    1.VBA编辑器复制粘贴出来的代码乱码     解决方法:切换到中文输入模式再复制出来就行了 2.获取VBA活动和非活动窗口的名称与路径 Dim wbpath, filename As String ...

  8. Ruby On Rails环境搭建

    注:现在http://rubyforge.org 网站已经停止运行,取而代之的是https://rubygems.org这个网站,下文中所需要的gem包都可以去这个网站搜索下载.其他完全按照下文说的去 ...

  9. Undefined index:

    $username=$_POST["username"]; 初学时发现这个错误, Undefined index: username 如果不仔细看,还以为是$username报错, ...

  10. zw版【转发·台湾nvp系列例程】HALCON MirrorRegion (Delphi)

    zw版[转发·台湾nvp系列例程]HALCON MirrorRegion (Delphi) procedure TForm1.Button1Click(Sender: TObject);var img ...