首先,是编码的问题:由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) 谢谢大家这么热心,希望大家帮我找找错吧~万分感谢~~~
有个老外哥们说用 ParcelFileDescriptor.getFromSocket()从socket得到fd来向socket写录制的数据。不知道你是怎么实现的。
我自己运行时是好的,不知道是哪一点没处理好还是,你自己可以先试着解决一下,不行的话你就把Log贴出来,大伙帮你分析一下...
然后,后面的问题我都没解决出来。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)
谢谢大家这么热心,希望大家帮我找找错吧~万分感谢~~~
在模拟器上是不行的,因为模拟器无法模拟camera设备,建议安装到真实到手机上试试,我在moto xt800上测试是可以到。
通过流到方式发送到服务器是可以的。但是服务器收到到文件需要自己修复一下。
测试过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);经过上面修复后的文件是可以播放的。以上是经过实验,证明是可以的。另外,服务器端是可以做到实时播放媒体流的。
我也出现这种问题
调用prepare就出现问题
首先不是所有的机器都可以设置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。
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和定制系统的都很容易出错,不知道为什么
我也是楼上的问题,怎么办?大侠们!