有没有哪位大侠成功通过MediaRecorder录制视频啊.我在网上找的资料和代码全部报错.
哪位大侠帮帮忙.提高一份代码给我啊...感激不尽.

解决方案 »

  1.   

    我刚刚完成这个功能,录制已经成功了,就是录制的文件有点大,10s钟竟然就有5M我已经上传资源了,就不给你贴出来了,你自己去下载吧!http://download.csdn.net/source/2663206
      

  2.   

    楼上你是录制到本地了吧?我需要的是通过流的方式发出来.setOutputFile的时候发.但是我用android提供的表述符来发,服务器接收到后无法播放.而且大小少了一些.你在你那边试试?
      

  3.   

    楼上的程序好像有问题,一点击“停止”就处错误:IllegalStateException state:0 期待楼上解答=========
      

  4.   


    有个老外哥们说用 ParcelFileDescriptor.getFromSocket()从socket得到fd来向socket写录制的数据。不知道你是怎么实现的。
      

  5.   


    我自己运行时是好的,不知道是哪一点没处理好还是,你自己可以先试着解决一下,不行的话你就把Log贴出来,大伙帮你分析一下...
      

  6.   

    首先,是编码的问题:由H.264变成H.263,编码的问题就解决了。
    然后,后面的问题我都没解决出来。log如下:
      java.io.IOException:prepare failed.
        at android.media.MediaRecorder._prepare(Native Method)
        at android.media.MediaRecorder.prepare(MediaRecorder.java:503)
        at com.mediaNew.mediaNew.recorder(mediaNew.java:170)
        at com.mediaNew.mediaNew$2.onClick(mediaNew.java:106)
        at android.view.View.performClick(View.java:2408)
        at android.view.View$PerformClick.run(View.java:8816)
        at android.os.Handler.handleCallback(Handle.java)
    最后,点击“停止”的时候,错误信息:
        stop called in an invalid state:0
     java.lang.IllegalStateException
         at android.media.MediaRecorder.stop(Native Method)
         at com.mediaNew.mediaNew.stop(mediaNew.java:190)
         at com.meidaNew.mediaNew$3.onClick(media.java:114)
         at android.view.View.performClick(View.java)
         at android.view.View$PerformClick.run(View.java:8816
         at android.os.Handler.handleCallback(Handler.java)
         at android.os.Handler.dispatchMessage(Handler.java)
         at android.os.Looper.loop(Looper.java)
         at android.app.ActivityThread.main(ActivityThread.java)
     谢谢大家这么热心,希望大家帮我找找错吧~万分感谢~~~
      

  7.   


    在模拟器上是不行的,因为模拟器无法模拟camera设备,建议安装到真实到手机上试试,我在moto xt800上测试是可以到。
      

  8.   


    通过流到方式发送到服务器是可以的。但是服务器收到到文件需要自己修复一下。
    测试过mp4文件,对于3gp的文件格式没有测试。下面说说mp4的情况:服务器端收到到mp4文件缺少ftyp容器及mdat容器到长度。1.ftyp容器的数据基本上是一样到,所以只要把录到手机到mp4文件里到ftyp容器里到数据复制过去就可以;
    2.对于mdat容器到长度修复,从接收到的mp4文件中找到“moov“标志,然后根据此偏移量减去ftyp到长度再减去容器的长度所占到4个字节就可以,用该长度值修正mdat容器到长度。
    mdat.len = offset(moov) - ftyp.len - sizeof(moov.len);经过上面修复后的文件是可以播放的。以上是经过实验,证明是可以的。另外,服务器端是可以做到实时播放媒体流的。
      

  9.   

    问题解决了吗?
    我也出现这种问题
    调用prepare就出现问题
      

  10.   

    我做过这个:
    首先不是所有的机器都可以设置H264编码的,我原先Android 2.1 HTC G7设置H264崩溃, 后来操作系统升级到2.2之后就可以正常设置H264编码了;其次,其实可以这样做,在手机端本地建立TCP监听,然后绑定这个socket句柄,这样的话直接就能访问到数据流了,他出来的不是标准的H264数据,好像是不带0001头的,可以参考这个人的例子 http://blog.csdn.net/zblue78/archive/2010/12/18/6083374.aspx。
      

  11.   

    有可能是刷了非官方的ROM产生的
      

  12.   

    recorder.setPreviewDisplay(surfaceHolder.getSurface());
    recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
    recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
    recorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
    recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
    我用个大多数机子都不报错,但是android2.3和定制系统的都很容易出错,不知道为什么
      

  13.   

    05-21 02:34:01.484: E/MediaRecorder(323): stop called in an invalid state: 1
    我也是楼上的问题,怎么办?大侠们!
      

  14.   

    估计是 surfaceHolder 没设置正确
      

  15.   

    视频文件服务器上传确保二进制上传接收,和ftp二进制上传一样不然音视频文件会损坏