Giter Site home page Giter Site logo

blackspider's Introduction

BlackSpider

简介

java 实现“ 红蜘蛛网络教室 ”协议,兼容原版红蜘蛛。跨平台运行,同时支持Windows,Linux,Mac OS。

基本原理

  1. 分析原版红蜘蛛通信协议
  2. java接收通信数据包,解析数据,还原原始视频信号
  3. 通过GUI技术显示在屏幕上

使用说明

平台 命令
linux&windows java -jar BlackSpider.jar
MacOS java -XstartOnFirstThread -jar BlackSpider.jar
native-image exe文件,暂只支持window,双击运行即可

下载

蓝奏网盘

https://wwa.lanzous.com/b01617j1g 密码:hhkt

github

Release

进度

  • 协议分析
  • 接收UDP广播
  • 图像数据还原
  • GUI
  • GraalVM本地化编译,脱离jre
  • USM锐化滤镜
  • 编写教师端:eyes:

构建

fat-jar

mvn clean
mvn -B package --file pom.xml -Dmaven.test.skip=true -Pwindows
mvn clean
mvn -B package --file pom.xml -Dmaven.test.skip=true -Plinux
mvn clean
mvn -B package --file pom.xml -Dmaven.test.skip=true -Pmac

native-image

环境参考官方文档

windows下需要安装Visual Studio 2019GraalVM 21.0.0-dev (不支持release版,暂且使用开发版),

mvn -B package --file pom.xml -Dmaven.test.skip=true -Pwindows-native

细节

协议分析

抓包工具Wireshark

image-20201229123538166

从抓包信息可以看出,红蜘蛛使用udp通信,由教师机向局域网广播信号,端口号为1689.

学生机可绑定0.0.0.0:1689,即可接收所有网卡发来,指向1689端口的udp包

数据包包含包头以及图像数据,部分主要包头数据格式如下表,包头大小为128字节。数据包如果大于1482字节,将会分包发送。

image-20201229125740926

接下来是图像数据,红蜘蛛有四种清晰度,从高到低采用的压缩格式分别是lzo&zliblzojpegjpeg有损。目前本项目实现了后三种的解码,zlib的解压方法仅在test中有所体现。

包头大小为128字节,后续紧跟图像数据,jpeg模式下,包头如下,红框展示了jpeg文件头。

image-20201229130049232

jpeg解码

在1.0版本,采用jdk自带的解码工具ImageIO,速度极慢。2.0开始采用libjpeg-turbo ,该软件采用SIMD加速,充分利用现代cpu指令集高速解码。

lzo解压

lzo是一种高速压缩算法,红蜘蛛用它对图像进行无损压缩。

jdk没有相关库,maven找一个

<!-- https://mvnrepository.com/artifact/org.anarres.lzo/lzo-core -->
<dependency>
    <groupId>org.anarres.lzo</groupId>
    <artifactId>lzo-core</artifactId>
    <version>1.0.6</version>
</dependency>

GUI呈现

在1.0版本,使用swing显示图像,正常使用速度可接受,但图像缩放速度太慢,且暂时不被GraalVM支持。

2.0换用swt + jogl

swt提供窗口支持

jogl通过jni绑定了OpenGL,OpenGL是用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序编程接口,他能调用显卡进行图像渲染,效率极高。

本地化编译

GraalVM 提供了一种名为native-image的工具,他先通过静态分析找到Java程序用到的所有类,方法和字段以及一个非常小的SVM运行时,然后把这一堆东西通过AOT编译,生成一个可执行文件。它的功能远不止此。

这样java程序就能脱离jre独立运行,启动速度加快,内存占用减少。

但这抹去了java所有的动态特性,对于反射,动态代理等。这些类只有在java程序真正运行起来才会被创建,难以通过静态分析获得。

所以native-image提供了native-image-agent工具,记录程序运行时加载的类,用以辅助AOT编译。

他将记录程序运行时的反射,动态代理,jni等,然后写入指定目录.

编译时graalVM将会读取这些配置文件,辅助静态分析.

%JAVA_HOME%/bin/java -agentlib:native-image-agent=config-merge-dir=./cfg -jar BlackSpider-2.0.jar

blackspider's People

Contributors

liux-pro avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.