|
|
@@ -204,7 +204,15 @@ import {
|
|
|
ZoomOut
|
|
|
} from '@element-plus/icons-vue'
|
|
|
import VideoPlayer from '@/components/VideoPlayer.vue'
|
|
|
-import { startPTZ, stopPTZ, PTZ_DIRECTIONS, startZoom, stopZoom, PTZ_ZOOM_DIRECTIONS } from '@/api/ptz'
|
|
|
+import {
|
|
|
+ startPTZ,
|
|
|
+ stopPTZ,
|
|
|
+ PTZ_DIRECTIONS,
|
|
|
+ startZoom,
|
|
|
+ stopZoom,
|
|
|
+ PTZ_ZOOM_DIRECTIONS,
|
|
|
+ type CameraVendor
|
|
|
+} from '@/api/ptz'
|
|
|
|
|
|
const playerRef = ref<InstanceType<typeof VideoPlayer>>()
|
|
|
|
|
|
@@ -220,10 +228,29 @@ const playConfig = reactive({
|
|
|
muted: true
|
|
|
})
|
|
|
|
|
|
-// PTZ 配置
|
|
|
+// 摄像头 PTZ 配置映射 (统一使用 viewer 账号)
|
|
|
+const cameraPtzConfigs: Record<string, { vendor: CameraVendor; host: string; username: string; password: string }> = {
|
|
|
+ // ANPVIZ
|
|
|
+ anpviz: { vendor: 'ANPVIZ', host: '192.168.0.96', username: 'viewer', password: 'Wxc767718929' },
|
|
|
+ anpviz_raw: { vendor: 'ANPVIZ', host: '192.168.0.96', username: 'viewer', password: 'Wxc767718929' },
|
|
|
+ anpviz_sub: { vendor: 'ANPVIZ', host: '192.168.0.96', username: 'viewer', password: 'Wxc767718929' },
|
|
|
+ // CT-IP500 (无 PTZ)
|
|
|
+ 'ct-ip500': { vendor: 'CT-IP500', host: '', username: '', password: '' },
|
|
|
+ 'ct-ip500_sub': { vendor: 'CT-IP500', host: '', username: '', password: '' },
|
|
|
+ // HIKVISION 海康威视
|
|
|
+ hikvision: { vendor: 'HIKVISION', host: '192.168.0.64', username: 'viewer', password: 'Wxc767718929' },
|
|
|
+ hikvision_sub: { vendor: 'HIKVISION', host: '192.168.0.64', username: 'viewer', password: 'Wxc767718929' },
|
|
|
+ // SVBC (无 PTZ)
|
|
|
+ svbc: { vendor: 'SVBC', host: '', username: '', password: '' },
|
|
|
+ svbc_raw: { vendor: 'SVBC', host: '', username: '', password: '' },
|
|
|
+ svbc_sub: { vendor: 'SVBC', host: '', username: '', password: '' }
|
|
|
+}
|
|
|
+
|
|
|
+// PTZ 配置 (根据选择的摄像头动态更新)
|
|
|
const ptzConfig = reactive({
|
|
|
+ vendor: 'HIKVISION' as CameraVendor,
|
|
|
host: '192.168.0.64',
|
|
|
- username: 'admin',
|
|
|
+ username: 'viewer',
|
|
|
password: 'Wxc767718929'
|
|
|
})
|
|
|
|
|
|
@@ -305,6 +332,17 @@ function startPlay() {
|
|
|
// 切换摄像头流
|
|
|
function handleStreamChange(streamName: string) {
|
|
|
addLog(`切换摄像头: ${streamName}`, 'info')
|
|
|
+
|
|
|
+ // 更新 PTZ 配置
|
|
|
+ const ptzSettings = cameraPtzConfigs[streamName]
|
|
|
+ if (ptzSettings) {
|
|
|
+ ptzConfig.vendor = ptzSettings.vendor
|
|
|
+ ptzConfig.host = ptzSettings.host
|
|
|
+ ptzConfig.username = ptzSettings.username
|
|
|
+ ptzConfig.password = ptzSettings.password
|
|
|
+ addLog(`PTZ 配置已切换到: ${ptzSettings.vendor} (${ptzSettings.host || '无PTZ'})`, 'info')
|
|
|
+ }
|
|
|
+
|
|
|
if (isPlaying.value) {
|
|
|
// 如果正在播放,重新连接新的流
|
|
|
playerRef.value?.reconnect()
|
|
|
@@ -368,7 +406,7 @@ function onError(error: any) {
|
|
|
// PTZ 控制
|
|
|
async function handlePTZ(direction: keyof typeof PTZ_DIRECTIONS) {
|
|
|
if (!ptzConfig.host || !ptzConfig.username || !ptzConfig.password) {
|
|
|
- ElMessage.warning('请先配置摄像头信息')
|
|
|
+ ElMessage.warning('当前摄像头不支持 PTZ 控制')
|
|
|
return
|
|
|
}
|
|
|
|
|
|
@@ -376,14 +414,15 @@ async function handlePTZ(direction: keyof typeof PTZ_DIRECTIONS) {
|
|
|
{
|
|
|
host: ptzConfig.host,
|
|
|
username: ptzConfig.username,
|
|
|
- password: ptzConfig.password
|
|
|
+ password: ptzConfig.password,
|
|
|
+ vendor: ptzConfig.vendor
|
|
|
},
|
|
|
direction,
|
|
|
ptzSpeed.value
|
|
|
)
|
|
|
|
|
|
if (result.success) {
|
|
|
- addLog(`PTZ 移动: ${direction} (速度: ${ptzSpeed.value})`, 'info')
|
|
|
+ addLog(`PTZ 移动: ${direction} (${ptzConfig.vendor}, 速度: ${ptzSpeed.value})`, 'info')
|
|
|
} else {
|
|
|
addLog(`PTZ 控制失败: ${result.error}`, 'error')
|
|
|
}
|
|
|
@@ -395,7 +434,8 @@ async function handlePTZStop() {
|
|
|
const result = await stopPTZ({
|
|
|
host: ptzConfig.host,
|
|
|
username: ptzConfig.username,
|
|
|
- password: ptzConfig.password
|
|
|
+ password: ptzConfig.password,
|
|
|
+ vendor: ptzConfig.vendor
|
|
|
})
|
|
|
|
|
|
if (!result.success) {
|
|
|
@@ -416,7 +456,8 @@ async function handleZoomChange(val: number) {
|
|
|
await stopZoom({
|
|
|
host: ptzConfig.host,
|
|
|
username: ptzConfig.username,
|
|
|
- password: ptzConfig.password
|
|
|
+ password: ptzConfig.password,
|
|
|
+ vendor: ptzConfig.vendor
|
|
|
})
|
|
|
return
|
|
|
}
|
|
|
@@ -428,7 +469,8 @@ async function handleZoomChange(val: number) {
|
|
|
{
|
|
|
host: ptzConfig.host,
|
|
|
username: ptzConfig.username,
|
|
|
- password: ptzConfig.password
|
|
|
+ password: ptzConfig.password,
|
|
|
+ vendor: ptzConfig.vendor
|
|
|
},
|
|
|
direction,
|
|
|
speed
|
|
|
@@ -443,7 +485,8 @@ async function handleZoomRelease() {
|
|
|
await stopZoom({
|
|
|
host: ptzConfig.host,
|
|
|
username: ptzConfig.username,
|
|
|
- password: ptzConfig.password
|
|
|
+ password: ptzConfig.password,
|
|
|
+ vendor: ptzConfig.vendor
|
|
|
})
|
|
|
addLog('缩放停止', 'info')
|
|
|
}
|