android 视频通话相关

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


<-------------------------------------------------------------------------------------------------------------------------------------------------------------->

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

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

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

你可能感兴趣的:(视频通话)