WebRTC-Streamer交叉编译

news2024/12/23 9:38:42

WebRTC-Streamer交叉编译

flyfish

文章目录

  • WebRTC-Streamer交叉编译
    • 零、前言
    • 一、提前准备工作
      • 1 安装需要的工具
      • 2 可选的交叉编译工具
      • 3 默认执行python是python3
      • 4 获取源码
      • 5 使用其他版本的方法
    • 二、非交叉编译编译
      • 1 在 src目录执行 安装所需的依赖
      • 2 执行命令
    • 三、 交叉编译
      • 1 独立使用的方法,无需提供给WebRTC-Streamer使用的方法
      • 2 提供给WebRTC-Streamer使用的方法
    • 四、开始编译WebRTC-Streamer
    • 五、以下是不同版本的编译,可能出现的错误和解决方案
      • 问题1缺少rtmp
      • 问题 2 链接问题
      • 问题3 live555helper
      • 问题4 WebRTC和WebRTC-Streamer两者版本,其中之一过旧或者过新问题
      • 问题5 未安装工具的错误
      • 问题6 编译工具与代码版本问题
      • 问题7 使用clang或者gcc不同编译器编译的情况

零、前言

WebRTC-Streamer源码

https://github.com/mpromonet/webrtc-streamer

官网给的三步是
1安装 Chromium depot tools

pushd ..
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
export PATH=$PATH:`realpath depot_tools`
popd

2 下载 WebRTC

mkdir ../webrtc
pushd ../webrtc
fetch --no-history webrtc 
popd

3 构建 WebRTC Streamer

cmake . && make

这里实践第三步首先要编译WebRTC,然后再编译WebRTC-Streamer

webrtc编译

一、提前准备工作

1 安装需要的工具

sudo apt-get install build-essential pkg-config devhelp glade libglade2-dev
sudo apt-get install libgtk-3-dev
sudo apt install ninja-build
sudo apt install git
sudo apt install libcanberra-gtk-module
sudo apt install cmake
sudo apt install python3-pip
pip3 install dataclasses

2 可选的交叉编译工具

https://mirrors.tuna.tsinghua.edu.cn/armbian-releases/_toolchain/

3 默认执行python是python3

sudo rm /usr/bin/python
sudo ln -s /usr/bin/python3 /usr/bin/python
python --version

4 获取源码

 git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git

创建webrtc文件夹
终端命令进入webrtc文件夹后,执行命令
加载路径

export PATH=/path/to/depot_tools:$PATH

替换成depot_tools所在路径,这里用的是

export PATH="$PATH:/home/a/source/depot_tools/"
fetch --nohooks webrtc
gclient sync

5 使用其他版本的方法

切换到分支方法
查看有哪些版本

https://webrtc.github.io/webrtc-org/release-notes/

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述打开链接可以看到M85 和4183

进入 webrtc/src目录,执行命令

git checkout -b m85 branch-heads/4183
gclient sync

或者通过git branch -r 查看有哪些分支

二、非交叉编译编译

可编译x86_64版本

1 在 src目录执行 安装所需的依赖

./build/install-build-deps.sh

这里实际用的是

./build/install-build-deps.sh --no-chromeos-fonts  #跳过字体的安装

2 执行命令

gn gen out/Default --args='is_debug=false'
ninja -C out/Default

三、 交叉编译

可编译arm32或者arm64版本
根据自己需要选择

1 独立使用的方法,无需提供给WebRTC-Streamer使用的方法

如果是要交叉编译,需要执行

./build/linux/sysroot_scripts/install-sysroot.py --arch=arm          #32./build/linux/sysroot_scripts/install-sysroot.py --arch=arm64      #64

普通的交叉编译
第一步

gn gen out/linux_arm --args='target_os="linux" target_cpu="arm" use_custom_libcxx=false'   #32位
gn gen out/linux_arm64 --args='target_os="linux" target_cpu="arm64" use_custom_libcxx=false'   #64

第二步

ninja -C out/linux_arm  #32位
ninja -C out/linux_arm64 #64

2 提供给WebRTC-Streamer使用的方法

