Плагин Flutter Camera Пейзаж Видео на iPhone - PullRequest
1 голос
/ 25 марта 2019

Видео не записывается в правильной ориентации при запуске примера приложения Camera Plugin на моем iPhone X в альбомной ориентации.Хорошо работает в Portrait.

enter image description here

pubspec.yaml

версия: 1.0.0 + 1

среда: sdk: "> = 2.0.0-dev.68.0 <3.0.0" </p>

зависимости: flutter: sdk: flutter

cupertino_icons: ^ 0.1.2

камера: ^ 0.4.2

path_provider: ^ 0.5.0

video_player: ^ 0.10.0

firebase_core: ^ 0.2.5

доктор флаттера

[✓] Флаттер (неизвестный канал, v1.1.0, в Mac OS X 10.14.3 18D109, локаль en-AU)

[✓] Android toolchain - разработка для устройств Android (Android SDK 28.0.3)

[✓] iOS toolchain - разработка для устройств iOS (Xcode 10.1)

[✓] Android Studio (версия 3.2)

[✓] Подключенное устройство (1 доступно)

Ответы [ 2 ]

0 голосов
/ 13 мая 2019

Пока поддержка не появится в официальном пакете, у меня был успех с flutter_ffmpeg для установки правильных метаданных.


const int AV_LOG_ERROR = 16;

final FlutterFFmpeg _flutterFFmpeg = new FlutterFFmpeg();
_flutterFFmpeg.setLogLevel(AV_LOG_ERROR);

/// The :s:v:0 after -metadata is the stream specifier,
/// which just tells ffmpeg to which stream it should add the metadata.
/// :s stands for the streams of the input file,
/// :v selects video streams and the number is the stream index,
/// zero-based - so this will select the first video stream.
/// The -c option specifies the codec
/// to be used, with copy for just copying the streams, without re-encoding.
final String looselessConversion = '-i $videoPath.mp4 -c copy -metadata:s:v:0 rotate=90 $videoPath-processed.mp4';

try {
  final int returnCode = await _flutterFFmpeg.execute(looselessConversion);

  if(returnCode == 0) {
    // delete the origina video file
    await File('$videoPath.mp4').delete();
  } else {
    throw _flutterFFmpeg.getLastCommandOutput();
  }
} catch (e) {
  print('video processing error: $e);
}

Поскольку я не кодирую видео (просто редактирую метаданные), процесс завершается за меньшее время10 мс для любой длины видеофайла.

0 голосов
/ 25 марта 2019

@ Дейв, попробуйте следующие виджеты, чтобы установить предварительный просмотр в альбомной ориентации:


  Widget widTakePhoto2(context) {

       if (!ctlCamera.value.isInitialized) {

          return Container();

        }



    return Stack(

      children: <Widget>[

        RotatedBox(

          quarterTurns: 3,

          child: AspectRatio(

            aspectRatio: ctlCamera.value.aspectRatio,

            child: CameraPreview(ctlCamera),

          ),

        ),

        Center(child: Text(

            (gv.intHomeCameraCountDown > 0) ? gv.intHomeCameraCountDown.toString() : '',

            style: TextStyle(fontSize: sv.dblDefaultFontSize * 3, color: Colors.red, fontWeight: FontWeight.bold)))

      ],

    );

  }

т.е. поместите аспект аспекта в виджет rotatedbox, этот виджет widtakephoto2 должен быть «телом» вашего виджета скаффолда.и забудьте о виджете стека, я использую стек, чтобы показать 3, 2, 1 перед съемкой фотографии или видео.

...