当前位置: 代码迷 >> Android >> android视频通话实现方法,请问!
  详细解决方案

android视频通话实现方法,请问!

热度:59   发布时间:2016-04-28 03:42:55.0
android视频通话实现方法,请教!!!
1.用camera还是mediarecorder来获得视频流啊?
2.用mediarecorder,怎么获得每一帧的数据进行rtp打包实时发送呢?
3.用mediarecorder录制视频的时候设置编码方式H.264,是不是说录制出的视频已经是h.264编码了
4.服务器采用什么比较好,有没有人可以帮忙推荐一下。red测试通过了,但是要关闭防火墙,视频也有延迟,主要是android往服务器烧数据感觉没经过压缩,这样肯定是不行的吧。live555??
5.rtp打包,用的是NALDecoder翻译过来的打包方式,没法控制啊,看资料有人说使用jrtplib,下载编译了c++,测试程序也运行过了,一知半解的。有没有其他的rtp打包工具呢,或者有什么资料可以提供给学习下
6.还看到很多说ffmpeg移植编解码的,感觉要学的好多

问的问题太杂了,有没有做过的,提供一个学习的步骤,或者给个可行的方案呢。做毕设真的是一头雾水,求大家的帮助
------解决思路----------------------
引用:
引用:额 也要搞这个了呢,,,网上有些资料能找到,但是 都需要自己调,,过两天做了 。。再讨论了

确实能找点资料,不过说的都是大概,好难摸索啊


不难的东西 学了也没成就感 加油 
------解决思路----------------------


我说个思路,你可以通过调用 预览回调,然后数据打包 然后发送 试试看
------解决思路----------------------
1.用camera还是mediarecorder来获得视频流啊?
都可以,
使用camera的话其实就是继承AbstractCamera类把获取的每一帧yuv420sp数据使用ffmpeg中的1ibx264或者直接使用x264编码 软编码 得到h264视频流,然后把数据发送出去。
使用mediaRecorder其实就是把硬编码得到的h264流自己进行处理,得到其手机的sps,pps,然后rtp打包发送出去。
2.用mediarecorder,怎么获得每一帧的数据进行rtp打包实时发送呢?
参考spydroid源代码,里面有具体实现。
3.用mediarecorder录制视频的时候设置编码方式H.264,是不是说录制出的视频已经是h.264编码了
举个简单例子,mediarecorder设置编码格式为h264,容器为3gp或者mp4,那么如果设置保存路径就是采用h264格式的 3gp或者mp4文件。如果是得到实时流,因为视频header是在后面回写得到的,那么你需要把把得到的流进行处理,比如0001 sps 0001 pps 0001 h264data的形式。
4.服务器采用什么比较好,有没有人可以帮忙推荐一下。red测试通过了,但是要关闭防火墙,视频也有延迟,主要是android往服务器烧数据感觉没经过压缩,这样肯定是不行的吧。live555??
red5 的话,请采用rtmp协议,请搜索网上的一个资源iVideoChat视频录制发布到red5服务器,这个是我以前网上找的,http://download.csdn.net/detail/xiaoliouc/4933594。其实这个demo没涉及到h264编码,只是简单的把从camera得到的每一帧数据yuv420sp转换成rgb的形式。
live555的话,请研究rtsp协议,c++语言我不太熟,请参考博客系列文章 http://blog.csdn.net/column/details/streaming-media.html

5.rtp打包,用的是NALDecoder翻译过来的打包方式,没法控制啊,看资料有人说使用jrtplib,下载编译了c++,测试程序也运行过了,一知半解的。有没有其他的rtp打包工具呢,或者有什么资料可以提供给学习下
rtp打包参考spydroid的实现方式
6.还看到很多说ffmpeg移植编解码的,感觉要学的好多
ffmpeg很强大,采集、编码、切片、解码,功能很好很轻大。学习步骤应该是ffmpeg的安装、移植ffmpeg到android上,jni调用等。
我也是新手,这是我的一些拙见。
------解决思路----------------------
视频通话参考sipdroid实现,可以下载sipdroid源代码,搭建mini sip server测试参考博客http://blog.csdn.net/banketree/article/details/7979327
------解决思路----------------------
引用:
引用:
视频通话参考sipdroid实现,可以下载sipdroid源代码,搭建mini sip server测试参考博客http://blog.csdn.net/banketree/article/details/7979327

那个框架代码太多了,研究了一段时间就研究不下去了,请问一定要用sip协议才行吗?


无所谓..

我们以前是基于XMPP协议的.用的libjingle开源库。
rtp打包方式参考了一个开源软件。名字忘了,好像是什么**Droid.....
不过后来语音和视频同步没有做好,还有回声......
------解决思路----------------------
一般做视频通话,据我所知的要么用sip协议,要么用xmpp协议,sip协议可以参考sipdroid的实现思路,而xmpp协议可以试一试openfire服务器


------解决思路----------------------
编码方面:
可以使用mediaRecorder或者Camera来进行录像,这样录像,调用的编码接口是安卓的,使用很简单,而且效率最高,至于是软编码还是硬编码,这个完全取决于底层的实现,反正你不用管。比用X264等编码库效果好的多。

传输方面:
一是把编码后的数据,进行RTSP转换,就是在编码的这台手机上面,搭建一个RTSP服务器。
二是直接把mediaRecorder的数据通过socket传,就是在OUTPUTFILE那里输出为localSocket方式传,但是这个传出去的数据,缺少了一个视频回写的动作。所以传的数据,与保存为文件方式的数据,头部信息略有一点点差异,你只需要在接收端的那台手机上,添加一点点信息就可以了。

解码方面:
一是直接RTSP播放,可以调安卓接口来播。
二是SOCKET收到的数据,因为缺少视频回写,所以头部信息不全,你把它补全,然后使用第三方的JLIBRTP之类的RTP库打包即可。
  相关解决方案