交叉编译命令
还可以是如下命令
假如是arm32下
第一步
gn gen out/Release --args=‘rtc_use_x11=false rtc_use_pipewire=false is_clang=true use_sysroot=false target_cpu=“arm” is_chrome_branded=true is_debug=false use_custom_libcxx=false rtc_include_tests=false rtc_enable_protobuf=false rtc_build_examples=false rtc_build_tools=false treat_warnings_as_errors=false rtc_enable_libevent=false rtc_build_libevent=false use_ozone=true rtc_build_json=true’

第二步
ninja -C out/Release webrtc rtc_json jsoncpp builtin_video_decoder_factory builtin_video_encoder_factory peerconnection p2p_server_utils task_queue default_task_queue_factory

四、开始编译WebRTC-Streamer

以arm32为例

cmake -DCMAKE_SYSTEM_PROCESSOR=armv7l -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_C_COMPILER=/home/a/tool/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc -DCMAKE_CXX_COMPILER=/home/a/tool/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++ -DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER -DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=ONLY -DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=ONLY -DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ONLY -DWEBRTCOZONE=Yes -DWEBRTCDESKTOPCAPTURE=OFF .

以上编译命令类似

set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR arm)

set(tools /home/a/tool/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/)
set(CMAKE_C_COMPILER ${tools}/bin/arm-linux-gnueabihf-gcc)
set(CMAKE_CXX_COMPILER ${tools}/bin/arm-linux-gnueabihf-g++)

set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)

可选的

set(CMAKE_SYSROOT /home/devel/rasp-pi-rootfs)
set(CMAKE_STAGING_PREFIX /home/devel/stage)

如果不想写这么长的工具路径,可以如下操作
在这里插入图片描述

usr/local/下建立一个arm32文件夹,将工具拷贝进去
编辑~/.bashrc加上一句

export PATH=$PATH:/usr/local/arm32/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin

五、以下是不同版本的编译,可能出现的错误和解决方案

问题1缺少rtmp

In file included from /home/a/source/webrtc-streamer/inc/CapturerFactory.h:34,
                 from /home/a/source/webrtc-streamer/src/PeerConnectionManager.cpp:26:
/home/a/source/webrtc-streamer/inc/rtmpvideosource.h:32:10: 致命错误: librtmp/rtmp.h:没有那个文件或目录
 #include <librtmp/rtmp.h>
          ^~~~~~~~~~~~~~~~
编译中断。
CMakeFiles/webrt

方式1:
下载

http://rtmpdump.mplayerhq.hu/download/
rtmpdump-2.3

放置到

librtmp
/home/a/source/webrtc-streamer/inc/librtmp

然后再解决链接问题

arm-linux-gnueabihf/bin/ld: cannot find -lrtmp
arm-linux-gnueabihf/bin/ld: cannot find -lz
arm-linux-gnueabihf/bin/ld: cannot find -lgmp

方式2
不使用rtmp
更改CMakeList.txt

# rtmp ?
# find_package(PkgConfig QUIET)
# pkg_check_modules(RTMP QUIET librtmp)
# MESSAGE("RTMP_FOUND = ${RTMP_FOUND}")
# if (RTMP_FOUND)
#   add_definitions(-DHAVE_RTMP)
#   target_link_libraries (${CMAKE_PROJECT_NAME} ${RTMP_LIBRARIES}) 
# endif()

问题 2 链接问题

arm-linux-gnueabihf/bin/ld: cannot find -lX11
arm-linux-gnueabihf/bin/ld: cannot find -lXext
arm-linux-gnueabihf/bin/ld: cannot find -lXdamage
arm-linux-gnueabihf/bin/ld: cannot find -lXfixes
arm-linux-gnueabihf/bin/ld: cannot find -lXcomposite
arm-linux-gnueabihf/bin/ld: cannot find -lXrandr
arm-linux-gnueabihf/bin/ld: cannot find -lXtst

通过查看CMakeLists.txt x11需要 X11 Xext Xdamage Xfixes Xcomposite Xrandr Xtst

  if (EXISTS ${WEBRTCROOT}/src/out/${CMAKE_BUILD_TYPE}/obj/modules/desktop_capture/desktop_capture.ninja)
        add_definitions(-DUSE_X11)
        target_link_libraries (${CMAKE_PROJECT_NAME} X11 Xext Xdamage Xfixes Xcomposite Xrandr Xtst)
    endif()

简单的方法就是除去 x11 dep

webrtc增加参数

