Обнаружить ориентацию записанного видео в android - программирование
Подтвердить что ты не робот

Обнаружить ориентацию записанного видео в android

Я хочу создать свой собственный медиаплеер и получить информацию о ориентации видео (для обнаружения его записи с передней или задней камеры). для jpeg-изображений я могу использовать ExifInterface.TAG_ORIENTATION, но для видео, как я могу найти эту информацию.

Я попытался захватить кадр из видеофайла и преобразовать его в jpeg, но во всех случаях он всегда обеспечивает ориентацию 0.

Пожалуйста, помогите мне. Спасибо заранее.

4b9b3361

Ответ 1

Слишком много усилий я узнал, что медиаплеер обеспечивает высоту и ширину видеофайла, из которого мы можем закончить поворот видео.

MediaPlayer mp = new MediaPlayer();
  try {
      mp.setDataSource(viewSource);
      mp.prepare();
      mp.setOnVideoSizeChangedListener(new OnVideoSizeChangedListener() {
          @Override
          public void onVideoSizeChanged(MediaPlayer mp, int width, int height) {

              int orientation = -1;

              if(width < height){
                  orientation = 0;
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);}
              else{
                  orientation = 1;
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);}

          }
      });
  } catch (IllegalArgumentException e) {
      e.printStackTrace();
  } catch (SecurityException e) {
      e.printStackTrace();
  } catch (IllegalStateException e) {
      e.printStackTrace();
  } catch (IOException e) {
      e.printStackTrace();
  }

Ответ 2

Уровень Api 17 позже, мы можем извлечь ориентацию видео: MediaMetadataRetriever

MediaMetadataRetriever m = new MediaMetadataRetriever();

m.setDataSource(path);
Bitmap thumbnail = m.getFrameAtTime();
//
if (Build.VERSION.SDK_INT >= 17) {
    String s = m.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION);

    Log.e("Rotation", s);
}

Ответ 3

FFmpegMediaMetadataRetriever может это сделать и работает с API 7 +:

FFmpegMediaMetadataRetriever fmmr = new FFmpegMediaMetadataRetriever();
fmmr.setDataSource(path);
String rotation = fmmr.extractMetadata(FFmpegMediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION);
Log.e("Rotation", rotation);
fmmr.release();