Not getting full length of bytes from the Video

Viewed 59

I'm trying to save the frame of the image from the live stream video. So, I'm able to show live stream video from my android application as well as saving it in my local storage. Now, I want to use some sort of delay in my saveImage function so that images get saved after some specific time. I have used both Handler and TimerTask. The image is getting saved in my local directory after some delay but the length of the image that I get is sometimes very small, the other time normal. I want my saved image to exactly the length of the video stream that I am getting in my application. I hope the question I asked is easy to understand. I am a beginner in both android and stack overflow. P.S - I used mjpeg library for showing the video. The video I am getting is from an IP Camera.

Code for saving the images

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);
            }
        }

Code where saveImage is called

                            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");
                            }
0 Answers
Related