package com.ard.zlm.service; import com.ard.common.core.constant.SecurityConstants; import com.ard.common.core.domain.R; import com.ard.gb28181.api.RemoteGb28181Service; import com.ard.gb28181.api.domain.GbChannelDTO; import com.ard.zlm.domain.StreamChannel; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; /** * ZLM流媒体本地服务(统一管理国标通道和普通相机通道的流状态) */ @Slf4j @Service public class ZlmStreamService { @Autowired private RemoteGb28181Service remoteGb28181Service; /** * 根据ID获取通道信息 */ public R getQsDeviceInfo(Long id, String inner) { try { R r = remoteGb28181Service.getGbChannelById(id, SecurityConstants.INNER); if (r != null && r.getData() != null && r.getData().getId() != null) { return R.ok(toStreamChannel(r.getData())); } } catch (Exception e) { log.error("[ZlmStream] 查询通道信息失败 id={}", id, e); } return R.ok(new StreamChannel()); } /** * 根据流标识获取通道 */ public R getQsDeviceStream(String stream, String inner) { log.debug("[ZlmStream] 查找流: stream={}", stream); return R.ok(new StreamChannel()); } /** * 更新通道流信息 */ public R updateQsDevice(StreamChannel streamChannel, String inner) { try { if (streamChannel.getId() != null && streamChannel.getId() > 0) { GbChannelDTO dto = new GbChannelDTO(); dto.setId(streamChannel.getId()); dto.setStreamKey(streamChannel.getStreamKey()); dto.setMediaServerId(streamChannel.getMediaServerId()); dto.setStreamStatus(streamChannel.getStreamStatus()); dto.setSnap(streamChannel.getSnap()); R r = remoteGb28181Service.updateGbChannelStream(dto, SecurityConstants.INNER); if (r != null && r.getData() != null) { return r; } } } catch (Exception e) { log.error("[ZlmStream] 更新流信息失败 id={}", streamChannel.getId(), e); } return R.ok(false); } /** * 新增通道 */ public R addQsDevice(StreamChannel streamChannel, String inner) { log.info("[ZlmStream] 新增通道请求: channelName={}, channelType={}", streamChannel.getChannelName(), streamChannel.getChannelType()); return R.ok(true); } /** * 根据计划ID统计设备数量 */ public R countRecordPlanDevice(Long planId, String inner) { return R.ok(0); } /** * 清理设备计划ID */ public R cleanRecordPlanId(Long planId, String inner) { return R.ok(); } public static StreamChannel toStreamChannel(GbChannelDTO c) { StreamChannel sc = new StreamChannel(); sc.setId(c.getId()); sc.setChannelName(c.getChannelName()); sc.setDeviceCode(c.getDeviceCode()); sc.setStreamKey(c.getStreamKey()); sc.setMediaServerId(c.getMediaServerId()); sc.setStreamStatus(c.getStreamStatus()); sc.setSnap(c.getSnap()); sc.setEnableMp4(c.getEnableMp4()); sc.setGbDeviceId(c.getGbDeviceId()); sc.setGbChannelId(c.getGbChannelId()); sc.setStreamMode(c.getStreamMode()); sc.setChannelType("gb28181"); return sc; } }