当前位置:编程学习 > wap >>

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移植编解码的,感觉要学的好多

问的问题太杂了,有没有做过的,提供一个学习的步骤,或者给个可行的方案呢。做毕设真的是一头雾水,求大家的帮助 --------------------编程问答-------------------- 有没有人给个思路啊 --------------------编程问答-------------------- 我可以确认 不是用mediarecorder --------------------编程问答--------------------
引用 2 楼 shen332401890 的回复:
我可以确认 不是用mediarecorder


终于有人理我了,不是用mediarecorder的话,如果是需要同时传声音和视频,能不能给个思路我去研究呢?
谢谢! --------------------编程问答-------------------- 哥们 真不是不想给你思路 我也死在这的 我现在 主要负责照相机 稍微 懂一点这方面的 --------------------编程问答-------------------- 额 也要搞这个了呢,,,网上有些资料能找到,但是 都需要自己调,,过两天做了 。。再讨论了 --------------------编程问答--------------------
引用 4 楼 shen332401890 的回复:
哥们 真不是不想给你思路 我也死在这的 我现在 主要负责照相机 稍微 懂一点这方面的


同样谢谢~ --------------------编程问答--------------------
引用 5 楼 sunqimin 的回复:
额 也要搞这个了呢,,,网上有些资料能找到,但是 都需要自己调,,过两天做了 。。再讨论了


确实能找点资料,不过说的都是大概,好难摸索啊 --------------------编程问答--------------------
引用 7 楼 super_we 的回复:
引用 5 楼 sunqimin 的回复:额 也要搞这个了呢,,,网上有些资料能找到,但是 都需要自己调,,过两天做了 。。再讨论了

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


不难的东西 学了也没成就感 加油  --------------------编程问答--------------------
引用 8 楼 shen332401890 的回复:
引用 7 楼 super_we 的回复:引用 5 楼 sunqimin 的回复:额 也要搞这个了呢,,,网上有些资料能找到,但是 都需要自己调,,过两天做了 。。再讨论了

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

不难的东西 学了也没成就感 加油


一起加油 --------------------编程问答-------------------- MTK的不是都自带视频通话功能吗 你可以看一下相关模块的代码 --------------------编程问答--------------------

我说个思路,你可以通过调用 预览回调,然后数据打包 然后发送 试试看 --------------------编程问答--------------------
引用 10 楼 litl_ 的回复:
MTK的不是都自带视频通话功能吗 你可以看一下相关模块的代码


怎么 获取? --------------------编程问答--------------------
引用 11 楼 shen332401890 的回复:
我说个思路,你可以通过调用 预览回调,然后数据打包 然后发送 试试看

预览回调这样已经实现了,每一帧数据用的x264(网上下载h264的编码库),编码速度太慢了,在用vlc接收的时候,播一段卡一段。 --------------------编程问答--------------------
引用 10 楼 litl_ 的回复:
MTK的不是都自带视频通话功能吗 你可以看一下相关模块的代码

怎么得到 ? --------------------编程问答--------------------
引用 14 楼 super_we 的回复:
引用 10 楼 litl_ 的回复:MTK的不是都自带视频通话功能吗 你可以看一下相关模块的代码
怎么得到 ?


那你是否可以截取 mms模式下的录像的那个数据,数据很小,我个人认为适合 用做视频预览  --------------------编程问答--------------------
引用 14 楼 super_we 的回复:
引用 10 楼 litl_ 的回复:MTK的不是都自带视频通话功能吗 你可以看一下相关模块的代码
怎么得到 ?

是做视频传输 头有点晕 --------------------编程问答-------------------- 是有点复杂的 --------------------编程问答-------------------- 现在在学习live555,不知道有没有人做过live555实时转发视频流
--------------------编程问答-------------------- 过年回来  用硬编码方式做了视频传输播放   离通话还很远  继续研究

现在研究音频部分 --------------------编程问答-------------------- 最近也在研究类似的内容。。。似乎用MediaRecorder不可行,这东西用H264编出来的是mp4格式的文件,NAL根本提取不出来,因为mp4头部的moov会在录制完成后才写入,根本不能达到实时传输的要求。

求LZ实现思路,感谢 --------------------编程问答-------------------- 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 --------------------编程问答-------------------- 除 --------------------编程问答--------------------
引用 20 楼 davepotter 的回复:
最近也在研究类似的内容。。。似乎用MediaRecorder不可行,这东西用H264编出来的是mp4格式的文件,NAL根本提取不出来,因为mp4头部的moov会在录制完成后才写入,根本不能达到实时传输的要求。

求LZ实现思路,感谢


