Transcoder
Transcoder copied to clipboard
Fix Failed to stop the muxer (ref #139)
I think info.set(0, 0, 0, flags and MediaCodec.BUFFER_FLAG_END_OF_STREAM) is fine for EOS.
Do you think it is correct ?
ref: #139
@natario1 Thank you for developing a great library. I would appreciate it if you could review the fix.
Stacktrace:
2022-02-09 20:20:39.537 3543-6522/com.test.MyTestApp E/TranscodeEngine: Unexpected error while transcoding.
java.lang.IllegalStateException: Failed to stop the muxer
at android.media.MediaMuxer.nativeStop(Native Method)
at android.media.MediaMuxer.stop(MediaMuxer.java:454)
at com.otaliastudios.transcoder.sink.DefaultDataSink.stop(DefaultDataSink.java:218)
at com.otaliastudios.transcoder.internal.transcode.DefaultTranscodeEngine.transcode(DefaultTranscodeEngine.kt:132)
at com.otaliastudios.transcoder.internal.transcode.TranscodeEngine$Companion.transcode(TranscodeEngine.kt:48)
at com.otaliastudios.transcoder.internal.transcode.TranscodeEngine.transcode(Unknown Source:2)
at com.otaliastudios.transcoder.Transcoder$1.call(Transcoder.java:102)
at com.otaliastudios.transcoder.Transcoder$1.call(Transcoder.java:99)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:764)
2022-02-09 20:20:39.538 3543-6522/com.test.MyTestApp E/MediaMuxer: stop() is called in invalid state 3
2022-02-09 20:20:39.539 3543-6522/com.test.MyTestApp W/DefaultDataSink: Failed to release the muxer.
java.lang.IllegalStateException: Failed to stop the muxer
at android.media.MediaMuxer.nativeStop(Native Method)
at android.media.MediaMuxer.stop(MediaMuxer.java:454)
at android.media.MediaMuxer.release(MediaMuxer.java:694)
at com.otaliastudios.transcoder.sink.DefaultDataSink.release(DefaultDataSink.java:224)
at com.otaliastudios.transcoder.internal.transcode.DefaultTranscodeEngine.cleanup(DefaultTranscodeEngine.kt:137)
at com.otaliastudios.transcoder.internal.transcode.TranscodeEngine$Companion.transcode(TranscodeEngine.kt:63)
at com.otaliastudios.transcoder.internal.transcode.TranscodeEngine.transcode(Unknown Source:2)
at com.otaliastudios.transcoder.Transcoder$1.call(Transcoder.java:102)
at com.otaliastudios.transcoder.Transcoder$1.call(Transcoder.java:99)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:764)
Any update on this issue?
Please review and merge the changes, the library doesn't work in a lot of devices
I'm not sure what the correct solution is. I don't have a crashing device, but it would be nice to know the API level and the values of buffer.remaining(), buffer.position(), timestamp and flags at the last invocation before crash. If my snippet above crashed that means that buffer has data, and with the current solution we would be dropping it
@natario1 I am getting this error on Android 7.1, But i don't see this issue on android 12/13. Also it doesn't shows up for all vieos.
E/TranscodeEngine(14057): Unexpected error while transcoding.
E/TranscodeEngine(14057): java.lang.IllegalStateException: Failed to stop the muxer
E/TranscodeEngine(14057): at android.media.MediaMuxer.nativeStop(Native Method)
E/TranscodeEngine(14057): at android.media.MediaMuxer.stop(MediaMuxer.java:245)
E/TranscodeEngine(14057): at com.otaliastudios.transcoder.sink.DefaultDataSink.stop(DefaultDataSink.java:218)
E/TranscodeEngine(14057): at com.otaliastudios.transcoder.internal.transcode.DefaultTranscodeEngine.transcode(DefaultTranscodeEngine.kt:132)
E/TranscodeEngine(14057): at com.otaliastudios.transcoder.internal.transcode.TranscodeEngine$Companion.transcode(TranscodeEngine.kt:48)
E/TranscodeEngine(14057): at com.otaliastudios.transcoder.internal.transcode.TranscodeEngine.transcode(TranscodeEngine.kt)
E/TranscodeEngine(14057): at com.otaliastudios.transcoder.Transcoder$1.call(Transcoder.java:102)
E/TranscodeEngine(14057): at com.otaliastudios.transcoder.Transcoder$1.call(Transcoder.java:99)
E/TranscodeEngine(14057): at java.util.concurrent.FutureTask.run(FutureTask.java:237)
E/TranscodeEngine(14057): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
E/TranscodeEngine(14057): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
E/TranscodeEngine(14057): at java.lang.Thread.run(Thread.java:760)
any updates on this issue?
In the meantime whoever wants this fix use:
implementation 'com.github.jumperson:transcoder:0.10.4.2'
@UrielFrankel thanks for providing a fork. Do you think it's possible that you can create a new PR with a fix and get it merged? I did the same a few weeks ago: https://github.com/natario1/Transcoder/pull/182 and then released a new version: https://github.com/natario1/Transcoder/pull/183
This way the complex code that we have here is unified and everyone benefits from the fixes.
@vanniktech this is not my fork, it is @jumperson code from above.
Any update on this?