bravobit / FFmpeg-Android

FFMpeg/FFprobe compiled for Android
https://bravobit.nl/
MIT License
739 stars 175 forks source link

AsyncTask rejected. Too many task #74

Closed Kadanza closed 5 years ago

Kadanza commented 5 years ago

Task android.os.AsyncTask$3@ccbb611 rejected from java.util.concurrent.ThreadPoolExecutor@65be376[Running, pool size = 5, active threads = 5, queued tasks = 128, completed tasks = 12]

My command for ffmpeg

val cmd = arrayOf("-ss", "$start", "-t", "${end - start}", "-y", "-i", pathWav , "-safe", "0", "-loglevel", "error", temp.absolutePath)

problem here

"nl.bravobit.ffmpeg.FFmpeg.execute(FFmpeg.java:117)"

StackTrace


0 = {StackTraceElement@6064} "java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:2078)"
1 = {StackTraceElement@6065} "java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:843)"
2 = {StackTraceElement@6066} "java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1389)"
3 = {StackTraceElement@6067} "android.os.AsyncTask.executeOnExecutor(AsyncTask.java:651)"
4 = {StackTraceElement@6068} "nl.bravobit.ffmpeg.FFmpeg.execute(FFmpeg.java:117)"
5 = {StackTraceElement@6069} "nl.bravobit.ffmpeg.FFmpeg.execute(FFmpeg.java:138)"
6 = {StackTraceElement@6070} "org.kadance.ftvideo.usecase.speech.FfmpegExecuter.ffmpefExecute(FfmpegExecuter.kt:28)"
7 = {StackTraceElement@6071} "org.kadance.ftvideo.usecase.speech.FfmpegExecuter.ffmpefExecute$default(FfmpegExecuter.kt:25)"
8 = {StackTraceElement@6072} "org.kadance.ftvideo.usecase.speech.FfmpegExecuter$extructRegion$1.subscribe(FfmpegExecuter.kt:91)"
9 = {StackTraceElement@6073} "io.reactivex.internal.operators.observable.ObservableCreate.subscribeActual(ObservableCreate.java:40)"
10 = {StackTraceElement@6074} "io.reactivex.Observable.subscribe(Observable.java:10955)"
11 = {StackTraceElement@6075} "io.reactivex.internal.operators.observable.ObservableFlatMap.subscribeActual(ObservableFlatMap.java:55)"
12 = {StackTraceElement@6076} "io.reactivex.Observable.subscribe(Observable.java:10955)"
13 = {StackTraceElement@6077} "io.reactivex.internal.operators.observable.ObservableSubscribeOn$SubscribeTask.run(ObservableSubscribeOn.java:96)"
14 = {StackTraceElement@6078} "io.reactivex.Scheduler$DisposeTask.run(Scheduler.java:452)"
15 = {StackTraceElement@6079} "io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:61)"
16 = {StackTraceElement@6080} "io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:52)"
17 = {StackTraceElement@6081} "java.util.concurrent.FutureTask.run(FutureTask.java:266)"
18 = {StackTraceElement@6082} "java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301)"
19 = {StackTraceElement@6083} "java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)"
20 = {StackTraceElement@6084} "java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)"
21 = {StackTraceElement@6085} "java.lang.Thread.run(Thread.java:764)"
Kadanza commented 5 years ago

problem was in my code. I use loop and execute ffmpeg. For decide this problem need use CountDownLatch

```
val latch = CountDownLatch(1)

    task = ffmpeg.execute(cmd, object : ExecuteBinaryResponseHandler() {

        override fun onStart() {

        }

        override fun onProgress(msg: String?) {
            this@FfmpegExecuter.msg = msg ?: ""
            if(onlyComplite){
                it.onNext( this@FfmpegExecuter)
            }
        }

        override fun onFailure(msg: String?) {

            latch.countDown()
            if(msg?.contains("This is wasting memory and prevents security hardening.") != true ){
                it.onError( Error("$msg"))
                ffmpeg.killRunningProcesses(task)
            }

        }

        override fun onSuccess(message: String?) {

            this@FfmpegExecuter.msg = msg ?: ""
            loaded = true
            it.onNext( this@FfmpegExecuter)
            it.onComplete()
        }

        override fun onFinish() {
            latch.countDown()
            d()
        }
    })

    latch.await()