首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用video_stream包启动照相机会导致运行时错误,在颤振上崩溃应用程序

使用video_stream包启动照相机会导致运行时错误,在颤振上崩溃应用程序
EN

Stack Overflow用户
提问于 2022-07-25 08:30:11
回答 1查看 117关注 0票数 0

我正在尝试播放livestream,下面是以下文档:https://blog.flutterflow.io/flutter-mux-live-streaming/

但是,当单击我的相机按钮启动相机预览屏幕时,我收到一个运行时错误:

代码语言:javascript
复制
[VERBOSE-3:platform_message_handler_ios.mm(106)] Check failed: task_runners_.GetPlatformTaskRunner()->RunsTasksOnCurrentThread().
* thread #6, queue = 'com.marshalltechnology.video_stream.dispatchqueue', stop reason = signal SIGABRT
frame #0: 0x00000001d9339b38 libsystem_kernel.dylib`__pthread_kill + 8
libsystem_kernel.dylib`__pthread_kill:
->  0x1d9339b38 <+8>:  b.lo   0x1d9339b58               ; <+40>
0x1d9339b3c <+12>: pacibsp
0x1d9339b40 <+16>: stp    x29, x30, [sp, #-0x10]!
0x1d9339b44 <+20>: mov    x29, sp
Target 0: (Runner) stopped.
Lost connection to device.

我怀疑这是video_stream包的问题

目前正在使用这些包依赖项许可处理程序

这是以前在一个旧建筑上的工作。

我的Mac正在运行

颤振稳定3.0.5,Xcode 13.4.1

下面是我的代码片段,非常类似于上面提供的文档

Main.dart

代码语言:javascript
复制
void main() async { 
  WidgetsFlutterBinding.ensureInitialized();
  
  // Get the available device cameras
  try {
    cameras = await availableCameras();
    } on CameraException catch (e) {
    debugPrint(e.toString());
  }
  runApp(const MyApp());
}

Livestream.dart

代码语言:javascript
复制
class LivestreamScreen extends StatefulWidget {

  @override
  State<LivestreamScreen> createState() => _LivestreamScreenState();
}

class _LivestreamScreenState extends State<LivestreamScreen> {
  CameraController? _controller;

  bool _isCameraPermissionGranted = false;
  bool _isCameraInitialized = false;
  bool _isInitializing = false;
  bool _isStreaming = false;
  bool _isFrontCamSelected = true;

 _getPermissionStatus() async {
 // Get the camera permission, if granted start initializing it
 await Permission.camera.request();
 var status = await Permission.camera.status;

 if (status.isGranted) {
    log('Camera Permission: GRANTED');
    setState(() {
     _isCameraPermissionGranted = true;
    });

  // Set and initialize the new camera with front camera
  // camera[0]: Back camera of the device.
  // camera[1]: Front camera of the device.
  _onNewCameraSelected(cameras[1]);
} else {
  log('Camera Permission: DENIED');
    }
} 

void _onNewCameraSelected(CameraDescription cameraDescription) async {
// Initialize a new camera
setState(() {
  _isCameraInitialized = false;
});

final previousCameraController = _controller;

final CameraController cameraController = CameraController(
  cameraDescription,
  ResolutionPreset.high,
  enableAudio: true,
  androidUseOpenGL: true,
);

await previousCameraController?.dispose();

if (mounted) {
setState(() {
    _controller = cameraController;
  });
}

_controller!.addListener(() {
  // _isStreaming = _controller!.value.isStreamingVideoRtmp;
  _isCameraInitialized = _controller!.value.isInitialized;

  if (mounted) setState(() {});
});

try {
  await cameraController.initialize();
} on CameraException catch (e) {
  log('Error initializing camera: $e');
}

    if (mounted) {
      setState(() {
      _isCameraInitialized = _controller!.value.isInitialized;
     });
   }
 } 

@override
  void didChangeAppLifecycleState(AppLifecycleState state) {
    // App state changed before we got the chance to initialize.
    if (_controller == null || !_controller!.value.isInitialized) {
      return;
    }
    if (state == AppLifecycleState.inactive) {
      _controller?.dispose();
    } else if (state == AppLifecycleState.resumed) {
      if (_controller != null) {
        _onNewCameraSelected(_controller!.description!);
      }
    }
  }   
@override
  void initState() {
    _getPermissionStatus();

    super.initState();
  }

  @override
      void dispose() {
        _controller?.dispose();

        super.dispose();
      }

 
@override
Widget build (BuildContext context) {
 return Scaffold(
appBar: AppBar{
actions: [
IconButton(
    onPressed: () {
       _isFrontCamSelected
           ? _onNewCameraSelected(cameras[0])
           : _onNewCameraSelected(cameras[1]);

       setState(() {
         _isFrontCamSelected = !_isFrontCamSelected;
       }
      );
     },
    ],
body: Stack(
  children: [
     _isCameraPermissionGranted
        ? _isCameraInitialized
          ? Stack(
             children: [
              ClipRRect( 
                child: AspectRatio(
                  aspectRatio: _controller!.value.aspectRatio,
                  child: CameraPreview(_controller!),
                ),
               ),
            // UI body code
           ],
          : Center(
              child: CircularProgressIndicator(),
            )
        : Column(
        Text(
          'Permission denied',
        ),
       ElevatedButton(
         onPressed: () {
          _getPermissionStatus();
         },
         child: Text(
           'Give permission'
           ),
          }
         )
        ],
       ),
      ],
     ),
    ),   
   }

感谢你在这方面的任何帮助

EN

回答 1

Stack Overflow用户

发布于 2022-07-25 11:50:52

我试着将我的颤振降到2.10.0,以测试它是否是包的兼容性问题,而且确实有效。可能是依赖关系发生了一些重大变化。在此期间,我将寻找另一个包裹的解决办法

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73106148

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档