前段时间在搞IOS的音视频版本,所以将标题改为了Android IOS WebRTC 音视频开发总结, 下面总结一下开发过程中的一些经验:
1. IOS WebRTC音视频编译和下载: 有过android WEBRTC编译下载经验再去弄IOS,你会发现简单多了,再有问题,可以参考:http://www.cnblogs.com/ProbeStar/p/3411510.html 记住有MAC和IOS两个版本,要指定好你想要哪个版本.
2. 正确区分armv7 armv7s i386平台: 编译的时候特别容易碰到找不到armv7 .a文件之类的错误, 不了解的人会一头雾水,其实这是因为每个Target编译的时候都可以生成不同的平台,ARMV7,ARMV7S是给手机用的,I386是给MAC和模拟器用的,明白了这一点你就很容易解决这一类问题了.
3. 正确区分.m和.mm文件: 有一次编译出现一个奇怪的问题,提示找不到string.h文件,折腾了半天都没搞定,而且很纳闷这文件不是系统自带的吗?后来才发现是自己.m文件里面调用了C++代码造成的,解决方式就是将.m文件改成.mm文件.
4. 调试webrtc代码: android上面就只能通过LOG了,但IOS很方便,object c. c. c++相互调用(这个有点让我一眼就喜欢上了Xcode),同时编译成DEBUG版本,就直接进入.a文件里面调试了,windows上同样的道理.
5. 原理都是一样的: 虽然WEBRTC有针对Windows,MAC,Android,IOS的版本,但他们原理都是一样的,主要就是表现形式不一样,所以你如果弄懂了一套再去弄另一套就比较容易了,了解过设计模式的人会发现针对这同不同平台的处理,他里面大量采用了模板模式和工厂模式,如数据发送,udp_socket_xxx.h
6. 图像显示不了或一方有图像另一方没有图像: 这种问题原因很多,首先你得通过抓包看ARtp,ARtcp,VRtp,VRtcp端口收发数据是否正常,其次再通过调试或设置断点来观察数据包有没有被丢弃或者有没有被正确解码,前两天刚解决一个因为KeyFrame(WEBRTC里面有KeyFrame,DeltaFrame分别表示是完整图像还是差异图像)没有正常发送导致收不到数据的问题.
7. RTP与RTCP有啥区别: 前者主要是负责发送音视频数据包,后者主要负责控制信令相关的包,比如回传信令.
8. 问有针对性的问题: 发现很多新手在一些群里问的问题要么很泛,要么别人已经回答了N次,同时寄希望于大神出来帮他直接解决,甚至恨不得别人帮你调试代码,太不现实了,不过你愿意另外花钱买服务又另当别论了,依我的观察来看真正的大牛都是不怎么说话的,基本上都在潜水.
最后:更多经验陆续补充,各位如有更好的想法和建议欢迎回复!
Android IOS WebRTC 音视频开发总结(六)