在“dequeueOutputBuffer()”压缩视频时出现IllegalStateException

时间:2017-07-10 14:27:45

标签: android ffmpeg video-compression android-mediacodec

我还检查了几个或多个类似的帖子,但没有一个人有任何令人满意的答案。

我的要求是大约压缩视频。 1-2分钟。 我的应用中的视频大小限制为500 MB,持续时间限制为4分钟。

命令,我试过 -

  

-i /storage/sdcard0/Videos/Lat_test.mp4 -r 20 -vcodec mpeg4 -preset ultrafast -c:copy -tune fastdecode -strict -2 -b:v 150k   /storage/sdcard0/Videos/output.mp4

     

-y -i /storage/sdcard0/Videos/test3.mp4 -crf 24 -vcodec mpeg4 -preset ultrafast -c:copy -me_method zero -tune fastdecode -tune zerolatency   -strict -2 -b:v 1000k -pix_fmt yuv420p /storage/sdcard0/Videos/output.mp4

还有一些提及here

1)https://github.com/Tourenathan-G5organisation/SiliCompressor(使用MediaCodec的那个,而不是FFMPEG)。

2)https://github.com/lalongooo/VideoCompressor

尝试使用三星Galaxy Grand GT-i9082 5.0.1版(已植根)时,失败并出现以下错误 -

> java.lang.IllegalStateException
> at android.media.MediaCodec.native_dequeueOutputBuffer(Native Method)
> at android.media.MediaCodec.dequeueOutputBuffer(MediaCodec.java:1033)
> at com.iceteck.silicompressorr.videocompression.MediaController.convertVideo(MediaController.java:491)
> at com.iceteck.silicompressorr.SiliCompressor.compressVideo(SiliCompressor.java:300)
> at com.iceteck.silicompressor.SelectPictureActivity$VideoCompressAsyncTask.doInBackground(SelectPictureActivity.java:379)
> at com.iceteck.silicompressor.SelectPictureActivity$VideoCompressAsyncTask.doInBackground(SelectPictureActivity.java:358)
> at android.os.AsyncTask$2.call(AsyncTask.java:288)
> at java.util.concurrent.FutureTask.run(FutureTask.java:237)
> at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
> at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
> at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
> at java.lang.Thread.run(Thread.java:818)

请建议如何解决此问题。

please suggest any other better video compressing approach / sample / reference,如果可能的话

我尝试过各种使用FFMPEG的视频压缩样本,以及MediaCodec,但它们都没有运行良好。有些非常慢。并且在一些设备中休息失败。

0 个答案:

没有答案