Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
内存不足-Android_Android_Out Of Memory - Fatal编程技术网

内存不足-Android

内存不足-Android,android,out-of-memory,Android,Out Of Memory,我在Android应用程序中使用ffmpeg,有时会出现内存不足错误,我在HandlerThread中调用ffmpeg,在主线程继续运行时捕获内存不足错误并退出线程可以吗 我读了很多这不是一个好的实践,问题是我真的需要它,因为当出现任何类型的错误时,我必须编辑数据库 fc = new FfmpegController(context, fileTmp); try { fc.processVideo(clip_in, clip_out, false,

我在Android应用程序中使用ffmpeg,有时会出现内存不足错误,我在HandlerThread中调用ffmpeg,在主线程继续运行时捕获内存不足错误并退出线程可以吗

我读了很多这不是一个好的实践,问题是我真的需要它,因为当出现任何类型的错误时,我必须编辑数据库

    fc = new FfmpegController(context, fileTmp);
    try {

        fc.processVideo(clip_in, clip_out, false,
                new ShellUtils.ShellCallback() {

                    @Override
                    public void shellOut(String shellLine) {


                    }

                    @Override
                    public void processComplete(int exitValue) {
                         //Update the DB  
                    }
                });
    } catch (FileNotFoundException e) {

        e.printStackTrace();
    } catch (IOException e) {

    } catch (InterruptedException e) {

    } catch (Exception e) {

    }catch (OutOfMemoryError e) {
        //update the DB 
    }

若你们能从记忆错误中解脱出来,就不会有什么问题。我会考虑缓冲你的音频,因为你很可能一次通过ffmpeg运行整个剪辑,这将消耗大量内存

另外,请记住,我们中的许多人在安卓系统中制作音频最终使用NDK,主要是因为您遇到了类似的问题。音频必须是真正的高性能,使用NDK可以让您编写更低级别的内存效率的音频处理


Android的AudioTrack有一个写入方法,允许您将音频缓冲区推送到其中。警告:这不是入门级,需要了解AudioBuffer的一些知识,还需要您读入缓冲区,将其发送到ffmpeg,然后传递到AudioTrack。不容易做到,不幸的是,Android上更高级的音频并不容易。

如何缓冲音频?@AdroidFreak编辑更新了我的答案。它需要使用AudioTrack。在线上有一些指南,但有一个警告说,在Android上,这也不是一个简单的音频。