使用video_stream包启动相机会导致运行时错误,导致应用程序崩溃



我正在尝试直播,遵循以下文档:https://blog.flutterflow.io/flutter-mux-live-streaming/

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

[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.

我怀疑这是视频流包的问题

当前正在使用这些包依赖项权限处理程序,视频流

这是以前在旧版本上工作的

我的Mac目前正在上运行

Flutter稳定3.0.5,Xcode 13.4.1

这是我的代码片段,与上面提供的文档非常相似

主要部分

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

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'
),
}
)
],
),
],
),
),   
}

感谢对的任何帮助

我试图将我的flutter降级到2.10.0,以测试这是否是包的兼容性问题,而且确实有效。猜测依赖关系中有一些突破性的变化。在此期间,我将寻找另一个包的变通方法

相关内容

最新更新