关于基于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 ...
随机推荐
- 发现前端框架 bui-min.js
http://www.builive.com/apps/default/main.html#menu/code http://www.builive.com/demo/grid-plugin.php# ...
- Java 分布式应用
- paml正选择处理时序列里有终止密码子怎么处理掉
先用氨基酸序列进行比对,然后追溯回核苷酸序列,根据氨基酸序列的gap进行密码子去gap,这样不会出现终止子,能最大可能的保留其生物学意义
- HTML中调用servlet的问题(?)
最近在学习servlet.刚开始时,按照案例一行一行的敲代码.不过,出问题了. hello1.html <!DOCTYPE html> <html> <head> ...
- HDU 1890 区间反转
http://acm.hdu.edu.cn/showproblem.php?pid=1890 Robotic Sort Problem Description Somewhere deep in th ...
- 树形DP+RMQ+单调队列(Bob’s Race HDU4123)
题意:有n个房子,这些房子被n-1条道路连接,有一些运动员从一个房子为起点尽可能跑最远的距离且不能通过一条道路超过两次,这些运行员不能选择同样的起点,这些运动员跑的最远距离和最近距离的差值不能超过Q, ...
- 算法训练 区间k大数查询
http://lx.lanqiao.org/problem.page?gpid=T11 算法训练 区间k大数查询 时间限制:1.0s 内存限制:256.0MB 问题描述 给定一个 ...
- contesthunter CH Round #64 - MFOI杯水题欢乐赛day1 solve
http://www.contesthunter.org/contest/CH Round %2364 - MFOI杯水题欢乐赛 day1/Solve Solve CH Round #64 - MFO ...
- java 选择排序法
public class Test3 { /**@author shaobn * @param 选择排序:将a.length - i个元素分别和第i个元素相比较,小的话就将值调换.依次递减进行排列 * ...
- visio的简单用法
visio图边缘会自动扩展 将常用工具放到收藏夹中,拖进去就可以用. 基本形状基本能够满足一般的需求. 支持自己定义形状,将定义好的形状右击组合之后,收藏到收藏夹或导出模版. 多用组合,收藏夹,调整图 ...