gn gen out/Release --args增加参数 use_ozone=true rtc_use_x11=false

webrtc-streamer的编译增加参数

cmake -DCMAKE_SYSTEM_PROCESSOR=armv7l -DWEBRTCOZONE=Yes -DWEBRTCDESKTOPCAPTURE=OFF .

问题3 live555helper

错误提示

struct std::atomic_flag’ has no member named ‘test’

详细的是

/home/a/source/webrtc-streamer/live/BasicUsageEnvironment/BasicTaskScheduler.cpp: 在成员函数‘virtual void BasicTaskScheduler::SingleStep(unsigned int)’中:
/home/a/source/webrtc-streamer/live/BasicUsageEnvironment/BasicTaskScheduler.cpp:191:40: 错误: ‘struct std::atomic_flaghas no member namedtestif (fTriggersAwaitingHandling[i].test()) {
                                        ^~~~
live555helper/CMakeFiles/liblive555helper.dir/build.make:89: recipe for target 'live555helper/CMakeFiles/liblive555helper.dir/__/live/BasicUsageEnvironment/BasicTaskScheduler.cpp.o' failed
make[2]: *** [live555helper/CMakeFiles/liblive555helper.dir/__/live/BasicUsageEnvironment/BasicTaskScheduler.cpp.o] Error 1
make[2]: *** 正在等待未完成的任务....

解决方法
增加NO_STD_LIB=1 或者 -DNO_STD_LIB

可以根据自己所需的系统更改

编译最后更改如下



if (WIN32)
	target_compile_definitions(liblive555helper PUBLIC _CRT_SECURE_NO_WARNINGS=1 NO_GETIFADDRS=1)
	target_link_libraries (liblive555helper ws2_32)
elseif (APPLE)
	target_compile_definitions(liblive555helper PUBLIC BSD=1 SOCKLEN_T=socklen_t _FILE_OFFSET_BITS=64 _LARGEFILE_SOURCE=1 NEED_XLOCALE_H=1)
else ()
	target_compile_definitions(liblive555helper PUBLIC BSD=1 SOCKLEN_T=socklen_t _FILE_OFFSET_BITS=64 _LARGEFILE_SOURCE=1 NO_STD_LIB=1)
endif()

问题4 WebRTC和WebRTC-Streamer两者版本,其中之一过旧或者过新问题

示例1

:208:18: 错误: ‘class rtc::Threadhas no member namedInvokem_workerThread->Invoke<void>(RTC_FROM_HERE, [this, audioLayer] {
                  ^~~~~~
:208:25: 错误: expected primary-expression before ‘void’
  m_workerThread->Invoke<void>(RTC_FROM_HERE, [this, audioLayer] {
                         ^~~~
:210:6: 错误: expected primary-expression before ‘)’ token
     });
      ^
: 在析构函数‘virtual PeerConnectionManager::~PeerConnectionManager()’中:
:340:18: 错误: ‘class rtc::Threadhas no member namedInvokem_workerThread->Invoke<void>(RTC_FROM_HERE, [this] {
                  ^~~~~~
:340:25: 错误: expected primary-expression before ‘void’
  m_workerThread->Invoke<void>(RTC_FROM_HERE, [this] {
                         ^~~~
:342:6: 错误: expected primary-expression before ‘)’ token

示例2

../../modules/audio_processing/agc2/adaptive_digital_gain_controller_unittest.cc:107:41: error: no member named 'log10f' in namespace 'std'; did you mean simply 'log10f'?
  107 |   const float applied_gain_db = 20.0f * std::log10f(applied_gain);
      |                                         ^~~~~~~~~~~
      |                                         log10f
../../build/linux/debian_bullseye_armhf-sysroot/usr/include/arm-linux-gnueabihf/bits/mathcalls.h:107:1: note: 'log10f' declared here
  107 | __MATHCALL (log10,, (_Mdouble_ __x));
      | ^
../../build/linux/debian_bullseye_armhf-sysroot/usr/include/math.h:273:3: note: expanded from macro '__MATHCALL'
  273 |   __MATHDECL (_Mdouble_,function,suffix, args)
      |   ^
../../build/linux/debian_bullseye_armhf-sysroot/usr/include/math.h:275:3: note: expanded from macro '__MATHDECL'
  275 |   __MATHDECL_1(type, function,suffix, args); \
      |   ^
../../build/linux/debian_bullseye_armhf-sysroot/usr/include/math.h:283:15: note: expanded from macro '__MATHDECL_1'
  283 |   extern type __MATH_PRECNAME(function,suffix) args __THROW
      |               ^
../../build/linux/debian_bullseye_armhf-sysroot/usr/include/math.h:303:34: note: expanded from macro '__MATH_PRECNAME'
  303 | # define __MATH_PRECNAME(name,r) name##f##r
      |                                  ^
<scratch space>:211:1: note: expanded from here
  211 | log10f
      | ^
1 error generated.

问题5 未安装工具的错误

例如
pkg-config

ERROR at //build/config/linux/pkg_config.gni:104:17: Script returned non-zero exit code.
    pkgresult = exec_script(pkg_config_script, args, "json")
                ^----------
Current dir: /home/a/source/webrtc/src/out/linux_arm/
Command: python3 /home/a/source/webrtc/src/build/config/linux/pkg-config.py -s /home/a/source/webrtc/src/build/linux/debian_bullseye_armhf-sysroot -a arm gmodule-2.0 gthread-2.0 gtk+-3.0
Returned 1.
stderr:

Traceback (most recent call last):
  File "/home/a/source/webrtc/src/build/config/linux/pkg-config.py", line 247, in <module>
    sys.exit(main())
  File "/home/a/source/webrtc/src/build/config/linux/pkg-config.py", line 142, in main
    prefix = GetPkgConfigPrefixToStrip(options, args)
  File "/home/a/source/webrtc/src/build/config/linux/pkg-config.py", line 81, in GetPkgConfigPrefixToStrip
    "--variable=prefix"] + args, env=os.environ).decode('utf-8')
  File "/usr/lib/python3.6/subprocess.py", line 356, in check_output
    **kwargs).stdout
  File "/usr/lib/python3.6/subprocess.py", line 423, in run
    with Popen(*popenargs, **kwargs) as process:
  File "/usr/lib/python3.6/subprocess.py", line 729, in __init__
    restore_signals, start_new_session)
  File "/usr/lib/python3.6/subprocess.py", line 1364, in _execute_child
    raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] No such file or directory: 'pkg-config': 'pkg-config'

