2013-10-01 124 views
2

我在停止MediaMuxer時遇到問題。Android MediaMuxer illegalstateexception未能停止muxer mMediaMuxer.stop()

除了我正在使用音頻外,其他人都一直跟着fadden's example,所以我不能100%確定音頻和視頻曲目排成一行。這可能是問題所在。

當我打的斷點mMediaMuxer.stop()我得到一個致命的錯誤:

09-30 17:11:21.677: E/AndroidRuntime(32304): FATAL EXCEPTION: CaptureManager 
09-30 17:11:21.677: E/AndroidRuntime(32304): java.lang.IllegalStateException: Failed to stop the muxer 
09-30 17:11:21.677: E/AndroidRuntime(32304): at android.media.MediaMuxer.nativeStop(Native Method) 
09-30 17:11:21.677: E/AndroidRuntime(32304): at android.media.MediaMuxer.stop(MediaMuxer.java:190) 
09-30 17:11:21.677: E/AndroidRuntime(32304): at com.harmonicprocesses.penelopefree.camera.MyMediaMux.stop(MyMediaMux.java:97) 
09-30 17:11:21.677: E/AndroidRuntime(32304): at com.harmonicprocesses.penelopefree.camera.CaptureManager.stopMuxer(CaptureManager.java:86) 
09-30 17:11:21.677: E/AndroidRuntime(32304): at com.harmonicprocesses.penelopefree.camera.MyMediaCodec.stop(MyMediaCodec.java:209) 
09-30 17:11:21.677: E/AndroidRuntime(32304): at com.harmonicprocesses.penelopefree.camera.MyMediaCodec.checkEOS(MyMediaCodec.java:190) 
09-30 17:11:21.677: E/AndroidRuntime(32304): at com.harmonicprocesses.penelopefree.camera.MyMediaCodec.runQue(MyMediaCodec.java:177) 
09-30 17:11:21.677: E/AndroidRuntime(32304): at com.harmonicprocesses.penelopefree.camera.MyMediaCodec.runQue(MyMediaCodec.java:182) 
09-30 17:11:21.677: E/AndroidRuntime(32304): at com.harmonicprocesses.penelopefree.camera.MyMediaCodec.sendEOS(MyMediaCodec.java:199) 
09-30 17:11:21.677: E/AndroidRuntime(32304): at com.harmonicprocesses.penelopefree.camera.CaptureManager$2.run(CaptureManager.java:94) 
09-30 17:11:21.677: E/AndroidRuntime(32304): at android.os.Handler.handleCallback(Handler.java:730) 
09-30 17:11:21.677: E/AndroidRuntime(32304): at android.os.Handler.dispatchMessage(Handler.java:92) 
09-30 17:11:21.677: E/AndroidRuntime(32304): at android.os.Looper.loop(Looper.java:137) 
09-30 17:11:21.677: E/AndroidRuntime(32304): at android.os.HandlerThread.run(HandlerThread.java:61) 

我可以進入它遠遠不夠告訴MediaMuxer.mState = MUXER_STATE_INITIALIZED當我打電話停止。但它未能在nativeStart(mNativeObject)...

if (mState == MUXER_STATE_INITIALIZED) { 
    nativeStart(mNativeObject); 
    mState = MUXER_STATE_STARTED; 
+0

logcat在異常之前是否還有其他消息?錯誤消息,狀態更新(「視頻軌已停止」),...? – fadden

+0

是的,現在我有點離題了,我放棄了通過包裹或畫布複製信息到表面的方法。我儘可能地跟隨你的第二個例子,以便與我的東西一起工作。我相信這與混合器沒有正確設置有關,但我真的不能說。我認爲即使數據是亂碼垃圾,muxer也應該能夠將數據打包爲mp4。但我無法獲得它創建的文件。 VLC通過這個錯誤「mp4錯誤:MP4插件丟棄(沒有moov,foov,moof盒子)」 – HPP

回答

1

我得到了完全相同的異常,對我來說,問題是,我忘了啓動一個線程整個測試用例。

+0

是的,我遇到了很多問題在這個例子的線程之間來回跳動。看起來有些事情需要在UI和其他需要卸載的東西上發生。我應該很快發佈一個強大的示例[這裏](https://github.com/hpp/penelopefree/blob/master/src/com/harmonicprocesses/penelopefree/camera/Pcamera.java),但我還沒有推入一段時間我現在有點埋葬了。 – HPP