造砖之路———局域网音视频开发的历程,基于android音视频p2p 传输技术

鸣谢


  首先要学会感恩,让我从一个音视频小白开始入这个即时通讯的坑,附上2个链接,希望对读者有益。一个
是关于即时通讯的论坛http://www.52im.net/,我从这个网站主要是学习了很多网络的知识,第二个链接是另一个http://592713711.iteye.com/blog/2302904 我从这个学会了基本运营思路,大神的这个demo也是可以运行的,为什么我没有再次基础上二次开发,等下我会在内容中说明!

声明


  转发请声明原链接地址http://blog.csdn.net/qfgggh/article/details/79218865,若发现转发而产生牟的行为,会追究其版权责任!请尊重原创

正文


  这篇博客憋很久了,因为各种原因,各种事情,此应用的东西始终没有完结,当然在写这篇博客的此时此刻,我也只是完成了视频开发然而并没有完成所有的项目,当然这个小小的视频开发,就足足让我花费了半年的时间去学习,去积累,去调试,先吐一下槽!说一下项目吧!本项目是android端用于局域网音视频聊天的,当然目前只完成了视频!目的是什么呢,输入对方的ip和端口号,来进行音视频传输。说起即时传输,就要先说说tcp和upd这两个东西的,tcp我的概念就是我们俩之间连接了一条线,然后通过这条线进行传输,udp我的我的理解就是,我朝着某一个方向大声喊,然后哪个方向可能有个小耳朵在听,我也不知道有没有人听,当然我在本项目用的传输使用udp传输的,至于为什么选择udp,上面第一个52im的论坛会告诉你,我只当个引路人,至于学的如何就靠你自己了!确认了传输方式就要去开始尝试!
  我先写了一个用手机摄像头采集的demo,拿到摄像头回调的数据,我用了android本身带的硬编码对
h264数据进行压缩,然后信心满满的写了个udp传输信息,这时候发现了一个问题,我写了个“hello world”字符串发了出去,但是我的音视频帧数据始终发不出去,wtf!!!什么情况!妈的我的第一个坑就是udp数据不能超过1500(具体的大约是1518byte,记得不是很清楚了,请自行百度),mmp以前用tcp都没有这个东西只知道65535,苦逼死了,怎么办,分包发送了,于是乎遇到了第二个坑rtp!!
   rtp是个什么鬼,rtp是个实时传输协议,是基于upd进行传输的,具体的请自行百度,为什么要用这个鬼可以传输h264数据,就是因为h254数据往往很大,用rtp进行分包,可以保证接收端根据rtp的规则进行组包,然候拼帧,所以玩这个的同学请记住组包这个概念,好吧,于是乎一堆搬砖,终于造出了rtp分包发送,组包的java代码,发出去后,然后发现一堆无序,沾包,并且还丢包的rtp数据,还记得遇到这个情况,我真的很沮丧,我知道自己的经验是没办法写好qos消息保证机制的,但是自己约的炮含着泪也要打完,我就再去了52im论坛找资料,发现了他的孪生兄弟rtcp(实时控制流协议),这个东西是个好东西,我加入了这个协议后,基本上我上面的udp问题都解决了,只要不是遇到网络的问题,是不会丢包的,终于接收到正常的数据了,我拿到这些数据去组包的时候,第三个坑的问题来了(我此时此刻并没有解决)就是组包,我自己写了个组包的程序,发现效率十分的底下,除了关键帧,我只我每秒25帧的数据我只能搞出1-2帧完整的数据,比tm,gif还要卡顿,这个坑我没填好,先埋个炸弹,以后回来再改!(给大家介绍俩东西,一个是jlibrtp,一个是jrtplib,这两个是rtp传输的框架有兴趣的可以去玩一下,一个是java写的,一个是c++的)!
  搞了小半年了,还是没搞出来,就卡在组包的效率上了,目前市场上关于这方面的资料,多数是c或者c++的,我也因此去学习这方面的知识,我知道自己遇到瓶颈了,但是我想在今年春节前的时候做出个雏形,于是乎我转了个方向,nio给了我一条明灯,nio是什么,作为一个android程序员,表示从来没接触过,天啊!我又要被人喷我辣鸡了!于是乎网上一顿乱找,找到这个东西了,我的理解就是,一个服务器端,解决高并发的通讯用的框架,这个玩意在即时通讯方面,也是基于tcp或udp开发的,我当时就想,这东西这么成熟,肯定对我考虑的这些问题有所完善,mmp!强烈的发现我是那么的傻去研究这些底层协议所造成的问题,人家java的大神都已经搞完了,为什么不站在巨人的肩膀上面打飞机,站得高,射的远嘛,
于是乎,终于完成的我项目的雏形,一款基于局域网开发的p2p传输的音视频对讲!当然组包的坑,我早晚会填的!!!

结尾


  记录下这半年搞得东西,希望对自己有所总结,也希望后来者能有感于斯文,最后附上github链接
https://github.com/xmtggh/VideoCalling 希望大家多多点赞和star 我会一直完善这个项目,和大家一起进步,愿意当小白鼠的公司和个人,随意下载,如果你使用了我的项目,请在github给我留言,我会有空关注你的!

你可能感兴趣的:(造砖之路,即时通讯,p2p,android,局域网,音视频)