Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/215.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.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
JAVACV在Android上的渲染性能_Android_Video_Javacv - Fatal编程技术网

JAVACV在Android上的渲染性能

JAVACV在Android上的渲染性能,android,video,javacv,Android,Video,Javacv,我正在做一个应用程序,使用sd卡中保存的一组照片创建视频。我试图解决的问题是,当我创建一些视频时,应用程序崩溃。崩溃取决于源图片文件的分辨率。例如,我可以使用分辨率为320x480的400幅图像渲染视频,但只能使用分辨率为2500x3200的图像渲染25帧视频 我使用Asynctask在后台执行渲染过程(用于向用户提供反馈并使其了解渲染过程)。渲染过程崩溃时,logcat中不会捕获任何警告/错误/etc。使用DDMS检查内存使用情况时,我无法查看任何内存泄漏(我也没有在logcat上收到任何内存

我正在做一个应用程序,使用sd卡中保存的一组照片创建视频。我试图解决的问题是,当我创建一些视频时,应用程序崩溃。崩溃取决于源图片文件的分辨率。例如,我可以使用分辨率为320x480的400幅图像渲染视频,但只能使用分辨率为2500x3200的图像渲染25帧视频

我使用Asynctask在后台执行渲染过程(用于向用户提供反馈并使其了解渲染过程)。渲染过程崩溃时,logcat中不会捕获任何警告/错误/etc。使用DDMS检查内存使用情况时,我无法查看任何内存泄漏(我也没有在logcat上收到任何内存警告)。出于这个原因,我认为这可能是一个与ffmpeg库相关的问题(但我不知道)

我测试了avcodec.java上定义的不同编解码器,如:

AV_CODEC_ID_MPEG1VIDEO = 1,
AV_CODEC_ID_MPEG2VIDEO = 2,
      AV_CODEC_ID_H263 = 5,
     AV_CODEC_ID_MJPEG = 8,

尝试使用无损视频编解码器似乎没有效果,而且在尝试使用某些编解码器时,我也会遇到一些错误

我正在索尼爱立信Xperia Arc(1ghz cpu,320mb内存)上运行我的应用程序

我不知道我的智能手机是否有足够的能力播放长高清视频,但我看到市场上有一些类似的应用程序可以做到这一点

如果您有任何建议,我将不胜感激。我不知道如何解决这个问题


谢谢。

好的,我终于找到了解决方案,但不是最初的问题

为了创建视频,我使用了如下代码:

    FFmpegFrameRecorder recorder = new FFmpegFrameRecorder(name,width,heigth);
    recorder.start()

    while(imagesinfolder){

    IplImage img = highgui.cvLoadImage("/path/to/image[i].jpg")
    recorder.record(img)
    i++;
    }
这似乎造成了内存问题,可能是因为垃圾收集器没有清理IplImage

我的解决方案是使用opencv_core.cvLoadImage(img)代替highgui.cvLoadImage;然后,opencv_core.cvReleaseImage(img);在每次迭代中

FFmpegFrameRecorder recorder = new FFmpegFrameRecorder(name,width,heigth);
recorder.start()

while(imagesinfolder){

IplImage img = opencv_core.cvLoadImage("/path/to/image[i].jpg")
recorder.record(img)
img.cvReleaseImage();
i++;
}
使用它,所有的问题都消失了,我可以渲染没有任何问题的长视频