如何在Flutter应用中接入海康威视IP摄像头并显示实时画面?
解决Flutter接入海康威视IP摄像头实时画面的方案
方案1:通过RTSP流+flutter_vlc_player实现(推荐)
海康威视IP摄像头原生支持RTSP协议,你可以直接拼接RTSP地址拉取实时流,用flutter_vlc_player组件渲染到Container中——这个库支持空安全,适配最新Flutter版本,没有旧组件兼容问题。
步骤1:添加依赖
在pubspec.yaml中加入以下依赖,执行flutter pub get完成安装:
dependencies: flutter_vlc_player: ^7.0.0 # 建议使用当前最新版本
步骤2:构造海康威视RTSP地址
根据你的摄像头参数拼接固定格式的地址:
- 主码流(清晰度高,占用带宽大):
rtsp://[用户名]:[密码]@[IP地址]:[端口]/Streaming/Channels/101 - 子码流(适合移动端,带宽占用小):
rtsp://[用户名]:[密码]@[IP地址]:[端口]/Streaming/Channels/102
示例:若用户名admin、密码12345、IP192.168.1.100、端口554,子码流地址为rtsp://admin:12345@192.168.1.100:554/Streaming/Channels/102
步骤3:在Container中渲染实时画面
将VlcPlayer组件嵌套进目标Container,示例代码:
import 'package:flutter/material.dart'; import 'package:flutter_vlc_player/flutter_vlc_player.dart'; class CameraView extends StatefulWidget { const CameraView({super.key}); @override State<CameraView> createState() => _CameraViewState(); } class _CameraViewState extends State<CameraView> { late VlcPlayerController _cameraController; @override void initState() { super.initState(); // 初始化控制器,替换为你的RTSP地址 _cameraController = VlcPlayerController.network( 'rtsp://admin:12345@192.168.1.100:554/Streaming/Channels/102', hwAcc: HwAcc.full, autoPlay: true, options: VlcPlayerOptions(), ); } @override void dispose() { _cameraController.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return Scaffold( body: Container( width: 300, // 自定义容器宽度 height: 200, // 自定义容器高度 child: VlcPlayer( controller: _cameraController, aspectRatio: 16 / 9, // 匹配摄像头画面比例,可按需调整 placeholder: const Center(child: CircularProgressIndicator()), ), ), ); } }
注意事项
- 确保设备与摄像头处于同一办公楼内网
- 若摄像头端口非默认554,替换为实际端口
- 若RTSP验证失败,检查用户名密码是否正确,或登录摄像头Web后台确认RTSP协议已开启
方案2:海康威视开放SDK原生桥接(进阶)
如果需要云台控制、录像回放等高级功能,可使用海康官方原生SDK,通过Flutter平台通道(Method Channel)实现跨端调用:
- 安卓端集成海康Android SDK
- iOS端集成海康iOS SDK
此方案需编写原生桥接代码,适合有原生开发经验的场景。
备选库
若flutter_vlc_player存在兼容性问题,可尝试better_player,它同样支持RTSP流播放,且兼容空安全。
内容的提问来源于stack exchange,提问作者Salar Azad
相关产品推荐
相关产品推荐

