Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/209.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 FFmpegFrameGrabber每次为视频提供相同的帧_Android_Video_Javacv_Frames - Fatal编程技术网

Android FFmpegFrameGrabber每次为视频提供相同的帧

Android FFmpegFrameGrabber每次为视频提供相同的帧,android,video,javacv,frames,Android,Video,Javacv,Frames,我试图在Android中使用JavaCV的FFmpegFrameGrabber从视频中提取帧,并获得每个帧的平均颜色。我的输出为所有帧提供了相同的颜色,考虑到我正在处理的视频类型,情况不应该如此。我不知道为什么我得到的所有颜色都是一样的。请帮我解决这个问题 private ArrayList<Bitmap> getFrames(){ try { String path = "/storage/emulated/0/pulse.mp4";

我试图在Android中使用JavaCV的FFmpegFrameGrabber从视频中提取帧,并获得每个帧的平均颜色。我的输出为所有帧提供了相同的颜色,考虑到我正在处理的视频类型,情况不应该如此。我不知道为什么我得到的所有颜色都是一样的。请帮我解决这个问题

private ArrayList<Bitmap> getFrames(){
    try {
        String path = "/storage/emulated/0/pulse.mp4";
        InputStream inputStream = new FileInputStream(path);
        ArrayList<Bitmap> bitmapArray = new ArrayList<>();
        bitmapArray.clear();
        FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(path);
        AndroidFrameConverter converterToBitMap = new AndroidFrameConverter();
        grabber.start();
        int count = 0;
        Frame frame;
        while(true){
            frame = grabber.grabFrame();
            if (frame == null) {
                break;
            }
            if (frame.image == null) {
                continue;
            }
            count++;
            Log.i("frame", "loop number" + count);
            Bitmap bitmap = converterToBitMap.convert(frame);
            bitmapArray.add(bitmap);
        }
        return bitmapArray;
    } catch(Exception e) {
        Log.e("frame error: ",e.toString());
        System.out.println(e.toString());
    }
    return null;
}
private ArrayList getFrames(){
试一试{
字符串路径=“/storage/simulated/0/pulse.mp4”;
InputStream InputStream=新文件InputStream(路径);
ArrayList bitmapArray=新的ArrayList();
bitmapArray.clear();
FFmpegFrameGrabber grabber=新的FFmpegFrameGrabber(路径);
AndroidFrameConverter converterToBitMap=新的AndroidFrameConverter();
grabber.start();
整数计数=0;
框架;
while(true){
frame=grabber.grabFrame();
if(frame==null){
打破
}
if(frame.image==null){
继续;
}
计数++;
Log.i(“帧”、“循环编号”+计数);
位图Bitmap=converterToBitMap.convert(帧);
添加(位图);
}
返回位图数组;
}捕获(例外e){
Log.e(“帧错误:,e.toString());
System.out.println(例如toString());
}
返回null;
}
对于平均颜色

private ArrayList<Integer> getAverageColorArray(){
    ArrayList<Bitmap> bitmapArrayList = getFrames();
    ArrayList<Integer> avgColorArr = new ArrayList<Integer>();
    long redBucket = 0;
    long greenBucket = 0;
    long blueBucket = 0;
    long pixelCount = 0;
    for(Bitmap b: bitmapArrayList){
        for (int y = 0; y < b.getHeight(); y++) {
            for (int x = 0; x < b.getWidth(); x++) {
                int c = b.getPixel(x, y);
                pixelCount++;
                redBucket += Color.red(c);
                greenBucket += Color.green(c);
                blueBucket += Color.blue(c);
            }
        }
        int red = (int)(redBucket / pixelCount);
        int green = (int)(greenBucket / pixelCount);
        int blue = (int)(blueBucket / pixelCount);
        int avgColor = Color.rgb(red, green, blue);
        avgColorArr.add(avgColor);
    }
    return avgColorArr;
}
private ArrayList getAverageColorArray(){
ArrayList bitmapArrayList=getFrames();
ArrayList avgColorArr=新的ArrayList();
长红桶=0;
长绿桶=0;
长蓝袋鼠=0;
长像素计数=0;
用于(位图b:bitmapArrayList){
对于(int y=0;y