我有一台 ezviz h8c 相机。我正在尝试从我的 flutter 应用程序访问此相机以获取流并控制相机的移动。 我已经能够使用 vlc_player 包获取带有 RTSP url 的流。 为了控制相机的移动,我尝试使用 pub.dev 中的 easy_onvif 包。 但是当我尝试使用 onvif.connect 命令连接时,它显示 DioException 错误。 这是我一直在尝试连接相机来控制运动的代码。
Future<void> connect({required String ip}) async {
try {
onvif = await Onvif.connect(
host: ip,
username: 'admin', // Replace with your username
password: 'password', // Replace with your password
);
log('💚 ✅🎄🍀🌲🐍 OnVIFService: connected to $ip');
await getToken(); // Fetch token after successful connection
} catch (error) {
log('💚 ✅🎄🍀🌲🐍 OnVIFService: connection error: $error');
}
}
从这里我调用该函数
onPressed: () async {
await onvifService
.connect(ip: '192.168.0.103')
.then((value) => onvifService.moveLeft());
debugPrint("working");
onvifService.getToken();
}
但是当我尝试连接相机时,显示以下错误。
I/flutter ( 6295): ‼️ 13:20:06.161941 错误 UI Loggy - LoggingInterceptors - 错误: I/flutter ( 6295): DioException [连接超时]: 请求连接花费的时间超过 0:00:20.000000 并且被中止。要消除此异常,请尝试将 RequestOptions.connectTimeout 提高到 0:00:20.000000 的持续时间以上,或提高服务器的响应时间。 我/颤振(6295):工作 [log] 💚 ✅🎄🍀🌲🐍 OnVIFService: 连接错误: 异常: DioException [连接超时]: 请求连接花费的时间超过 0:00:20.000000 并且被中止。要消除此异常,请尝试将 RequestOptions.connectTimeout 提高到 0:00:20.000000 的持续时间以上,或提高服务器的响应时间。 [日志] OnVIFService:未设置令牌 [日志] OnVIFService:令牌为空
任何人都可以向我建议如何修复此错误并连接我的相机以使用 easy_onvif 包控制 ptz 吗? 谢谢 如果下面有帮助,我会给出代码来获取工作正常的流。
import 'package:flutter/material.dart';
import 'package:flutter_vlc_player/flutter_vlc_player.dart';
import '../widgets/onvif_button.dart';
/// Stateful widget to fetch and then display video content.
class VideoApp extends StatefulWidget {
const VideoApp({super.key});
@override
_VideoAppState createState() => _VideoAppState();
}
class _VideoAppState extends State<VideoApp> {
late VlcPlayerController _controller;
@override
void initState() {
super.initState();
_controller = VlcPlayerController.network(
"rtsp://admin:[email protected]/H.264",
autoPlay: true)
..initialize().then((_) {
// Ensure the first frame is shown after the video is initialized, even before the play button has been pressed.
setState(() {});
});
}
@override
Widget build(BuildContext context) {
return Column(
children: [
SizedBox(
height: MediaQuery.sizeOf(context).height * 0.3,
child: VlcPlayer(
controller: _controller,
aspectRatio: 16 / 9, // Adjust aspect ratio as needed
placeholder: const Center(
child:
CircularProgressIndicator()), // Optional loading indicator
),
),
SizedBox(
height: MediaQuery.sizeOf(context).height * 0.1,
child: OnvifButton(),
)
],
);
}
@override
void dispose() {
super.dispose();
_controller.dispose();
}
}
通过nmap扫描我发现ezviz h8c相机有554、8000、9010端口是开放的。
我也遇到了同样的问题,我的解决方案是配置我的IP 我的相机是 Tapo C310,这是 IP http://ip_here:2020/onvif/device_service