有没有办法可以使用飞镖访问计算机上的网络摄像头。我已经尝试过文档并阅读了博客,但似乎以前没有人问过这个问题。
谢谢,肯尼斯
访问 cam 不一定是 Dart 特定的问题,而是是否存在可通过 Dart 访问的相应 HTML5 API。
MediaStream和LocalMediaStream可能是您正在寻找的。
我尝试了以下但没有成功:
VideoElement webcamVideo = query('#webcamVideo');
window.navigator.webkitGetUserMedia({'video': true}, (e) {
print(e);
webcamVideo.src = new DOMURL().createObjectURL(e);
});
问题是在 Dart SDK 版本 10311 中,DOMURL 接口中明显缺少 createObjectURL(),尽管它在 _DOMURLImpl 中可用(编辑:作为静态方法)。
我认为这可能有助于使用 Flutter/Dart 访问网络摄像头
import 'package:flutter/material.dart';
import 'dart:html';
import 'dart:ui' as ui;
class WebCam extends StatefulWidget {
const WebCam({Key? key}) : super(key: key);
@override
_WebCamState createState() => _WebCamState();
}
class _WebCamState extends State<WebCam> {
// Webcam widget to insert into the tree
late Widget _webcamWidget;
// VideoElement
late VideoElement _webcamVideoElement;
@override
void initState() {
super.initState();
// Create a video element which will be provided with stream source
_webcamVideoElement = VideoElement();
// Register an webcam
// ignore: undefined_prefixed_name
ui.platformViewRegistry.registerViewFactory(
'webcamVideoElement', (int viewId) => _webcamVideoElement);
// Create video widget
_webcamWidget =
HtmlElementView(key: UniqueKey(), viewType: 'webcamVideoElement');
// Access the webcam stream
window.navigator.getUserMedia(video: true).then((MediaStream stream) {
_webcamVideoElement.srcObject = stream;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: SingleChildScrollView(
child: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'Webcam MediaStream:',
style: TextStyle(fontSize: 30, fontStyle: FontStyle.italic),
),
Container(width: 750, height: 750, child: _webcamWidget),
],
),
),
),
floatingActionButton: FloatingActionButton(
onPressed: () {
print(_webcamVideoElement.srcObject!.active!);
if (_webcamVideoElement.srcObject!.active!) {
_webcamVideoElement.play();
} else {
_webcamVideoElement.pause();
}
},
tooltip: 'Start stream, stop stream',
child: Icon(Icons.play_circle),
),
);
}
}