大华摄像头对接踩坑记录

1、如果需要部署到Linux,需要把StdCallCallback全部改为Callback

 如果需要部署到Linux,需要把StdCallCallback全部改为Callback

2、在使用jar包直接部署没问题,但是使用dockerfile部署时出现了许多错误。

 解决方式

jar包直接部署(start.sh):

ps -ef | grep -v grep | grep " /bin/java -Xms256m -Xmx256m -Xmn128m -Xss256k -server -jar ./visualization-service.jar"  | awk '{print $2}' | xargs kill -9
nohup /bin/java -Xms256m -Xmx256m -Xmn128m -Xss256k -server -jar ./visualization-service.jar >> ./log-dev.log 2>&1 &
tail -f ./log-dev.log

原始为:

FROM openjdk:8-jdk-alpine
LABEL GitRepo=#GIT_URL
ADD Shanghai /etc/localtime
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories  \
    && apk update \
    && apk add ttf-dejavu;apk add fontconfig
WORKDIR /app/
COPY target/lib/ /app/lib/
COPY target/*.jar /app/app.jar
COPY target/conf/ /app/conf/
COPY elastic-apm-agent-1.34.1.jar /app/elastic-apm-agent-1.34.1.jar
COPY start-app.sh /usr/bin/start-app.sh
RUN chmod +x /usr/bin/start-app.sh  && echo "Asia/Shanghai" > /etc/timezone
ENTRYPOINT /usr/bin/start-app.sh

修改为:

FROM openjdk:8-jdk-buster
LABEL GitRepo=#GIT_URL
ADD Shanghai /etc/localtime
RUN sed -i 's/http:\/\/deb.debian.org\/debian\//http:\/\/mirrors.tuna.tsinghua.edu.cn\/debian\//g' /etc/apt/sources.list \
    && apt-get update \
    && apt-get install -y fonts-dejavu fontconfig

WORKDIR /app/
COPY target/lib/ /app/lib/
COPY target/*.jar /app/app.jar
COPY target/conf/ /app/conf/
COPY target/linux64/ /app/linux64/
COPY elastic-apm-agent-1.34.1.jar /app/elastic-apm-agent-1.34.1.jar
COPY start-app.sh /usr/bin/start-app.sh
RUN chmod +x /usr/bin/start-app.sh  && echo "Asia/Shanghai" > /etc/timezone
ENTRYPOINT /usr/bin/start-app.sh

 直接修改成如下也能成功运行(个人测试修改,因为一开始判断为jdk版本问题,修改jdk版本后可成功运行)

FROM centos:7.6.1810

RUN yum install -y wget tar

ENV LANG en_US.UTF-8
ENV LANGUAGE en_US.UTF-8

# 下载并解压 JDK 到 /opt 目录
WORKDIR /opt
RUN wget https://download.java.net/openjdk/jdk8u41/ri/openjdk-8u41-b04-linux-x64-14_jan_2020.tar.gz
RUN tar -zxvf openjdk-8u41-b04-linux-x64-14_jan_2020.tar.gz
RUN rm openjdk-8u41-b04-linux-x64-14_jan_2020.tar.gz

# 设置环境变量
ENV JAVA_HOME /opt/java-se-8u41-ri
ENV PATH $PATH:$JAVA_HOME/bin

LABEL GitRepo=#GIT_URL
ADD Shanghai /etc/localtime
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories \
&& apk update \
&& apk add ttf-dejavu;apk add fontconfig
WORKDIR /app/
COPY target/lib/ /app/lib/
COPY target/*.jar /app/app.jar
COPY target/conf/ /app/conf/
COPY target/linux64/ /app/linux64/
COPY elastic-apm-agent-1.34.1.jar /app/elastic-apm-agent-1.34.1.jar
COPY start-app.sh /usr/bin/start-app.sh
RUN chmod +x /usr/bin/start-app.sh && echo "Asia/Shanghai" > /etc/timezone
ENTRYPOINT /usr/bin/start-app.sh

3、打包格式从jar包变为dockerfile配置的pom.xml修改

<profiles>
<profile>
<id>test</id>
<properties>
<env-name>test</env-name>
</properties>
</profile>

<profile>
<id>pre</id>
<properties>
<env-name>pre</env-name>
</properties>
</profile>

<profile>
<id>prod</id>
<properties>
<env-name>prod</env-name>
</properties>
</profile>
</profiles>

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<!-- <configuration>-->
<!-- <layout>ZIP</layout>-->
<!-- <executable>true</executable>-->
<!-- <includes>-->
<!-- <include>-->
<!-- <groupId>com.tengyun.ykt</groupId>-->
<!-- <artifactId>base-common</artifactId>-->
<!-- </include>-->
<!-- <include>-->
<!-- <groupId>com.tengyun.ykt</groupId>-->
<!-- <artifactId>service-client</artifactId>-->
<!-- </include>-->
<!-- </includes>-->
<!-- </configuration>-->
<!-- </plugin>-->

<!-- <plugin>-->
<!-- <groupId>org.apache.maven.plugins</groupId>-->
<!-- <artifactId>maven-dependency-plugin</artifactId>-->
<!-- <version>3.1.1</version>-->
<!-- <executions>-->
<!-- <execution>-->
<!-- <id>copy-dependencies</id>-->
<!-- <phase>package</phase>-->
<!-- <goals>-->
<!-- <goal>copy-dependencies</goal>-->
<!-- </goals>-->
<!-- <configuration>-->
<!-- <excludeGroupIds>-->
<!-- com.tengyun.ykt-->
<!-- </excludeGroupIds>-->
<!-- <outputDirectory>${project.build.directory}/lib/</outputDirectory>-->
<!-- </configuration>-->
<!-- </execution>-->
<!-- </executions>-->

</plugin>

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.2.0</version>
<executions>
<execution>
<id>copy-resources</id>
<phase>package</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<encoding>UTF-8</encoding>
<!-- <outputDirectory>${project.build.directory}/conf</outputDirectory>-->
<!-- <resources>-->
<!-- <resource>-->
<!-- <directory>src/main/resources/conf/es-${env-name}</directory>-->
<!-- </resource>-->
<!-- </resources>-->
<!-- </configuration>-->
<!-- </execution>-->
<!-- <execution>-->
<!-- <id>copy-resources2</id>-->
<!-- <phase>package</phase>-->
<!-- <goals>-->
<!-- <goal>copy-resources</goal>-->
<!-- </goals>-->
<!-- <configuration>-->
<!-- <encoding>UTF-8</encoding>-->

<outputDirectory>${project.build.directory}/linux64</outputDirectory>
<resources>
<resource>
<directory>src/main/resources/conf/linux64</directory>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>

</plugins>
</build>

 注释的打包方式为dockerfile配套打包方式

visualization-service.jar打包后实际大小为56M

4、使用socketio后,docker服务器找不到端口

server:
port: 8008
socketio:
host: 0.0.0.0
port: 8009
maxFramePayloadLength: 1048576
maxHttpContentLength: 1048576
bossCount: 1
workCount: 1
allowCustomRequests: true
upgradeTimeout: 10000
pingTimeout: 60000
pingInterval: 25000

socketio从localhost/127.0.0.1,改为0.0.0.0

5、在Linux下,大华摄像头打出的中文log为乱码,并且保存也是乱码,无法根据乱码的中文匹配es数据

原始为:

trafficInfo.m_PlateNumber = new String(msg.stuObject.szText, "GBK").trim();

修改后:

try {
boolean isWindows = System.getProperty("os.name").toLowerCase().contains("win");
if (isWindows){
log.info("车牌号GBK:" + new String(msg.stuObject.szText, "GBK").trim());
trafficInfo.m_PlateNumber = new String(msg.stuObject.szText, "GBK").trim();
}else {
log.info("车牌号UTF8:"+new String(msg.stuObject.szText, StandardCharsets.UTF_8).trim());
trafficInfo.m_PlateNumber = new String(msg.stuObject.szText, StandardCharsets.UTF_8).trim();
}

} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}

这就是坑了我三天时间的东西(第二点),没想到普通的打包部署方式和dockerfile的部署如此不一样

  • 14
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java 大华摄像头对接可以使用大华提供的 SDK(Software Development Kit)来实现。以下是一个简单的对接示例: 1. 下载并安装大华提供的 SDK。 2. 在 Java 项目中导入 SDK 中的 Jar 包。 3. 编写代码进行连接和使用摄像头。 示例代码: ``` import com.dahua.netsdk.*; public class DahuaCamera { public static void main(String[] args) { // 初始化 SDK HCNetSDK hCNetSDK = HCNetSDK.INSTANCE; hCNetSDK.NET_DVR_Init(); // 登录设备 HCNetSDK.NET_DVR_USER_LOGIN_INFO loginInfo = new HCNetSDK.NET_DVR_USER_LOGIN_INFO(); loginInfo.sDeviceAddress = "192.168.1.100"; // 设备 IP 地址 loginInfo.wPort = 8000; // 设备端口号 loginInfo.sUserName = "admin"; // 登录用户名 loginInfo.sPassword = "123456"; // 登录密码 HCNetSDK.NET_DVR_DEVICEINFO_V40 deviceInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V40(); int loginHandle = hCNetSDK.NET_DVR_Login_V40(loginInfo, deviceInfo); if (loginHandle == -1) { System.out.println("登录失败:" + hCNetSDK.NET_DVR_GetLastError()); return; } // 获取实时预览句柄 HCNetSDK.NET_DVR_PREVIEWINFO previewInfo = new HCNetSDK.NET_DVR_PREVIEWINFO(); previewInfo.hPlayWnd = null; // 窗口句柄,传入 null 表示不显示画面 previewInfo.lChannel = 1; // 通道号 previewInfo.dwStreamType = 0; // 码流类型,0-主码流,1-子码流 previewInfo.dwLinkMode = 0; // 连接模式,0-TCP 方式,1-UDP 方式 previewInfo.bBlocked = true; // 是否阻塞取流 int previewHandle = hCNetSDK.NET_DVR_RealPlay_V40(loginHandle, previewInfo, null); if (previewHandle == -1) { System.out.println("实时预览失败:" + hCNetSDK.NET_DVR_GetLastError()); return; } // 关闭预览和注销登录 hCNetSDK.NET_DVR_StopRealPlay(previewHandle); hCNetSDK.NET_DVR_Logout(loginHandle); hCNetSDK.NET_DVR_Cleanup(); } } ``` 以上代码仅为示例,具体实现需要根据实际情况进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值