颤动相机视频录制和设备方向问题

问题描述 投票:0回答:1

我正在尝试制作一款适用于 7 英寸及以上屏幕尺寸的平板电脑的移动应用程序。

应用程序在登录完成后启动时使用相机。

摄像机将录制视频并同时将摄像机显示在屏幕上,作为角落的小方框。

问题是当相机初始化时,即使没有开始录制视频,应用程序也会更改方向并显示一条消息“旋转以获得更好的视图”。这种情况发生在我用来测试应用程序的所有 android studio 平板电脑模拟器设备中。我还没有在真实设备上测试过这个!

代码:

我使用特定方向作为横向锁定应用程序以在应用程序启动时使用。

  void main() async {
    SystemChrome.setPreferredOrientations(
          [DeviceOrientation.landscapeLeft, DeviceOrientation.landscapeRight])
      .then((_) {
      runApp(MyApp(prefs));
    });
  }

相机控制器对象的初始化,我还尝试在这里强制定向两次,但在开始使用相机时它仍然执行相同的行为来旋转屏幕:

  void initState() {
    super.initState();
    SystemChrome.setPreferredOrientations([
      DeviceOrientation.landscapeLeft,
      DeviceOrientation.landscapeRight,
    ]);
    WidgetsBinding.instance.addPostFrameCallback((_) async {
      Timer(
        const Duration(seconds: 1),
        () async {
          await _initCamera();
          // await _recordVideo();
        },
      );
    });
  }

  _initCamera() async {

    final cameras = await availableCameras();

    final CameraDescription camera = cameras
            .where(
                (camera) => camera.lensDirection == CameraLensDirection.front)
            // ignore: sdk_version_since
            .firstOrNull ??
        cameras.first;

    _cameraController = CameraController(
      camera,
      ResolutionPreset.max,
      enableAudio: true,
    );
    await _cameraController!.initialize().then((_) {
      if (!mounted) {
        return;
      }
      setState(() {});
    });

    await _cameraController!.lockCaptureOrientation(DeviceOrientation.landscapeRight);

    _isLoading = false;
    isCamera = true;
    setState(() {});
  }

对于相机预览小部件,即设备角落的小框:

    Container(
        padding: const EdgeInsets.all(4),
        decoration: BoxDecoration(
            color: isCamera
                ? isCameraRecording
                    ? Colors.deepOrange
                    : Colors.black
                : Colors.redAccent,
            borderRadius: const BorderRadius.all(Radius.circular(10))),
        child: isCamera && _cameraController != null
            ? CameraPreview(_cameraController!)
            : null,
    )

问题截图: 使用相机时旋转的 Android 平板电脑模拟器

flutter camera orientation
1个回答
0
投票

我尝试了以下方法:

  • 启用和禁用自动旋转。
  • 从谷歌商店安装多个力定向应用程序。
  • 升级 flutter 看问题是否解决。

但不幸的是,它保持了自动旋转设备的一致行为。

之后我用手机模拟器测试了一下,问题不存在。

该问题与 flutter 无关,而是与所有 Android 平板模拟器有关。

我假设在真正的 Android 平板电脑上进行测试不会产生同样的问题。我将在真实设备平板电脑上测试后更新答案!

© www.soinside.com 2019 - 2024. All rights reserved.