Media start error原因分析及解决方法
来源:互联网 发布:淘宝自助开通怎么弄 编辑:程序博客网 时间:2024/05/05 14:50
转载自点击打开链接
之前在项目的时候,遇到到Media Recorder在快速启动停止等一系列操作的后,再次启动时,会failed的问题,类似的Log如下:
ERROR/MediaRecorder(9008): startfailed:-19
WARN/dalvikvm(9008): threadid=15: thread exiting with uncaught exception (group=0x40ad01f8)
ERROR/AndroidRuntime(9008): FATAL EXCEPTION: Thread-337
ERROR/AndroidRuntime(9008): java.lang.RuntimeException: start failed.
ERROR/AndroidRuntime(9008): at android.media.MediaRecorder.start(Native Method)
ERROR/AndroidRuntime(9008): at com.huawei.ca.eivs.camera.AndroidVideo.initMediaRecoder(AndroidVideo.java:429)
ERROR/AndroidRuntime(9008): at com.huawei.ca.eivs.camera.AndroidVideo.sendLiveToMdu(AndroidVideo.java:511)
ERROR/AndroidRuntime(9008): at com.huawei.ca.eivs.camera.AndroidVideo$ListenInviteThread.run(AndroidVideo.java:241)
WARN/ActivityManager(210): Force finishing activity com.huawei.ca.eivs.ui/com.huawei.ca.eivs.camera.AndroidVideo
ERROR/ActivityManager(210): exception bw.write()java.io.IOException: Transport endpoint is not connected
这个时候,退出自己的软件,打开系统相机,会提示“相机故障,无法连接到相机”,只能重启机器才能正常使用系相机。
根据反复测试抓log发现,造成MediaRecorder start失败的原因是:在程序中反复启动停止MediaRecord时,存在在无效的状态上stop MediaRecorder的情况,而且没有捕获此操作引发的异常,没有对MediaRecorder进行reset、release造成的。
具体的MediaRecorder状态迁移,请参看SDK。
解决办法:
解决这个问题的关键是保证MediaRecorder能在合适的状态执行合适的动作。
下面是我的解决方法,希望能给遇到这个问
</pre>题的人一个灵感:</p><p style="padding-top: 0px; padding-bottom: 0px; margin-top: 0px; margin-bottom: 0px; margin-left: 40px; color: rgb(52, 52, 52); font-family: Simsun; line-height: 24px;"><pre name="code" class="java"><span style="font-family: Simsun;">private void releaseMediaRecorder()</span>
{ if (mMediaRecorder != null) { // 内部标识是否正在录像的变量,如果不需要可以去掉 if (isRecord) { try { mMediaRecorder.setOnErrorListener(null); mMediaRecorder.setOnInfoListener(null); // 停止 mMediaRecorder.stop(); } catch (RuntimeException e) { e.printStackTrace(); // 如果发生异常,很可能是在不合适的状态执行了stop操作 // 所以等待一会儿 try { Thread.sleep(100); } catch (InterruptedException e1) { Log.e(TAG, "sleep for second stop error!!"); } } isRecord = false; } // 再次尝试停止MediaRecorder try { mMediaRecorder.stop(); } catch (Exception e) { Log.e(TAG, "stop fail2", e); } // 等待,让停止彻底执行完毕 try { Thread.sleep(100); } catch (InterruptedException e1) { Log.e("TAG", "sleep for reset error Error", e1); } // 然后再进行reset、release mMediaRecorder.reset(); mMediaRecorder.release(); mMediaRecorder = null; } }
- Media start error原因分析及解决方法
- ANR原因分析及解决方法
- ANR原因分析及解决方法
- error C2470 错误原因及解决方法
- Windows变慢原因分析及解决方法
- Windows 变慢原因分析及解决方法
- Windows变慢原因分析及解决方法
- Windows变慢原因分析及解决方法
- Oracle发生死锁原因分析及解决方法
- java内存泄漏原因分析及解决方法
- 人人围网站宕机原因及解决方法分析
- 花生壳不稳定的原因分析及解决方法
- ORA-01153: an incompatible media recovery is active(产生原因及解决方法)
- unserialize(): Error at offset出现的原因分析以及解决方法
- 上传图片错误提示:error=3,原因及解决方法
- Error establishing socket的产生原因及解决方法
- 使用QWT产生error LNK2001的原因及解决方法
- 使用QWT产生error LNK2001的原因及解决方法
- C++流和文件流
- Mac OSX 快捷键&命令行
- parseInt(String s)与valueOf(int i) 的区别
- 【Qt5开发及实例】28、获取本机网络信息
- java开源组件
- Media start error原因分析及解决方法
- java与C++区别之String字符串
- 扁平化设计
- New to Machine Learning? Avoid these three mistakes
- GitHub及Git的简单使用
- [半平面交] poj 3384 Feng Shui
- 记录一下七维空间解决问题
- Nginx 数据结构 ngx_queue_t
- 2014年总结