Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.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_Mjpeg - Fatal编程技术网

Android 无法从视频中获取完整长度的字节

Android 无法从视频中获取完整长度的字节,android,mjpeg,Android,Mjpeg,我正试图从直播视频中保存图像帧。因此,我可以从我的android应用程序中显示实时流视频,并将其保存在本地存储中。现在,我想在saveImage函数中使用某种延迟,以便在特定时间后保存图像。我同时使用了Handler和TimerTask。经过一段时间的延迟后,图像被保存在我的本地目录中,但我获取的图像的长度有时非常小,而另一次是正常的。我希望保存的图像与我在应用程序中获得的视频流的长度完全一致。 我希望我问的问题容易理解。我是android和stack overflow的初学者。 P.S-我使用

我正试图从直播视频中保存图像帧。因此,我可以从我的android应用程序中显示实时流视频,并将其保存在本地存储中。现在,我想在saveImage函数中使用某种延迟,以便在特定时间后保存图像。我同时使用了Handler和TimerTask。经过一段时间的延迟后,图像被保存在我的本地目录中,但我获取的图像的长度有时非常小,而另一次是正常的。我希望保存的图像与我在应用程序中获得的视频流的长度完全一致。 我希望我问的问题容易理解。我是android和stack overflow的初学者。 P.S-我使用
mjpeg
库来显示视频。我得到的视频来自IP摄像头

用于保存图像的代码

public void saveImage(){

            try {
                photo =
                        new File(Environment.getExternalStorageDirectory(),
                                "Download/photos/photo" + Instant.now().getEpochSecond() + ".jpg");


                if (photo.exists()) {
                    photo.delete();


                }

                System.out.println("Photo " + photo);
                FileOutputStream fos = new FileOutputStream(photo.getPath());
                System.out.println("Image_length" +image.length);
                fos.write(image);
                fos.close();

            } catch (IOException e) {
                Log.e("PictureDemo", "Exception in photoCallback", e);
            }
        }
调用saveImage的代码

                            final Bitmap outputImg = BitmapFactory.decodeByteArray(image, 0, image.length);
                            if (outputImg != null) {
                                if (run) {
                                    newFrame(outputImg);

                                    // Saving frames in internal Storage
                                    new Timer().schedule(
                                            new TimerTask() {
                                                @Override
                                                public void run() {
                                                    saveImage();
                                                }
                                            },5000
                                    );
                            }
                            } else {
                                Log.e(tag, "Read image error");
                            }