我用的编码h264  输出是3gpp。录制一段然后分析sps,pps。再对视频进行分帧打包发送,和spydroid类似的。
接收端再接收组帧,ffmpeg解码播放的。在wifi情况下延迟1-2秒吧  测试时候没什么延迟。目前是单向的 --------------------编程问答--------------------
引用 21 楼 xiaoliouc 的回复:
1.用camera还是mediarecorder来获得视频流啊?
都可以,
使用camera的话其实就是继承AbstractCamera类把获取的每一帧yuv420sp数据使用ffmpeg中的1ibx264或者直接使用x264编码 软编码 得到h264视频流,然后把数据发送出去。
使用mediaRecorder其实就是把硬编码得到的h264流自己进行处理,得到其手机……


说的很详细  你回答的我现在也都知道了  只是实现还是有困难,技术不过关   不过真的感谢。 --------------------编程问答--------------------
引用 22 楼 xiaoliouc 的回复:
视频通话参考sipdroid实现,可以下载sipdroid源代码,搭建mini sip server测试参考博客http://blog.csdn.net/banketree/article/details/7979327


那个框架代码太多了,研究了一段时间就研究不下去了,请问一定要用sip协议才行吗? --------------------编程问答--------------------
引用 26 楼 super_we 的回复:
引用 22 楼 xiaoliouc 的回复:
视频通话参考sipdroid实现,可以下载sipdroid源代码,搭建mini sip server测试参考博客http://blog.csdn.net/banketree/article/details/7979327

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


无所谓..

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

--------------------编程问答--------------------
引用 27 楼 guoyoulei520 的回复:
引用 26 楼 super_we 的回复:引用 22 楼 xiaoliouc 的回复:
视频通话参考sipdroid实现,可以下载sipdroid源代码,搭建mini sip server测试参考博客http://blog.csdn.net/banketree/article/details/7979327

那个框架代码太多了,研究了一段时间就研究不下去了,请问一……


协议真的是太多了。都要学啊 --------------------编程问答--------------------
引用 28 楼 xiaoliouc 的回复:
一般做视频通话,据我所知的要么用sip协议,要么用xmpp协议,sip协议可以参考sipdroid的实现思路,而xmpp协议可以试一试openfire服务器


我继续研究  谢谢 --------------------编程问答--------------------
引用 24 楼 super_we 的回复:
引用 20 楼 davepotter 的回复:最近也在研究类似的内容。。。似乎用MediaRecorder不可行,这东西用H264编出来的是mp4格式的文件,NAL根本提取不出来,因为mp4头部的moov会在录制完成后才写入,根本不能达到实时传输的要求。

求LZ实现思路,感谢

我用的编码h264  输出是3gpp。录制一段然后分析sps,pps。再对视频进行分……

你提取帧是mdat后面读取一个int作为长度然后取帧的吗???我这测试结果有点不大对,mdat后面连续是8个3F字节,再后面就完全找不到帧头了。。。 --------------------编程问答-------------------- 楼主还在研究吗?我最近也开始搞android的视频通话,新手哎,能否说一下思路? --------------------编程问答--------------------
引用 24 楼 super_we 的回复:
引用 20 楼 davepotter 的回复:
最近也在研究类似的内容。。。似乎用MediaRecorder不可行,这东西用H264编出来的是mp4格式的文件,NAL根本提取不出来,因为mp4头部的moov会在录制完成后才写入,根本不能达到实时传输的要求。

求LZ实现思路,感谢

我用的编码h264  输出是3gpp。录制一段然后分析sps,pps。再对视频进行分帧打包发送,和spyd……

你是用mediarecorder硬编码方式么?我看spydroid里面是camera preview callback得到的每一帧的数据吧,你用mediarecorder硬编的话,怎么分帧的? --------------------编程问答-------------------- 编码方面:
可以使用mediaRecorder或者Camera来进行录像,这样录像,调用的编码接口是安卓的,使用很简单,而且效率最高,至于是软编码还是硬编码,这个完全取决于底层的实现,反正你不用管。比用X264等编码库效果好的多。

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

解码方面:
一是直接RTSP播放,可以调安卓接口来播。
二是SOCKET收到的数据,因为缺少视频回写,所以头部信息不全,你把它补全,然后使用第三方的JLIBRTP之类的RTP库打包即可。 --------------------编程问答-------------------- 编解码,对于安卓来说,最好是用安卓API里面的接口来录制和播放视频。
这样效率最高,而且最简单,只需要几行代码就能实现。

切记尽量避免,不到万不得已,不要用第三方的X264、FFMPEG、LIVE555这些。 --------------------编程问答--------------------
引用 24 楼 super_we 的回复:
引用 20 楼 davepotter 的回复:
最近也在研究类似的内容。。。似乎用MediaRecorder不可行,这东西用H264编出来的是mp4格式的文件,NAL根本提取不出来,因为mp4头部的moov会在录制完成后才写入,根本不能达到实时传输的要求。

