WebRTC实践(Android、golang实现视频通信)

项目需要翻了好多关于WebRTC的资料,现在做一个简单的总结。

目标

通过研究WebRTC实现一个基于Android的Demo。

学习

之前没有接触过WebRTC,所以是时候需要恶补了一下,第一想到的是在网上找找相关的书籍,大概翻了下《WebRTC Cookbook》与《WebRTC权威指南》,简单了解了本地媒体、信令、STUN、TURN等知识,找了几个js的例子试了下。

Android编译

通过webrtc.org官网的介绍方法,使用gclient获取了webrtc源代码,用gn生成对应cpu项目,用ninja编译,最后生成并在手机上进行测试,完全没问题。

改造

官方的例子好使,验证了方向没问题就开始吧。使用turnserver搭建STUN与TURN服务器。

首先把代码集成到我们的项目中,只需把例子相关类、资源拷贝到项目,并把org.webrtc:google-webrtc包引入到项目即可。

compile 'org.webrtc:google-webrtc:1.0.+'

由于我们的服务是使用go写的,信令服务器这应该是用不了的,当时也没仔细找这部分代码,直接读代码仿写的。

总结

很快代码全部完成,测试也都通过,皆大欢喜,没想到如此顺利,后来打算拿别人手机试一下,出了问题,原来一直在同一wifi下测试,根本不用考虑穿墙的事。首先考虑到是STUN、TURN服务问题,一个个排查,查看ice发现外网ip可以取到,那么可能就是TURN服务的问题,反复排查不得其解,最后发现TURN要求使用long-term credential认证,也就是说必须得有用户名、密码,最后分享一个测试地址,可以测试STUN与TURN服务是否正常。

WebRTC下的网络连接: STUN, TURN, ICE, TCP

Leave a Reply

Your email address will not be published. Required fields are marked *