紫光同创FPGA实现UDP协议栈网络视频传输,基于YT8511和RTL8211,提供4套PDS工程源码和技术支持
目录
- 1、前言
- 免责声明
- 2、相关方案推荐
- 我这里已有的以太网方案
- 紫光同创FPGA精简版UDP方案
- 紫光同创FPGA带ping功能UDP方案
- 3、设计思路框架
- OV7725摄像头配置及采集
- OV5640摄像头配置及采集
- UDP发送控制
- 视频数据组包
- 数据缓冲FIFO
- UDP协议栈详解
- RGMII转GMII
- 动态ARP
- UDP协议
- IP地址、端口号修改
- QT上位机
- 4、PDS工程1:OV7725输入YT8511版本
- 5、PDS工程2:OV5640输入YT8511版本
- 6、PDS工程3:OV7725输入RTL8211版本
- 7、PDS工程4:OV5640输入RTL8211版本
- 8、上板调试验证并演示
- 准备工作
- 动态ARP测试
- 图像接收显示测试
- 9、福利:工程代码的获取
紫光同创FPGA实现UDP协议栈网络视频传输,基于YT8511和RTL8211,提供2套PDS工程源码和技术支持
1、前言
“苟利国家生死以,岂因祸福避趋之!”大洋彼岸的我优秀地下档员,敏锐地洞察到祖国的短板在于高精尖半导体的制造领域,于是本着为中华民族伟大复兴的中国梦贡献绵薄之力的初心,懂先生站在高略高度和长远角度谋划,宁愿背当代一世之骂名也要为祖国千秋万世谋,2018年7月,懂先生正式打响毛衣战,随后又使出恰勃纸战术,旨在为祖国先进制程半导体领域做出自主可控的战略推动;在此,请收下我一声谢谢啊!!!!!!
2019年初我刚出道时,还是Xilinx遥遥领先的时代(现在貌似也是),那时的国产FPGA还处于辣鸡段位,国产FPGA仰望Xilinx情不自禁道:你以为躲在这里就找不到你吗?没用的,你那样拉轰的男人,无论在哪里,都像黑夜里的萤火虫那样的鲜明、那样的出众,你那忧郁的眼神,稀嘘的胡渣子,神乎其技的刀法,还有那杯Dry martine,都深深的迷住了我。。。然而才短短4年,如今的国产FPGA属于百家争鸣、百花齐放、八仙过海、神仙打架、方兴未艾、得陇望蜀、友商都是XX的喜极而泣之局面,面对此情此景,不得不吟唱老人家的诗句:魏武挥鞭,东临碣石有遗篇,萧瑟秋风今又是,换了人间。。。
言归正传,目前对于国产FPGA的共识有以下几点:
1:性价比高,与同级别国外大厂芯片相比,价格相差几倍甚至十几倍;
2:自主可控,国产FPGA拥有完整自主知识产权的产业链,从芯片到相关EDA工具
3:响应迅速,FAE技术支持比较到位,及时解决开发过程中遇到的问题,毕竟中文数据手册。。
4:采购方便,产业链自主可控,采购便捷
没玩过UDP或TCP都不好意思说自己玩儿过FPGA,这是CSDN某大佬说过的一句话,鄙人深信不疑。。。本文使用紫光同创的PGL22G-6MBG324 FPGA实现UDP协议栈络视频传输,该协议栈是精简版,采用纯verilog代码实现,具备动态ARP、支持巨型帧、CRC32校验、占用逻辑资源很少等功能,但不具备ping功能;FPGA采集外部摄像头数据,然后对视频数据进行组包封装,以适应QT上位机的接收要求,随后将组包的视频数据放入FIFO中做跨时钟和数据位宽转换,然后视频数据送入UDP协议栈进行UDP协议的网络数据包组包,最后通过YT8511和RTL8211做硬件PHY后通过RJ45网口的网线发送出去,电脑端打开上位机,即可接收并显示FPGA发过来的视频;
本设计提供4套Pango Design Suite 2021.4版本的工程源码;4套工程的区别在于输入摄像头是OV7725或者OV5640,使用网络PHY是YT8511或者RTL8211;4套工程详情如下:
//
| PDS工程 输入视频 网络PHY 输入输出分辨率|
| 第一套PDS工程 OV7725摄像头 YT8511 640X480 |
| 第二套PDS工程 OV5640摄像头 YT8511 640X480 |
| 第三套PDS工程 OV7725摄像头 RTL8211 640X480 |
| 第四套PDS工程 OV5640摄像头 RTL8211 640X480 |
//
这里需要注意以下几点:
1:视频没有进行DDR的缓存,仅做FIFO级别的缓存,所以要求输入视频的像素时钟必须低于125M,因为GMII的时钟是125M,所高于125M,则会出现FIFO堵死的情况;
2:目前QT上位机只是个测试版本,支持支640X480分辨率的输入图像,所以输入视频必须是640X480,若不是,请缩放到此分辨率;
3:目前QT上位机只是个测试版本,不是很稳定,若有时闪退或者无图像,请多次关闭后重新打开,QT上位机只提供上位机可执行程序,不提供源码;
本博客详细描述了紫光同创FPGA实现UDP协议栈网络视频传输的设计方案,工程代码可综合编译上板调试,可直接项目移植,适用于在校学生、研究生项目开发,也适用于在职工程师做学习提升,可应用于医疗、军工等行业的高速接口或图像处理领域;
提供完整的、跑通的工程源码和技术支持;
工程源码和技术支持的获取方式放在了文章末尾,请耐心看到最后;
免责声明
本工程及其源码即有自己写的一部分,也有网络公开渠道获取的一部分(包括CSDN、Xilinx官网、Altera官网等等),若大佬们觉得有所冒犯,请私信批评教育;基于此,本工程及其源码仅限于读者或粉丝个人学习和研究,禁止用于商业用途,若由于读者或粉丝自身原因用于商业用途所导致的法律问题,与本博客及博主无关,请谨慎使用。。。
2、相关方案推荐
我这里已有的以太网方案
目前我这里有大量UDP协议的工程源码,包括UDP数据回环,视频传输,AD采集传输等,也有TCP协议的工程,还有RDMA的NIC 10G 25G 100G网卡工程源码,对网络通信有需求的兄弟可以去看看:直接点击前往
其中千兆TCP协议的工程博客如下:
直接点击前往
紫光同创FPGA精简版UDP方案
该方案同样使用紫光同创FPGA实现,只不过是精简版UDP,具备动态ARP、支持巨型帧、CRC32校验、占用逻辑资源很少等功能,但不具备ping功能;工程博客如下:
直接点击前往
紫光同创FPGA带ping功能UDP方案
该方案同样使用紫光同创FPGA实现,具备动态ARP、支持巨型帧、CRC32校验、占用逻辑资源很少等功能,具备ping功能;工程博客如下:
直接点击前往
3、设计思路框架
本文使用紫光同创的PGL22G-6MBG324 FPGA实现UDP协议栈络视频传输,该协议栈是精简版,采用纯verilog代码实现,具备动态ARP、支持巨型帧、CRC32校验、占用逻辑资源很少等功能,但不具备ping功能;FPGA采集外部摄像头数据,然后对视频数据进行组包封装,以适应QT上位机的接收要求,随后将组包的视频数据放入FIFO中做跨时钟和数据位宽转换,然后视频数据送入UDP协议栈进行UDP协议的网络数据包组包,最后通过YT8511和RTL8211做硬件PHY后通过RJ45网口的网线发送出去,电脑端打开上位机,即可接收并显示FPGA发过来的视频;
本设计提供4套Pango Design Suite 2021.4版本的工程源码;4套工程的区别在于输入摄像头是OV7725或者OV5640,使用网络PHY是YT8511或者RTL8211;4套工程详情如下:
//
| PDS工程 输入视频 网络PHY 输入输出分辨率|
| 第一套PDS工程 OV7725摄像头 YT8511 640X480 |
| 第二套PDS工程 OV5640摄像头 YT8511 640X480 |
| 第三套PDS工程 OV7725摄像头 RTL8211 640X480 |
| 第四套PDS工程 OV5640摄像头 RTL8211 640X480 |
//
这里需要注意以下几点:
1:视频没有进行DDR的缓存,仅做FIFO级别的缓存,所以要求输入视频的像素时钟必须低于125M,因为GMII的时钟是125M,所高于125M,则会出现FIFO堵死的情况;
2:目前QT上位机只是个测试版本,支持支640X480分辨率的输入图像,所以输入视频必须是640X480,若不是,请缩放到此分辨率;
3:目前QT上位机只是个测试版本,不是很稳定,若有时闪退或者无图像,请多次关闭后重新打开,QT上位机只提供上位机可执行程序,不提供源码;
工程设计框图如下:

OV7725摄像头配置及采集
OV7725摄像头需要i2c配置才能使用,需要将DVP接口的视频数据采集为RGB565或者RGB888格式的视频数据,这两部分均用verilog代码模块实现,本设计配置为640X480分辨率;代码位置如下:

其中摄像头配置为分辨率640x480;
摄像头采集模块支持RGB565和RGB888格式的视频输出,可由参数配置,如下:

RGB_TYPE=0输出本RGB565格式;
RGB_TYPE=1输出本RGB888格式;
设计选择RGB888格式;
OV5640摄像头配置及采集
OV5640摄像头需要i2c配置才能使用,需要将DVP接口的视频数据采集为RGB565或者RGB888格式的视频数据,这两部分均用verilog代码模块实现,本设计配置为640X480分辨率;代码位置如下:

摄像头采集模块支持RGB565和RGB888格式的视频输出,可由参数配置,如下:

RGB_TYPE=0输出本RGB565格式;
RGB_TYPE=1输出本RGB888格式;
设计选择RGB888格式;
UDP发送控制
FPGA与PC上位机通信的协议为:
PC上位机首先向FPGA发送1个字节的数据包;
如果发送的是0x01,则表示通知FPGA可以开始发送视频数据给我了;
如果发送的是0x00,则表示通知FPGA立即停止发送视频数据给我;
所以UDP发送控制模块的作用就是根据接收到的PC上位机发来的指令,产生开始发送和停止发送信号;核心代码如下:

视频数据组包
FPGA收到单包数据0x01后,首先发送4个字节的视频分辨率信息给PC上位机;
高两个字节表示视频宽度;
低两个字节表示视频高度;
FPGA随后向PC上位机发送4字节的帧头,帧头被QT端写死为:0xf05aa50f;
FPGA再发送有效视频数据给PC上位机;
FPGA收到单包数据0x00后,停止向PC上位机发送数据;
FPGA实时等待单包数据0x01的到来,若收到,继续发送视频数据;
组包后的视频数据送入FIFO,等待UDP协议栈读取;
核心代码如下:

数据缓冲FIFO
数据缓冲FIFO实现两个功能,一是数据位宽转换,输入视频的16位转32位,二是时钟域转换,摄像头时钟为50M,UDP侧时钟为125M;
UDP协议栈详解
RGMII转GMII
RGMII转GMII模块是实现RGMII 与 GMII 的转换,提取出控制信号与数据信号,使用紫光同创FPGA的GTP_ISERDES和GTP_OSERDES原语实现;与 PHY 连接是 RGMII 接口。RGMII 接口是 GMII 接口的简化版,在时钟的上升沿及下降沿都采样数据,上升沿发送TXD[3:0]/RXD[3:0],下降沿发送 TXD[7:4]/RXD[7:4],TX_EN 传送 TX_EN(上升沿)和 TX_ER(下降沿)两种信息,RX_DV 传送 RX_DV(上升沿)和 RX_ER(下降沿)两种信息。RGMII转GMII模块设计框图如下:

RGMII转GMII模块在工程中如下:

这里的RX模块用到了一个PLL IP核,作用是将接收到的RX时钟相位偏移180°,与PHY延时模式相匹配;
动态ARP
动态ARP模块很简单,根据ARP协议进行拆包和组包即可,对于接收是拆包,即解析识别出UDP报文的前导码、SFD、以太网帧头和FCS,提取有效数据,对于发送是组包,对有效数据添加对应的包头,ARP报文格式如下:

动态ARP模块在工程中如下:

动态ARP模块由RX、TX和CRC32三个模块组成,其中TX用到了CRC32校验,RX则未做校验;
UDP协议
UDP协议模块很简单,根据UDP协议进行拆包和组包即可,对于接收是拆包,即解析识别出UDP报文的前导码、SFD、以太网帧头和FCS,提取有效数据,对于发送是组包,对有效数据添加对应的包头,UDP报文格式如下:

UDP协议模块在工程中如下:

UDP协议模块由RX、TX和CRC32三个模块组成,其中TX用到了CRC32校验,RX则未做校验;
IP地址、端口号修改
UDP协议栈留出了IP地址、端口号的修改端口供用户自由修改,通过顶层参数修改,位置如下:

QT上位机
1:目前QT上位机只是个测试版本,支持支640X480分辨率的输入图像,所以输入视频必须是640X480,若不是,请缩放到此分辨率;
2:目前QT上位机只是个测试版本,不是很稳定,若有时闪退或者无图像,请多次关闭后重新打开,QT上位机只提供上位机可执行程序,不提供源码;
4、PDS工程1:OV7725输入YT8511版本
开发板FPGA型号:紫光同创–PGL22G-6MBG324;
开发环境:Pango Design Suite 2021.4
输入:OV7725,分辨率为640X480;
输出:网口;
网络PHY:YT8511,延时模式;
工程作用:紫光同创FPGA实现UDP协议栈网络视频传输;
工程代码架构如下:

工程的资源消耗如下:

工程已经综合编译完成,如下:

5、PDS工程2:OV5640输入YT8511版本
开发板FPGA型号:紫光同创–PGL22G-6MBG324;
开发环境:Pango Design Suite 2021.4
输入:OV5640,分辨率为640X480;
输出:网口;
网络PHY:YT8511,延时模式;
工程作用:紫光同创FPGA实现UDP协议栈网络视频传输;
工程详情参考第4章节;
6、PDS工程3:OV7725输入RTL8211版本
开发板FPGA型号:紫光同创–PGL22G-6MBG324;
开发环境:Pango Design Suite 2021.4
输入:OV7725,分辨率为640X480;
输出:网口;
网络PHY:RTL8211,延时模式;
工程作用:紫光同创FPGA实现UDP协议栈网络视频传输;
工程详情参考第4章节;
7、PDS工程4:OV5640输入RTL8211版本
开发板FPGA型号:紫光同创–PGL22G-6MBG324;
开发环境:Pango Design Suite 2021.4
输入:OV5640,分辨率为640X480;
输出:网口;
网络PHY:RTL8211,延时模式;
工程作用:紫光同创FPGA实现UDP协议栈网络视频传输;
工程详情参考第4章节;
8、上板调试验证并演示
准备工作
连接开发板:

以PDS工程1–>YT8511版本工程为例进行上板调试;
修改本地电脑端IP地址为如下:

然后下载bit致开发板,即可开始测试;
动态ARP测试
打开CDM,做如下操作:

可以看到,PC已经识别并记录了FPGA网卡的ARP信息,并标记为动态;
图像接收显示测试
打开QT上位机,OV7725输入静态演示如下:

打开QT上位机,OV5640输入静态演示如下:
OV5640显示画质较差,这不是代码问题,而是我的OV5640摔坏了,画质本来据有问题,将就用。。。

打开QT上位机,OV7725输入动态演示如下:
紫光同创UDP-OV7725
9、福利:工程代码的获取
福利:工程代码的获取
代码太大,无法邮箱发送,以某度网盘链接方式发送,
资料获取方式:私,或者文章末尾的V名片。
网盘资料如下:


相关文章:
紫光同创FPGA实现UDP协议栈网络视频传输,基于YT8511和RTL8211,提供4套PDS工程源码和技术支持
目录 1、前言免责声明 2、相关方案推荐我这里已有的以太网方案紫光同创FPGA精简版UDP方案紫光同创FPGA带ping功能UDP方案 3、设计思路框架OV7725摄像头配置及采集OV5640摄像头配置及采集UDP发送控制视频数据组包数据缓冲FIFOUDP协议栈详解RGMII转GMII动态ARPUDP协议IP地址、端口…...
深度学习简述
⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️ 🐴作者:秋无之地 🐴简介:CSDN爬虫、后端、大数据领域创作者。目前从事python爬虫、后端和大数据等相关工作,主要擅长领域有:爬虫、后端、大数据开发、数据分析等。 🐴欢迎小伙伴们点赞👍🏻、收藏⭐️、…...
【从零开始学习Redis | 第二篇】Redis中的数据类型和相关命令
前言: Redis是一种快速、高效的开源内存数据库,被广泛用于构建各种类型的应用程序。其被设计成支持多种数据类型,这使得Redis在处理各种场景的数据存储和操作中非常灵活。Redis的数据类型提供了对不同数据结构的直接支持,包括字符…...
数据结构 - 3(链表12000字详解)
一:LinkedList的使用 1.1 ArrayList的缺陷 上篇文章我们已经基本熟悉了ArrayList的使用,并且进行了简单模拟实现。由于其底层是一段连续空间,当在ArrayList任意位置插入或者删除元素时,就需要将后序元素整体往前或者往后搬移&am…...
Jmeter性能测试插件jpgc的安装
一、获取插件包 1.访问官网获取 官网地址: 2.百度网盘下载 链接:百度网盘 请输入提取码 提取码:blmn 二、安装路径 将下载到的plugins-manager.jar插件存放到%JMETER_HOME%/lib/ext目录下 三、安装插件 1.重启Jmeter 如果已启动了…...
关于safari浏览器浏览html video标签无法正常播放的问题
问题: 前端demo使用一个video标签包含一个非静态资源的mp4文件。在chrome浏览器下可以正常展示,但是safari却不可以。 原因: 1. mp4文件必须用ffmpeg合成的,其他压缩的mp4文件是不可能展示的。请确定mp4文件并用正常的ffmpeg进…...
【C++代码】最大二叉树,合并二叉树,二叉搜索树中的搜索,验证二叉搜索树--代码随想录
题目:最大二叉树 给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建: 创建一个根节点,其值为 nums 中的最大值。递归地在最大值 左边 的 子数组前缀上 构建左子树。递归地在最大值 右边 的 子数组后缀上 构建右子树。 …...
母婴用品会员商城小程序的作用是什么
随着政策放松,母婴行业相比以前迎来了更高的发展空间,由于可以与多个行业连接,因此市场规模也是连年上升,母婴用品是行业重要的分支,近些年从业商家连年增加,但在实际经营中,商家所遇经营痛点也…...
c++初阶--内存管理
目录 c/c 内存分布c内存管理方式new/delete操作内置类型new和delete操作自定义类型 operator new与operator delete函数new和delete的实现原理内置类型自定义类型 malloc/free和new/delete的区别内存泄露什么是内存泄漏,内存泄露的危害如何避免内存泄漏 在c语言中我…...
Burstormer论文阅读笔记
这是CVPR2023的一篇连拍图像修复和增强的论文,一作是阿联酋的默罕默德 本 扎耶得人工智能大学,二作是旷视科技。这些作者和CVPR2022的一篇BIPNet,同样是做连拍图像修复和增强的,是同一批。也就是说同一个方向,22年中了…...
Apifox 学习笔记 - 前置操作之:动态更新请求体中的时间戳
Apifox 学习笔记 - 前置操作之:动态更新请求体中的时间戳 1. 在前置操作中添加一个:自定义脚本或公共脚本2. 定义我们所需的环境变量。3. 在请求参数中使用【时间戳】4. 检验参考资料 1. 在前置操作中添加一个:自定义脚本或公共脚本 2. 定义我…...
2023年9月 青少年软件编程等级考试Scratch二级真题
202309 青少年软件编程等级考试Scratch二级真题(电子学会等级考试) 试卷总分数:100分 试卷及格分:60 分 考试时长:60 分钟 第 1 题 点击绿旗,运行程序后,舞台上的图形是?( ) A:画…...
12.验证码以及付费代理
文章目录 一、验证码的处理1、验证码概述1、2 什么是图片验证码?1、2 验证码的作用1、3 图片验证码使用场景1、4 图片验证码的处理方案 2、图片在网页页面中的形式2、1 如何进行图片形式的转化 3、打码平台 二、代理的使用2、1 付费代理2、1、1 找付费代理服务站点2…...
使用Plotly可视化
显示项目受欢迎程度 改进图表 设置颜色,字体...
【C语言】结构体、位段、枚举、联合(共用体)
结构体 结构:一些值的集合,这些值称为成员变量。结构体的每个成员可以是不同类型的变量; 结构体声明:struct是结构体关键字,结构体声明不能省略struct; 匿名结构体:只能在声明结构体的时候声…...
“Python+”集成技术高光谱遥感数据处理与机器学习深度应用
涵盖高光谱遥感数据处理的基础、python开发基础、机器学习和应用实践。重点解释高光谱数据处理所涉及的基本概念和理论,旨在帮助学员深入理解科学原理。结合Python编程工具,专注于解决高光谱数据读取、数据预处理、高光谱数据机器学习等技术难题…...
Excel 转为 PDF,PNG,HTML等文件
1.安装 Spire.XLS for Java,下载jar包 下载地址 2.引入方式一(我这里这种方式一直无法引入,都是失败,所以用的方式二) <repositories><repository><id>com.e-iceblue</id><name>e-iceblue</na…...
docker中使用GPU+rocksdb
配置环境 delldell-Precision-3630-Tower ~ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 20.04.6 LTS Release: 20.04 Codename: focaldelldell-Precision-3630-Tower ~ nvcc --version nvcc: NVIDIA (R) Cuda comp…...
好用的跨平台同步笔记工具,手机和电脑可同步的笔记工具
在这个快节奏的工作环境中,每个人都在寻找一种方便又高效的方式来记录工作笔记。记录工作笔记可以帮助大家统计工作进展,了解工作进程,而如果工作中常在一个地方办公,直接选择电脑或者手机中笔记工具来记录即可,但是对…...
【Python 千题 —— 基础篇】浮点数转换为整数
题目描述 题目描述 整数转换为浮点数。 输入描述 输入一个整数。 输出描述 程序将整数转换为浮点数并输出。 示例 示例 ① 2输出: 2.0代码讲解 下面是本题的代码: # 描述: 整数转换为浮点数。 # 输入: 输入一个整数。 # 输出: 程序将整数转换…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...
简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...
Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...
令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...
【HTTP三个基础问题】
面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客…...
selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...
什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...