求LZ实现思路,感谢

我用的编码h264  输出是3gpp。录制一段然后分析sps,pps。再对视频进行分帧打包发送,和spyd……

  你这个 找到mdat 之后读nalu单元长度信息对不对?  我怎么读了一个很大的数值  还是用其他方法   --------------------编程问答-------------------- 没做过 过来学习一下 --------------------编程问答-------------------- 除 --------------------编程问答--------------------
引用 31 楼 davepotter 的回复:
引用 24 楼 super_we 的回复:引用 20 楼 davepotter 的回复:最近也在研究类似的内容。。。似乎用MediaRecorder不可行,这东西用H264编出来的是mp4格式的文件,NAL根本提取不出来,因为mp4头部的moov会在录制完成后才写入,根本不能达到实时传输的要求。

求LZ实现思路,感谢

我用的编码h264  输出是3gpp。录制……
这8个字节也是长度,只是在录制之前不知道实际多长,就用3F来填充,出现这种情况只有一种情况,就是mdat包前的4个字节对应的长度是0x00000001 --------------------编程问答--------------------
引用 24 楼 super_we 的回复:
Quote: 引用 20 楼 davepotter 的回复:

最近也在研究类似的内容。。。似乎用MediaRecorder不可行,这东西用H264编出来的是mp4格式的文件,NAL根本提取不出来,因为mp4头部的moov会在录制完成后才写入,根本不能达到实时传输的要求。

求LZ实现思路,感谢


我用的编码h264  输出是3gpp。录制一段然后分析sps,pps。再对视频进行分帧打包发送,和spydroid类似的。
接收端再接收组帧,ffmpeg解码播放的。在wifi情况下延迟1-2秒吧  测试时候没什么延迟。目前是单向的


这种方式是不是只能够处理视频,而不能同时处理音视频? --------------------编程问答--------------------
引用 39 楼 chen_jie_2010 的回复:
Quote: 引用 31 楼 davepotter 的回复:

引用 24 楼 super_we 的回复:引用 20 楼 davepotter 的回复:最近也在研究类似的内容。。。似乎用MediaRecorder不可行,这东西用H264编出来的是mp4格式的文件,NAL根本提取不出来,因为mp4头部的moov会在录制完成后才写入,根本不能达到实时传输的要求。

求LZ实现思路,感谢

我用的编码h264  输出是3gpp。录制……
这8个字节也是长度,只是在录制之前不知道实际多长,就用3F来填充,出现这种情况只有一种情况,就是mdat包前的4个字节对应的长度是0x00000001

请问这种情况有解决方案吗?我目前是直接从onPreviewFrame抽每帧画面压缩jpg发送了,压缩比不够,也没有声音。
关键点还是在于如何得到NAL的切片数据。得到这个一切都好办了。我下了SpyDroid的源码,但是编译安装在我手机上没办法得到视频数据。不过skype和QQ都能正常发送直播视频数据。 --------------------编程问答--------------------
引用 31 楼 davepotter 的回复:
Quote: 引用 24 楼 super_we 的回复:

引用 20 楼 davepotter 的回复:最近也在研究类似的内容。。。似乎用MediaRecorder不可行,这东西用H264编出来的是mp4格式的文件,NAL根本提取不出来,因为mp4头部的moov会在录制完成后才写入,根本不能达到实时传输的要求。

求LZ实现思路,感谢

我用的编码h264  输出是3gpp。录制一段然后分析sps,pps。再对视频进行分……

你提取帧是mdat后面读取一个int作为长度然后取帧的吗???我这测试结果有点不大对,mdat后面连续是8个3F字节,再后面就完全找不到帧头了。。。


不同的手机填充3F的个数不同,这就是用Mediarecorder的获取H.264不好的地方,要自己手动跳过一定的字节数,你可以看看http://blog.csdn.net/zblue78/article/details/6083374这个人的,根据自己的手机来获取sps pps:http://www.cnblogs.com/skyseraph/archive/2012/04/01/2429384.html。 --------------------编程问答--------------------
引用 32 楼 BEILUTE00 的回复:
楼主还在研究吗?我最近也开始搞android的视频通话,新手哎,能否说一下思路?


思路看下上面的各种分析就有了。 --------------------编程问答--------------------
引用 36 楼 vim007 的回复:
Quote: 引用 24 楼 super_we 的回复:

引用 20 楼 davepotter 的回复:
最近也在研究类似的内容。。。似乎用MediaRecorder不可行,这东西用H264编出来的是mp4格式的文件,NAL根本提取不出来,因为mp4头部的moov会在录制完成后才写入,根本不能达到实时传输的要求。

