我可以确认 不是用mediarecorder

解决方案 »

  1.   


    终于有人理我了,不是用mediarecorder的话,如果是需要同时传声音和视频,能不能给个思路我去研究呢?
    谢谢!
      

  2.   

    MTK的不是都自带视频通话功能吗 你可以看一下相关模块的代码
      

  3.   

    预览回调这样已经实现了,每一帧数据用的x264(网上下载h264的编码库),编码速度太慢了,在用vlc接收的时候,播一段卡一段。
      

  4.   


    那你是否可以截取 mms模式下的录像的那个数据,数据很小,我个人认为适合 用做视频预览 
      

  5.   

    现在在学习live555,不知道有没有人做过live555实时转发视频流
      

  6.   

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

  7.   

    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.html5.rtp打包,用的是NALDecoder翻译过来的打包方式,没法控制啊,看资料有人说使用jrtplib,下载编译了c++,测试程序也运行过了,一知半解的。有没有其他的rtp打包工具呢,或者有什么资料可以提供给学习下
    rtp打包参考spydroid的实现方式
    6.还看到很多说ffmpeg移植编解码的,感觉要学的好多
    ffmpeg很强大,采集、编码、切片、解码,功能很好很轻大。学习步骤应该是ffmpeg的安装、移植ffmpeg到android上,jni调用等。
    我也是新手,这是我的一些拙见。
      

  8.   

    视频通话参考sipdroid实现,可以下载sipdroid源代码,搭建mini sip server测试参考博客http://blog.csdn.net/banketree/article/details/7979327
      

  9.   


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

  10.   


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

  11.   


    无所谓..我们以前是基于XMPP协议的.用的libjingle开源库。
    rtp打包方式参考了一个开源软件。名字忘了,好像是什么**Droid.....
    不过后来语音和视频同步没有做好,还有回声......
      

  12.   

    一般做视频通话,据我所知的要么用sip协议,要么用xmpp协议,sip协议可以参考sipdroid的实现思路,而xmpp协议可以试一试openfire服务器
      

  13.   

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

  14.   

    楼主还在研究吗?我最近也开始搞android的视频通话,新手哎,能否说一下思路?
      

  15.   

    你是用mediarecorder硬编码方式么?我看spydroid里面是camera preview callback得到的每一帧的数据吧,你用mediarecorder硬编的话,怎么分帧的?
      

  16.   

    编码方面:
    可以使用mediaRecorder或者Camera来进行录像,这样录像,调用的编码接口是安卓的,使用很简单,而且效率最高,至于是软编码还是硬编码,这个完全取决于底层的实现,反正你不用管。比用X264等编码库效果好的多。传输方面:
    一是把编码后的数据,进行RTSP转换,就是在编码的这台手机上面,搭建一个RTSP服务器。
    二是直接把mediaRecorder的数据通过socket传,就是在OUTPUTFILE那里输出为localSocket方式传,但是这个传出去的数据,缺少了一个视频回写的动作。所以传的数据,与保存为文件方式的数据,头部信息略有一点点差异,你只需要在接收端的那台手机上,添加一点点信息就可以了。解码方面:
    一是直接RTSP播放,可以调安卓接口来播。
    二是SOCKET收到的数据,因为缺少视频回写,所以头部信息不全,你把它补全,然后使用第三方的JLIBRTP之类的RTP库打包即可。
      

  17.   

    编解码,对于安卓来说,最好是用安卓API里面的接口来录制和播放视频。
    这样效率最高,而且最简单,只需要几行代码就能实现。切记尽量避免,不到万不得已,不要用第三方的X264、FFMPEG、LIVE555这些。
      

  18.   

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

  19.   

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

  20.   


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

  21.   

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

  22.   

    你提取帧是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。
      

  23.   

      你这个 找到mdat 之后读nalu单元长度信息对不对?  我怎么读了一个很大的数值  还是用其他方法  不同的手机不同,我的华为2.2就在mdat直接获得nalu长度,中间没有3F填充符,华为pad就会有填充,因此你自己需要录制一段视频分析,再看看跳过多少字节!否则获取到一个非常大的数~
      

  24.   

    楼主,研究结果怎么样了...最近我也接手了一个项目,用的是Red5服务器,现在已经可以把视频上传和在网页端播放了,但是直播,视频通话什么的根本不知道如何下手啊!我现在想的是因为Red5服务器端存放的视频文件为FLV,那么是不是只要获得了这个文件的名称,手机端就可以用能播放流媒体的播放器播放了呢...
      

  25.   

    不是有个 MediaCodec 的东西么?
    怎么没有用这个?试一试
      

  26.   

     问个很白痴的问题啊:使用camera的话其实就是继承AbstractCamera类把获取的每一帧yuv420sp数据使用ffmpeg中的1ibx264或者直接使用x264编码 软编码 得到h264视频流,然后把数据发送出去。
    我想知道:1、用ffmpeg中的1ibx264,这个东东这网上下载的吗?
             2、直接使用x264编码 软编码,这个怎么弄呢,是自己写个函数吗?