关于基于webrtc的android-apk 和 webrtc-brows
这一段时间我在做一些关于基于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的更多相关文章
- WebRTC for android ios开发官方指南
The WebRTC native code package can be found at: https://chromium.googlesource.com/external/webrtc ht ...
- WebRTC之Android客户端
一.WebRTC的Android客户端搭建 1.libjingle_peerconnection_so.so 2.libjingle_peerconnection.jar 3.客户端源码一份(可以在g ...
- Android APK 签名 (转发)
Cordova 3.5 为 Android APK 签名,生成可发布的 APK 程序文件 任侠 2014-06-07 00:04 移动开发 抢沙发 16,288 views 目录 [隐藏] ...
- 爱加密Android APk 原理解析
转载请标明出处:http://blog.csdn.net/u011546655/article/details/45921025 爱加密Android APK加壳原理解析 一.什么是加壳? 加壳是在二 ...
- Python Python实现批量安装android apk包
基于Python实现批量安装android apk包 by:授客 QQ:1033553122 1.相关软件包及文件下载 下载地址:adb软件包及批量安装apk包的py文件.zip 2.测试环境 Win ...
- Android之Android apk动态加载机制的研究(二):资源加载和activity生命周期管理
转载请注明出处:http://blog.csdn.net/singwhatiwanna/article/details/23387079 (来自singwhatiwanna的csdn博客) 前言 为了 ...
- 基于NDK的Android防破解& Android防破解 【转载】
两篇防破解文章转载 基于NDK的Android防破解:http://blog.csdn.net/bugrunner/article/details/8634585 Android防破解:http:// ...
- WebRTC入门学习之初识WebRTC (转)
一.WebRTC基本架构 图一 WebRTC总体架构,摘自百度百科 先说说WebRTC大致的实现思路:我们创建的web app,然后在app中调用W3C提供的JS API,JS API 会调用浏览器 ...
- 实例具体解释:反编译Android APK,改动字节码后再回编译成APK
本文具体介绍了怎样反编译一个未被混淆过的Android APK,改动smali字节码后,再回编译成APK并更新签名,使之可正常安装.破译后的apk不管输入什么样的username和password都能 ...
- [转]Android APK签名原理及方法
准备知识:数据摘要 这个知识点很好理解,百度百科即可,其实他也是一种算法,就是对一个数据源进行一个算法之后得到一个摘要,也叫作数据指纹,不同的数据源,数据指纹肯定不一样,就和人一样. 消息摘要算法(M ...
随机推荐
- Mybatis的批量CRUD
CRUD与批量CRUD 分页前后缀(方言 Mysql与Oracle情况下不一样) 批量插入数据 http://chenzhou123520.iteye.com/blog/1583407/ 亟待完善 ...
- 基于axis2框架的两种发布webservice的方法
这次在中韩的产品定义平台的开发,有幸接触到了通过自己写webservice给其他系统调用的项目. 具体开发背景:这个平台做了几个查询接口都是,都是用servlet方式处理请求,而这边系统之间是通过we ...
- 一步一步学习Swift之(一):关于swift与开发环境配置
一.什么是Swift? 1.Swift 是一种新的编程语言,用于编写 iOS 和 OS X 应用. 2.Swift 结合了 C 和 Objective-C 的优点并且不受 C 兼容性的限制. 3.Sw ...
- Lintcode: Interval Sum II
Given an integer array in the construct method, implement two methods query(start, end) and modify(i ...
- 刨根问底U3D---从一个空类说起
这篇文章包含哪些内容 这篇文章从一个Empty的MonoBehaviour入手,首先讨论一下C#的修饰符internal,default,virtual,sealed 接着讨论一下MonoBehavi ...
- 使用Navicat for Oracle新建表空间、用户及权限赋予---来自烂泥
Navicat for Oracle是有关Oracle数据库的客户端工具.通过这个客户端,我们可以图形方式对Oracle数据库进行操作. 说 明我们此次试验的Oracle数据库版本是Oracle 10 ...
- hdu 2892 Area
http://acm.hdu.edu.cn/showproblem.php?pid=2892 解题思路: 求多边形与圆的相交的面积是多少. 以圆心为顶点,将多边形划分为n个三角形. 接下来就求出每个三 ...
- ShowMessage和MessageDlg消息对话框(VCL)
ShowMessage一个简单的消息提示: 例如:ShowMessage("xxxx"); MessageDlg(constAnsiString Msg, TMsgDlgType ...
- Jquery文档接口遍历
// children():获取所有子元素 <%@ page language="java" contentType="text/html; charset=utf ...
- 夺命雷公狗---Thinkphp----5之数据库的链接
我们打开WEB目录下发现了Common和Home以及Runtime这三个文件夹 那么我们第一个目标是完成网站后台的首页吧,那么我们就直接将Home的文件夹复制一份出来,并且改名为Admin这样就可以分 ...