求LZ实现思路,感谢

我用的编码h264  输出是3gpp。录制一段然后分析sps,pps。再对视频进行分帧打包发送,和spyd……

  你这个 找到mdat 之后读nalu单元长度信息对不对?  我怎么读了一个很大的数值  还是用其他方法  


不同的手机不同,我的华为2.2就在mdat直接获得nalu长度,中间没有3F填充符,华为pad就会有填充,因此你自己需要录制一段视频分析,再看看跳过多少字节!否则获取到一个非常大的数~ --------------------编程问答-------------------- 楼主,研究结果怎么样了...最近我也接手了一个项目,用的是Red5服务器,现在已经可以把视频上传和在网页端播放了,但是直播,视频通话什么的根本不知道如何下手啊!我现在想的是因为Red5服务器端存放的视频文件为FLV,那么是不是只要获得了这个文件的名称,手机端就可以用能播放流媒体的播放器播放了呢... --------------------编程问答-------------------- 不是有个 MediaCodec 的东西么?
怎么没有用这个?试一试 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 找到这个贴太好了,我都快忙疯了。小弟也在搞这个东东,百度了好多都说的不懂,现在好像有点明白了。小弟先自己研究研究,不懂得再请教各位大神。。。 --------------------编程问答--------------------  问个很白痴的问题啊:使用camera的话其实就是继承AbstractCamera类把获取的每一帧yuv420sp数据使用ffmpeg中的1ibx264或者直接使用x264编码 软编码 得到h264视频流,然后把数据发送出去。
我想知道:1、用ffmpeg中的1ibx264,这个东东这网上下载的吗?
         2、直接使用x264编码 软编码,这个怎么弄呢,是自己写个函数吗? --------------------编程问答-------------------- 有人吗??小弟有好多不明白,求教啊。。 --------------------编程问答-------------------- 确实能找点资料,不过说的都是大概,好难摸索啊 --------------------编程问答-------------------- System.loadLibrary("H264Android");异常,大侠们解释一下是怎么回事啊。。。。 --------------------编程问答-------------------- 楼主换工作了  没研究这个了

一个人研究确实很难,而且是我学android做的第一个研究

--------------------编程问答--------------------
引用 53 楼 super_we 的回复:
楼主换工作了  没研究这个了

一个人研究确实很难,而且是我学android做的第一个研究

楼主你换工作了,你也做过啊,指点小弟吧。
着也是我的第一个android项目啊,以前从没接触过android啊。
急死我了 --------------------编程问答-------------------- 我的第一个android项目也是视频电话的,marvel平台 用的是opencore 2way,不过竟然楼主已经换工作了 。 。 。 --------------------编程问答-------------------- 我现在把一帧一帧的数据用.h264编码了,我想知道编码都的数据怎么播放?? --------------------编程问答--------------------
引用 51 楼 bsg191916 的回复:
确实能找点资料,不过说的都是大概,好难摸索啊

你也在搞这个东东,吗? --------------------编程问答--------------------
引用 56 楼 beihua_2008_ 的回复:
我现在把一帧一帧的数据用.h264编码了,我想知道编码都的数据怎么播放??


怎么编码的就怎么解码播放啊~~~我记得还有什么帧头 帧长度这一些东西的

我当时用vlc先试过能播放的   

我用的mediarecorder录制的视频,参考spydroid做的  实现了单向的传送显示
效果不佳,具体得研究rtp rtcp控制什么的 我只用rtp分帧发送,然后接受rtp包组帧播放
所有只实现了单向视频的传输  (mediarecorder的方式由于有填充字符3F,所以不同手机填充位数不同,并不普遍适用) --------------------编程问答--------------------
引用 58 楼 super_we 的回复:
Quote: 引用 56 楼 beihua_2008_ 的回复:

我现在把一帧一帧的数据用.h264编码了,我想知道编码都的数据怎么播放??


怎么编码的就怎么解码播放啊~~~我记得还有什么帧头 帧长度这一些东西的

我当时用vlc先试过能播放的   

我用的mediarecorder录制的视频,参考spydroid做的  实现了单向的传送显示
效果不佳,具体得研究rtp rtcp控制什么的 我只用rtp分帧发送,然后接受rtp包组帧播放
所有只实现了单向视频的传输  (mediarecorder的方式由于有填充字符3F,所以不同手机填充位数不同,并不普遍适用)

敢问楼主实现到什么地步了 可以把代码给我看下么 邮箱pipicl-hi@163.com 感激不尽啊 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 你search一下RCSe
补充:移动开发 ,  Android
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,