воспроизведение видео в Android с помощью javacv ffmpeg

Я пытаюсь воспроизвести видео, хранящееся на SD-карте, с помощью javacv. Ниже приведен мой код

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        playthevideo();
    }

    protected void playthevideo() {

       String imageInSD = "/storage/080A-0063/dama/" + "test3.mp4";

       FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(imageInSD);

       AndroidFrameConverter converterToBitmap = new AndroidFrameConverter();

       OpenCVFrameConverter.ToIplImage converterToipi = new OpenCVFrameConverter.ToIplImage();

           try {
               Log.d("Tag", "try");
               grabber.start();
               Log.d("Tag", "started");

               int i = 0;
               IplImage grabbedImage = null;

               ImageView mimg = (ImageView) findViewById(R.id.a);

               grabber.setFrameRate(grabber.getFrameRate());
               ArrayList<Bitmap> bitmapArray = new ArrayList<Bitmap>();
               while (((grabbedImage = converterToipi.convert(grabber.grabImage())) != null)) {

                   Log.d("Tag", String.valueOf(i));

                   int width = grabbedImage.width();

                   int height = grabbedImage.height();

                   if (grabbedImage == null) {
                       Log.d("Tag", "error");
                   }

                   IplImage container = IplImage.create(width, height, IPL_DEPTH_8U, 4);

                   cvCvtColor(grabbedImage, container, CV_BGR2RGBA);

                   Bitmap bitmapnew = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);

                   bitmapnew.copyPixelsFromBuffer(container.getByteBuffer());

                   if (bitmapnew == null) {
                       Log.d("Tag", "bit error");
                   }

                   mimg.setImageBitmap(bitmapnew);

                   mimg.requestFocus();

                   i++;
               }

               Log.d("Tag", "go");

           }
           catch(Exception e) {

          }
     }
}

просто игнорируйте теги, потому что они предназначены только для целей тестирования. Когда я запускаю этот код, основной макет активности все еще загружается, в то время как монитор Android показывает значение «i» (которое является текущим номером кадра) и внезапно после кода кадра номер 3671 выходит из цикла while, и imageview показывает кадр, который не является конечным кадром этого видео (это где-то около просмотра видео). Мне не удалось найти способ показать захваченные кадры из ffmpegframegrabber, поэтому я решил показать изображение в представлении изображения таким образом. Может ли кто-нибудь сказать мне, почему я получаю эту ошибку или другую ошибку без пути для воспроизведения и отображения видео в активности Android? Кстати, javacv 1.3.1 правильно импортируется в мою среду разработки Android. Спасибо.


person d91    schedule 20.02.2017    source источник
comment
посмотрите здесь: stackoverflow.com/questions/17401852 /   -  person batsheva    schedule 31.08.2017