See //examples/BUILD.gn:665:5: whence it was called.
    pkg_config("gtk_config") {
    ^-------------------------
See //BUILD.gn:42:17: which caused the file to be included.
      deps += [ "examples" ]

dataclasses

ninja -C out/linux_arm
ninja: Entering directory `out/linux_arm'
[122/6960] ACTION //experiments:regist...der(//build/toolchain/linux:clang_arm)
FAILED: gen/experiments/registered_field_trials.h 
python3 ../../experiments/field_trials.py header --output gen/experiments/registered_field_trials.h
Traceback (most recent call last):
  File "../../experiments/field_trials.py", line 15, in <module>
    import dataclasses
ModuleNotFoundError: No module named 'dataclasses'
[131/6960] CXX obj/logging/fake_rtc_event_log/fake_rtc_event_log.o
ninja: build stopped: subcommand failed.

问题6 编译工具与代码版本问题

例如webrtc使用旧代码时,gn版本过高导致的错误
降低gn版本

:~/source/webrtc/src$ gn gen out/Default
ERROR at //build/config/BUILDCONFIG.gn:401:1: Unknown function.
set_sources_assignment_filter(sources_assignment_filter)
 gn --version
2119 (cc56a0f98bb3)

问题7 使用clang或者gcc不同编译器编译的情况

在这里插入图片描述

LLVM: clang / clang++(https://clang.llvm.org/)
GNC: gcc / g++( https://gcc.gnu.org/)

同样 的编译参数-std=c++17在默认的情况下,是用了不同的标准库

g++ with libstdc++ (by default)
clang++ with libc++ (by default)

在使用gcc编译的情况下,使用系统级别的函数时ibstdc++会调用glibc,Host上的gcc如果使用的glibc过高,到了Target就运行不起来

参考
https://webrtc.org.cn/mirror/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/957480.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【GAMES202】Real-Time Global Illumination(in 3D)—实时全局光照(3D空间)

一、SH for Glossy transport 1.Diffuse PRT回顾 上篇我们介绍了PRT&#xff0c;并以Diffuse的BRDF作为例子分析了预计算的部分&#xff0c;包括Lighting和Light transport&#xff0c;如上图所示。 包括我们还提到了SH&#xff0c;可以用SH的有限阶近似拟合球面函数&#xff…

【进阶篇】MySQL的SQL解析原理详解

文章目录 0. 前言1. SQL解析过程1. 词法分析2. 语法分析4. 语法分析树5. MySQL语法分析树生成过程6. 核心数据结构及其关系7. SQL解析的应用 2. 参考文档 0. 前言 你是否已经深入了解了MySQL中 SQL解析过程&#xff0c;以及解析过程中每个环节扮演的具体角色&#xff1f;你是否…

Windows SQLYog连接不上VMbox Ubuntu2204 的Mysql解决方法

Windows SQLYog连接不上VMbox Ubuntu2204 的Mysql解决方法 解决方法&#xff1a; 1、先检查以下mysql的端口状态 netstat -anp|grep mysql如果显示127.0.0.1:3306 则说明需要修改&#xff0c;若为: : :3306&#xff0c;则不用。 在**/etc/mysql/mysql.conf.d/mysqld.cnf**&am…

软件测试之黑盒测试、白盒测试分别是什么?有什么区别?

软件开发过程中&#xff0c;为了保证软件质量和稳定性&#xff0c;必须进行全面而细致的测试工作&#xff0c;而黑盒测试和白盒测试正是两种常用的测试方法。 一、黑盒测试 黑盒测试是一种基于软件外部功能的测试方法。测试人员对待测试的软件系统&#xff0c;就像一个黑匣子…

uniapp-秋云图表 ucharts echarts 对比与关系

科普&#xff1a; 秋云图表库&#xff0c;包含二种配置属性对应二种js配置文件。 一种是 &#xff1a;echarts.js,一种是 &#xff1a; ucharts。 二者的配置属性不一样&#xff01; ucharts和echarts对比 ucharts和echarts都是用于数据可视化的开源JavaScript库&#xff0c;它…

【高危】Apache Airflow Spark Provider 反序列化漏洞 (CVE-2023-40195)

zhi.oscs1024.com​​​​​ 漏洞类型反序列化发现时间2023-08-29漏洞等级高危MPS编号MPS-qkdx-17bcCVE编号CVE-2023-40195漏洞影响广度广 漏洞危害 OSCS 描述Apache Airflow Spark Provider是Apache Airflow项目的一个插件&#xff0c;用于在Airflow中管理和调度Apache Spar…

自动化机器学习Auto-Sklearn安装和使用教程

安装和使用 Auto-Sklearn Auto-sklearn 提供了开箱即用的监督型自动机器学习。从名字可以看出,auto-sklearn 是基于机器学习库 scikit-learn 构建的,可为新的数据集自动搜索学习算法,并优化其超参数。因此,它将机器学习使用者从繁琐的任务中解放出来,使其有更多时间专注于…

django/CVE-2017-12794XSS漏洞复现

docker搭建漏洞复现环境 漏洞原理看帮助文档 # Django debug page XSS漏洞&#xff08;CVE-2017-12794&#xff09;分析Django发布了新版本1.11.5&#xff0c;修复了500页面中可能存在的一个XSS漏洞&#xff0c;这篇文章说明一下该漏洞的原理和复现&#xff0c;和我的一点点评…

一种借助MYSQL递归CTE生成所有组合情况的实现方法

需求说明 有如下表和数据&#xff1a; Nname1户口2查询机构数过多3危险驾驶4多头用信 需要输出name里的所有组合情况&#xff0c;即单个值&#xff0c;两两组合&#xff0c;三个组合、四个组合。结果为2的n次方-1中情况&#xff0c;这里是15。 预期结果为&#xff1a; Com…

【OpenCV入门】第四部分——阈值

文章结构 阈值概述阈值处理函数二值化阈值处理二值化阈值处理反二值化处理 零处理低于阈值零处理超出阈值零处理 截断处理自适应处理Otsu方法 阈值概述 在PhotoShop里头&#xff0c;有一个工具可以快速抠出一幅图像中的轮廓&#xff0c;这个工具就是阈值。OpenCV也提供了阈值&…

springboot实战(二)之将项目上传至远程仓库

目录 环境&#xff1a; 背景&#xff1a; 操作&#xff1a; 1.注册码云账号 2.创建仓库 步骤&#xff1a; 1.注册完码云账号后&#xff0c;点击加号&#xff0c;新建仓库 2.输入项目名称和介绍&#xff0c;点击创建 3.复制仓库地址&#xff0c;你可以选择https协议或者…

ClickHouse进阶(五):副本与分片-2-Distributed引擎

进入正文前&#xff0c;感谢宝子们订阅专题、点赞、评论、收藏&#xff01;关注IT贫道&#xff0c;获取高质量博客内容&#xff01; &#x1f3e1;个人主页&#xff1a;含各种IT体系技术,IT贫道_Apache Doris,大数据OLAP体系技术栈,Kerberos安全认证-CSDN博客 &#x1f4cc;订阅…

ssm+vue宠物领养系统源码和论文

ssmvue宠物领养系统源码和论文103 开发工具&#xff1a;idea 数据库mysql5.7 数据库链接工具&#xff1a;navcat,小海豚等 技术&#xff1a;ssm 摘 要 本课题是根据用户的需要以及网络的优势建立的一个宠物领养系统&#xff0c;来满足用宠物领养的需求。 本宠物领养系统…

抖音短视频账号矩阵seo分发系统--开发源代

1.抖音矩阵号/抖音短视频SEO矩阵系统开发及开发者思路分享: 短视频获客系统开发原型支持短视频智能批量剪辑、短视频多账号管理定时发布&#xff0c;短视频排名查询及优化&#xff0c;智能客服私信回复等&#xff0c;那么短视频seo系统开发时需要开发哪些功能呢&#xff1f;今天…

全能图片转文字:多功能图片转换工具

全能图片转文字是一款功能丰富的图片转文字软件&#xff0c;通过OCR文字识别技术能够轻松识别图片中的文字信息&#xff0c;并快速提取转换成文本格式。除了支持图片转文字&#xff0c;全能图片转文字还可以完成音频转文字、视频转文字、截图转文字等操作&#xff0c;轻松满足日…

时序预测 | MATLAB实现基于PSO-BiGRU、BiGRU时间序列预测对比

时序预测 | MATLAB实现基于PSO-BiGRU、BiGRU时间序列预测对比 目录 时序预测 | MATLAB实现基于PSO-BiGRU、BiGRU时间序列预测对比效果一览基本描述程序设计参考资料 效果一览 基本描述 1.时序预测 | MATLAB实现基于PSO-BiGRU、BiGRU时间序列预测&#xff1b; 2.单变量时间序列数…

春秋云镜 CVE-2018-20604

春秋云镜 CVE-2018-20604 lfdycms任意文件读取 靶标介绍 雷风影视CMS是一款采用PHP基于THINKPHP3.2.3框架开发&#xff0c;适合各类视频、影视网站的影视内容管理程序&#xff0c;该CMS存在缺陷&#xff0c;可以通过 admin.php?s/Template/edit/path/web………*…*1.txt 的方…

【ES系列】(一)简介与安装

首发博客地址 首发博客地址[1] 系列文章地址[2] 为什么要学习 ES? 强大的全文搜索和检索功能&#xff1a;Elasticsearch 是一个开源的分布式搜索和分析引擎&#xff0c;使用倒排索引和分布式计算等技术&#xff0c;提供了强大的全文搜索和检索功能。学习 ES 可以掌握如何构建复…

STM32实现FFT,求取幅度频谱

STM32实现FFT&#xff0c;求取幅度频谱 FFT不太对劲的理解 FFT的原理比较复杂&#xff0c;因为32使用FFT不用去管算法是如何运作的&#xff0c;我在这里就进行简单的介绍了。 因为是简单介绍&#xff0c;就只介绍下幅度频谱图&#xff0c;不考虑相位频谱图。 ​ FFT可以将一个…

管理类联考——逻辑——形式逻辑——汇总篇——知识点突破——综合推理

角度——重难点 综合推理条件优先级口诀 事实问题优先看&#xff0c;数量不定先计算。 半事实条件可分类&#xff0c;重复元素是关键。 题干如果多假言&#xff0c;就要优先做串联。 题干只有一假言&#xff0c;否后或者找矛盾。 特殊条件优先看&#xff0c;其他条件放后边。