windows10|音视频剪辑|FFMPEG录屏和网络推流源初步的生成

前言:

FFMPEG的功能强大是毋庸置疑的,那么录屏的需求大家在某些时候大家可能是非常需要的,例如,现有的项目需要演示,因此录制一段演示视频;亦或者做内容分发直播的,比如游戏主播,需要录制在玩某个游戏的精彩片段,以创建一个后期的视频素材库;亦或者通过FFMPEG抓取摄像头的实时画面,满足某些人的疯狂的偷窥欲(友情提醒:大家还是需要做一个守法公民,不要看了我的文章然后去做坏事!!!!!);亦或者遇到了某些非常好听或者好看的视频,但无法保存,此时就需要录屏功能来弥补这些遗憾了;亦或者在服务器运维的时候,需要做运维审计工作等等录屏需求

而在FFMPEG面前,这些功能的实现通常都是一条简简单单的命令就可以完成了

下面将就如何录屏,如何确保录屏的质量以及网络推流的一些基本概念做一个简单的介绍

一,

电脑录屏和网络推流的概念

电脑录屏指的是在一定的时间内,录制电脑上的所有活动,比如,打开网页,播放视频,播放音乐等等动作,统统都记录,最后将这些实时产生的音视频数据流写入指定的文件,这些都是本地的活动,通常电脑端的录屏活动生成的本地文件是作为视频素材库使用的,也就是说后期还需要通过音视频剪辑工具按需裁剪,最后按需求分发到网络或者保留在本地自己欣赏

网络推流指的是通过特定软件比如利用摄像头实时捕捉音视频数据流,将这些数据主动推送到远程的指定的网络端,一般情况下,直播,实时摄像头这些最终都是网络推流,本地是不保存音视频数据的(后台本地有时候可能会保存,毕竟直播什么的有时候还需要一些审计,或者比如交通摄像头,事故发生的时候可能需要视频回溯)

网络推流和拉流需要一些相应的网络协议支持,比如rmtp协议,这里就不展开说了

二,

基本的录屏

这里说的基本录屏是指的Windows10,win7,或者win11 ,无需其它驱动,基于Windows操作系统,直接录屏,但录制的只有视频,没有音频

无疑的,这样的方式是比较简单的,但缺点也是比较大的:没有声音,只能录制Windows内的整个桌面

命令如下:

fmpeg -f gdigrab -i desktop -f mp4 d:/out.mp4 -y

注意,这个命令生成的out.mp4文件可能Windows media可能打不开,需要使用vlc播放器播放

输出支持的格式也可以是wma,flv   按q退出录屏

一般不需要特别设置,比如视频的比特率什么的,直接默认就可以了,在现在的硬件条件下,清晰度基本可以满足,录屏主要是CPU运算

注意:经过实践,在本次实验中,mp4格式的视频清晰度最高,效果最好

ffmpeg -f gdigrab -i desktop  d:/out.flv -y
ffmpeg -f gdigrab -i desktop  d:/out.wma -y

🆗,这个基本录屏只能录制视频,有点不太能满足需求,比如翻录某些视频的情况下,下面就来一个进阶录屏:可以同时录制高清视频和高清音频

三,

高清音视频录制

此种方式需要安装虚拟屏幕驱动并启用声卡录音功能

常用的驱动如UScreenCapture,screen-capture-recorder

本例中使用screen-capture-recorder,该驱动程序下载地址:http://sourceforge.net/projects/screencapturer/files/

###注意,该驱动更新频率比较低,直接选择最新版本就可以了,本例使用的是Setup Screen Capturer Recorder v0.12.11

此程序默认安装就可以了,安装完毕后,会有一个新的FFMPEG,这个FFMPEG版本是比较低的,但后面的录屏还只能用这个低版本的FFMPEG,高版本的FFMPEG好像用不了:

查询dshow驱动执行情况: 

ffmpeg -list_devices true -f dshow -i dummy

旧新版本的FFMPEG查询现在支持的录屏驱动,新的FFMPEG可能是不支持的,现在暂时还没有办法(第一个命令是旧版FFMPEG,第二个命令是新版FFMPEG):

C:\Users\Administrator>"C:\Program Files (x86)\Screen Capturer Recorder\configuration_setup_utility\vendor\ffmpeg\bin\ffmpeg.exe" -list_devices true -f dshow -i dummy
ffmpeg version N-44080-gdfb4757 Copyright (c) 2000-2012 the FFmpeg developers
  built on Aug 31 2012 16:58:51 with gcc 4.7.1 (GCC)
  configuration: --enable-gpl --enable-version3 --disable-pthreads --enable-runtime-cpudetect --enable-avisynth --enable-bzlib --enable-frei0r --enable-libass --enable-libcelt --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libfreetype --enable-libgsm --enable-libmp3lame --enable-libnut --enable-libopenjpeg --enable-librtmp --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libutvideo --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxavs --enable-libxvid --enable-zlib
  libavutil      51. 70.100 / 51. 70.100
  libavcodec     54. 55.100 / 54. 55.100
  libavformat    54. 25.104 / 54. 25.104
  libavdevice    54.  2.100 / 54.  2.100
  libavfilter     3. 15.101 /  3. 15.101
  libswscale      2.  1.101 /  2.  1.101
  libswresample   0. 15.100 /  0. 15.100
  libpostproc    52.  0.100 / 52.  0.100
[dshow @ 0292bc80] DirectShow video devices
[dshow @ 0292bc80]  "screen-capture-recorder"
[dshow @ 0292bc80] DirectShow audio devices
[dshow @ 0292bc80]  "楹﹀厠椋?(Realtek(R) Audio)"
[dshow @ 0292bc80]  "virtual-audio-capturer"
[dshow @ 0292bc80]  "绔嬩綋澹版贩闊?(Realtek(R) Audio)"
dummy: Immediate exit requested

C:\Users\Administrator>ffmpeg -list_devices true -f dshow -i dummy
ffmpeg version 6.1.1-full_build-www.gyan.dev Copyright (c) 2000-2023 the FFmpeg developers
  built with gcc 12.2.0 (Rev10, Built by MSYS2 project)
  configuration: --enable-gpl --enable-version3 --enable-static --pkg-config=pkgconf --disable-w32threads --disable-autodetect --enable-fontconfig --enable-iconv --enable-gnutls --enable-libxml2 --enable-gmp --enable-bzlib --enable-lzma --enable-libsnappy --enable-zlib --enable-librist --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-libbluray --enable-libcaca --enable-sdl2 --enable-libaribb24 --enable-libaribcaption --enable-libdav1d --enable-libdavs2 --enable-libuavs3d --enable-libzvbi --enable-librav1e --enable-libsvtav1 --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libxvid --enable-libaom --enable-libjxl --enable-libopenjpeg --enable-libvpx --enable-mediafoundation --enable-libass --enable-frei0r --enable-libfreetype --enable-libfribidi --enable-libharfbuzz --enable-liblensfun --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf --enable-cuda-llvm --enable-cuvid --enable-ffnvcodec --enable-nvdec --enable-nvenc --enable-dxva2 --enable-d3d11va --enable-libvpl --enable-libshaderc --enable-vulkan --enable-libplacebo --enable-opencl --enable-libcdio --enable-libgme --enable-libmodplug --enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libshine --enable-libtheora --enable-libtwolame --enable-libvo-amrwbenc --enable-libcodec2 --enable-libilbc --enable-libgsm --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-ladspa --enable-libbs2b --enable-libflite --enable-libmysofa --enable-librubberband --enable-libsoxr --enable-chromaprint
  libavutil      58. 29.100 / 58. 29.100
  libavcodec     60. 31.102 / 60. 31.102
  libavformat    60. 16.100 / 60. 16.100
  libavdevice    60.  3.100 / 60.  3.100
  libavfilter     9. 12.100 /  9. 12.100
  libswscale      7.  5.100 /  7.  5.100
  libswresample   4. 12.100 /  4. 12.100
  libpostproc    57.  3.100 / 57.  3.100
[dshow @ 000001d0b92ba200] "UScreenCapture" (video)
[dshow @ 000001d0b92ba200]   Alternative name "@device_sw_{860BB310-5D01-11D0-BD3B-00A0C911CE86}\UScreenCapture"
[dshow @ 000001d0b92ba200] "screen-capture-recorder" (video)
[dshow @ 000001d0b92ba200]   Alternative name "@device_sw_{860BB310-5D01-11D0-BD3B-00A0C911CE86}\{4EA69364-2C8A-4AE6-A561-56E4B5044439}"
[dshow @ 000001d0b92ba200] "麦克风 (Realtek(R) Audio)" (audio)
[dshow @ 000001d0b92ba200]   Alternative name "@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\wave_{9A0CE0E2-9E7D-4F81-857D-CF4BA1D888E3}"
[dshow @ 000001d0b92ba200] "virtual-audio-capturer" (audio)
[dshow @ 000001d0b92ba200]   Alternative name "@device_sw_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\{8E146464-DB61-4309-AFA1-3578E927E935}"
[dshow @ 000001d0b92ba200] "立体声混音 (Realtek(R) Audio)" (audio)
[dshow @ 000001d0b92ba200]   Alternative name "@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\wave_{E3B2D1FC-6202-4AFE-AC1C-2BD8DD95EB72}"
[in#0 @ 000001d0b92ba080] Error opening input: Immediate exit requested
Error opening input file dummy.

Setup Screen Capturer Recorder v0.12.11安装完毕后,不需要重启服务器,立刻就生效了

这个时候还需要安装Java环境,jdk下载地址:https://www.java.com/en/download/  ,如何安装jdk就不用说了,有手就可以安装了,没办法jdk是Setup Screen Capturer Recorder v0.12.11的强依赖

还需要打开Windows的录制功能:

🆗,现在可以开始录制带音频的录屏文件了:

"C:\Program Files (x86)\Screen Capturer Recorder\configuration_setup_utility\vendor\ffmpeg\bin\ffmpeg.exe" -f dshow -rtbufsize 1202000k    -i video="screen-capture-recorder":audio="virtual-audio-capturer" -sameq  -ar 22050 d:\out1.flv -y
"C:\Program Files (x86)\Screen Capturer Recorder\configuration_setup_utility\vendor\ffmpeg\bin\ffmpeg.exe" -f dshow -rtbufsize 1202000k    -i video="screen-capture-recorder":audio="virtual-audio-capturer" -sameq  -ar 22050 d:\out1.wma -y

指定输出格式为mp4的时候报错了,报错如下:

看样子mp4编码转码的时候失败了,也就是说该驱动不支持mp4,或者和操作系统有关吧???

C:\Users\Administrator>"C:\Program Files (x86)\Screen Capturer Recorder\configuration_setup_utility\vendor\ffmpeg\bin\ffmpeg.exe" -f dshow -rtbufsize 1202000k    -i video="screen-capture-recorder":audio="virtual-audio-capturer" -sameq  -ar 22050 -f mp4 d:\out1.mp4 -y
ffmpeg version N-44080-gdfb4757 Copyright (c) 2000-2012 the FFmpeg developers
  built on Aug 31 2012 16:58:51 with gcc 4.7.1 (GCC)
  configuration: --enable-gpl --enable-version3 --disable-pthreads --enable-runtime-cpudetect --enable-avisynth --enable-bzlib --enable-frei0r --enable-libass --enable-libcelt --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libfreetype --enable-libgsm --enable-libmp3lame --enable-libnut --enable-libopenjpeg --enable-librtmp --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libutvideo --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxavs --enable-libxvid --enable-zlib
  libavutil      51. 70.100 / 51. 70.100
  libavcodec     54. 55.100 / 54. 55.100
  libavformat    54. 25.104 / 54. 25.104
  libavdevice    54.  2.100 / 54.  2.100
  libavfilter     3. 15.101 /  3. 15.101
  libswscale      2.  1.101 /  2.  1.101
  libswresample   0. 15.100 /  0. 15.100
  libpostproc    52.  0.100 / 52.  0.100
leaving aero on[dshow @ 029cbe40] Estimating duration from bitrate, this may be inaccurate
Guessed Channel Layout for  Input Stream #0.1 : stereo
Input #0, dshow, from 'video=screen-capture-recorder:audio=virtual-audio-capturer':
  Duration: N/A, start: 30738.314000, bitrate: 1536 kb/s
    Stream #0:0: Video: rawvideo, bgra, 2560x1440, 30 tbr, 10000k tbn, 30 tbc
    Stream #0:1: Audio: pcm_s16le, 48000 Hz, stereo, s16, 1536 kb/s
[libx264 @ 04065b40] using cpu capabilities: MMX2 SSE2Fast SSSE3 FastShuffle SSE4.2 AVX AVX2 FMA3 BMI1 BMI2
[libx264 @ 04065b40] profile High, level 5.0
[libx264 @ 04065b40] 264 - core 125 r2208 d9d2288 - H.264/MPEG-4 AVC codec - Copyleft 2003-2012 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=24 lookahead_threads=4 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, mp4, to 'd:\out1.mp4':
  Metadata:
    encoder         : Lavf54.25.104
    Stream #0:0: Video: h264 ([33][0][0][0] / 0x0021), yuv420p, 2560x1440, q=-1--1, 10000k tbn, 30 tbc
    Stream #0:1: Audio: aac ([64][0][0][0] / 0x0040), 22050 Hz, stereo, s16, 128 kb/s
Stream mapping:
  Stream #0:0 -> #0:0 (rawvideo -> libx264)
  Stream #0:1 -> #0:1 (pcm_s16le -> libvo_aacenc)
Press [q] to stop, [?] for help
x264 [error]: malloc of size 15786496 failedime=00:00:27.74 bitrate= 109.3kbits/s dup=3 drop=0
Video encoding failed
Received stop event after 2795 passes

换成flv格式的输出文件,第二次在执行录屏的时候报错了:

[dshow @ 02a2be40] real-time buffer 100% full! frame dropped!

这个报错说的是buffer溢出了,根本原因是输出的文件里有内容了,录制的视频不知道如何把数据流写到文件的哪个位置了,很简单,换一个输出文件名或者把原来的输出文件删除就可以继续录制了

C:\Users\Administrator>"C:\Program Files (x86)\Screen Capturer Recorder\configuration_setup_utility\vendor\ffmpeg\bin\ffmpeg.exe" -f dshow -rtbufsize 1202000k    -i video="screen-capture-recorder":audio="virtual-audio-capturer" -sameq  -ar 22050 -vol 200 d:\out1.flv -y
ffmpeg version N-44080-gdfb4757 Copyright (c) 2000-2012 the FFmpeg developers
  built on Aug 31 2012 16:58:51 with gcc 4.7.1 (GCC)
  configuration: --enable-gpl --enable-version3 --disable-pthreads --enable-runtime-cpudetect --enable-avisynth --enable-bzlib --enable-frei0r --enable-libass --enable-libcelt --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libfreetype --enable-libgsm --enable-libmp3lame --enable-libnut --enable-libopenjpeg --enable-librtmp --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libutvideo --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxavs --enable-libxvid --enable-zlib
  libavutil      51. 70.100 / 51. 70.100
  libavcodec     54. 55.100 / 54. 55.100
  libavformat    54. 25.104 / 54. 25.104
  libavdevice    54.  2.100 / 54.  2.100
  libavfilter     3. 15.101 /  3. 15.101
  libswscale      2.  1.101 /  2.  1.101
  libswresample   0. 15.100 /  0. 15.100
  libpostproc    52.  0.100 / 52.  0.100
leaving aero on[dshow @ 02a2be40] Estimating duration from bitrate, this may be inaccurate
Guessed Channel Layout for  Input Stream #0.1 : stereo
Input #0, dshow, from 'video=screen-capture-recorder:audio=virtual-audio-capturer':
  Duration: N/A, start: 31001.957000, bitrate: 1536 kb/s
    Stream #0:0: Video: rawvideo, bgra, 2560x1440, 30 tbr, 10000k tbn, 30 tbc
    Stream #0:1: Audio: pcm_s16le, 48000 Hz, stereo, s16, 1536 kb/s
File 'd:\out1.flv' already exists. Overwrite ? [y/N] real-time buffer 63% full! frame dropped!
[dshow @ 02a2be40] real-time buffer 66% full! frame dropped!
[dshow @ 02a2be40] real-time buffer 68% full! frame dropped!
[dshow @ 02a2be40] real-time buffer 71% full! frame dropped!
[dshow @ 02a2be40] real-time buffer 73% full! frame dropped!
[dshow @ 02a2be40] real-time buffer 76% full! frame dropped!
    Last message repeated 1 times
[dshow @ 02a2be40] real-time buffer 78% full! frame dropped!
    Last message repeated 1 times
[dshow @ 02a2be40] real-time buffer 80% full! frame dropped!
    Last message repeated 19 times
[dshow @ 02a2be40] real-time buffer 83% full! frame dropped!
    Last message repeated 1 times
[dshow @ 02a2be40] real-time buffer 85% full! frame dropped!
    Last message repeated 1 times
[dshow @ 02a2be40] real-time buffer 88% full! frame dropped!
    Last message repeated 2 times
[dshow @ 02a2be40] real-time buffer 90% full! frame dropped!
    Last message repeated 2 times
[dshow @ 02a2be40] real-time buffer 93% full! frame dropped!
    Last message repeated 2 times
[dshow @ 02a2be40] real-time buffer 95% full! frame dropped!
    Last message repeated 32 times
[dshow @ 02a2be40] real-time buffer 98% full! frame dropped!
    Last message repeated 2 times
[dshow @ 02a2be40] real-time buffer 100% full! frame dropped!

录制好的视频播放后,可以看到确实录制到声音了,我的QQ音乐播放的歌曲完全录制进视频内了,开心…………^……^

那么,到这里就很清楚了,如果只需要录制视频,那就把audio="virtual-audio-capturer"这一段删除,反之亦然!!!!!

上面的录屏参数说明:

  • -f dshow 指定输入的数据流使用dshow驱动
  • -rtbufsize 1202000k 录制时的最大缓存使用量
  • -i video="screen-capture-recorder":audio="virtual-audio-capturer" 从哪抓取数据流,这里指定了具体执行动作的驱动
  • -sameq  -ar 22050  如果是flv输出的话,不使用此参数会报错[flv @ 0295caa0] flv does not support that sample rate, choose from (44100, 22050, 11025),因此,我选择了22050,这三个数【44100, 22050, 11025】里面选择一个就可以了
  •  -vol 200 这里是调节声音大小,如果电脑内的声音本身比较小,放大两倍
  • -s 1940*1440  这里是设置录屏的大小,以及-v 15(帧率)等等,等同于-video_size 1280x720注意注意,这些录屏属性设置需要放在命令的后面,最好是在输出文件之前  例如这样:
  • "C:\Program Files (x86)\Screen Capturer Recorder\configuration_setup_utility\vendor\ffmpeg\bin\ffmpeg.exe" -f dshow -rtbufsize 1202000k    -i video="screen-capture-recorder":audio="virtual-audio-capturer" -sameq  -ar 22050 -vol 200 -s 1920*1440  d:\out1.flv -y

    但这样的参数位置将会报错,需要特别注意哦:

C:\Users\Administrator>"C:\Program Files (x86)\Screen Capturer Recorder\configuration_setup_utility\vendor\ffmpeg\bin\ffmpeg.exe" -f dshow -rtbufsize 1202000k    -ar 22050 -i video="screen-capture-recorder":audio="virtual-audio-capturer" -sameq   -vol 200 -s 1920*1440  d:\out1.flv -y
ffmpeg version N-44080-gdfb4757 Copyright (c) 2000-2012 the FFmpeg developers
  built on Aug 31 2012 16:58:51 with gcc 4.7.1 (GCC)
  configuration: --enable-gpl --enable-version3 --disable-pthreads --enable-runtime-cpudetect --enable-avisynth --enable-bzlib --enable-frei0r --enable-libass --enable-libcelt --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libfreetype --enable-libgsm --enable-libmp3lame --enable-libnut --enable-libopenjpeg --enable-librtmp --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libutvideo --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxavs --enable-libxvid --enable-zlib
  libavutil      51. 70.100 / 51. 70.100
  libavcodec     54. 55.100 / 54. 55.100
  libavformat    54. 25.104 / 54. 25.104
  libavdevice    54.  2.100 / 54.  2.100
  libavfilter     3. 15.101 /  3. 15.101
  libswscale      2.  1.101 /  2.  1.101
  libswresample   0. 15.100 /  0. 15.100
  libpostproc    52.  0.100 / 52.  0.100
leaving aero on[dshow @ 0286bf20] Could not set audio options
video=screen-capture-recorder:audio=virtual-audio-capturer: Input/output error

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用word2vec+tensorflow自然语言处理NLP

目录 介绍: 搭建上下文或预测目标词来学习词向量 建模1: 建模2: 预测: 介绍: Word2Vec是一种用于将文本转换为向量表示的技术。它是由谷歌团队于2013年提出的一种神经网络模型。Word2Vec可以将单词表示为高维空间…

987. 二叉树的垂序遍历 - 力扣(LeetCode)

题目描述 给你二叉树的根结点 root ,请你设计算法计算二叉树的 垂序遍历 序列。 对位于 (row, col) 的每个结点而言,其左右子结点分别位于 (row 1, col - 1) 和 (row 1, col 1) 。树的根结点位于 (0, 0) 。 二叉树的 垂序遍历 从最左边的列开始直到…

VM和Linux安装

VM和Linux安装 一、下载VM 1.官网地址:https://www.vmware.com/cn.html 2.其他地址:http://ww7.nocmd.com/windows/740.html 许可证这个,大家可以自己上网搜索,很容易就搜索到就可以使用了 上面内容就是安装VM的步骤 安…

LeetCode、1318. 或运算的最小翻转次数【中等,位运算】

文章目录 前言LeetCode、1318. 或运算的最小翻转次数【中等,位运算】题目链接与分类题解位运算 资料获取 前言 博主介绍:✌目前全网粉丝2W,csdn博客专家、Java领域优质创作者,博客之星、阿里云平台优质作者、专注于Java后端技术领…

线性代数的本质 2 线性组合、张成的空间、基

一种新的看待方式 对于一个向量,比如说,如何看待其中的3和-2? 一开始,我们往往将其看作长度(从向量的首走到尾部,分别在x和y上走的长度)。 在有了数乘后,我们可以将其视为对向量进行…

【心得】调试SPI+DMA的一点心得

由于项目需要,STM32F303跟STM32F405之间要用到DMASPI口来估大量数据传输,实现两边的数据收发。 开始只用到MISO,MOSI,跟CLK三个信号,STM32F303配置成主机,18M的波特率,用DMA发4K的Buffer的数据…

蓝牙BLE学习-安全

1.基本概念 蓝牙标准规定了5种基本的安全服务 身份验证:根据通信设备的蓝牙地址验证其身份。蓝牙不提供本地用户身份验证。保密性:确保只有授权的设备才能访问和查看传输的数据,防止窃听造成的信息泄露。授权(Authorization):在允许设备使用某项服务之前&#xff…

探索Gorm - Golang流行的数据库ORM框架

🏷️个人主页:鼠鼠我捏,要死了捏的主页 🏷️系列专栏:Golang全栈-专栏 🏷️个人学习笔记,若有缺误,欢迎评论区指正 前些天发现了一个巨牛的人工智能学习网站,通俗易懂&…

Codeforces Round 303 (Div. 2)C. Kefa and Park(DFS、实现)

文章目录 题面链接题意题解代码总结 题面 链接 C. Kefa and Park 题意 求叶节点数量,叶节点满足,从根节点到叶节点的路径上最长连续1的长度小于m 题解 这道题目主要是实现,当不满足条件时直接返回。 到达叶节点后统计答案,用…

kali系统概述、nmap扫描应用、john破解密码、抓包概述、以太网帧结构、抓包应用、wireshark应用、nginx安全加固、Linux系统加固

目录 kali nmap扫描 使用john破解密码 抓包 封装与解封装 网络层数据包结构 TCP头部结构​编辑 UDP头部结构 实施抓包 安全加固 nginx安全 防止缓冲区溢出 Linux加固 kali 实际上它就是一个预安装了很多安全工具的Debian Linux [rootmyhost ~]# kali resetkali …

spring boot自动装配原理

spring boot自动装配是通过启动类SpringBootApplication默认扫描本包极其子包,要想扫描外部文件需要在启动类上加相应注解

【Spring MVC篇】Cookie和Session的获取 Header的获取

个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【Spring MVC】 本专栏旨在分享学习Spring MVC的一点学习心得,欢迎大家在评论区交流讨论💌 Cookie是客户端保存用…

Vue--》深入学习Tailwind CSS掌握优雅而高效的前端样式开发

Tailwind CSS是一个非常强大且灵活的CSS框架,适用于开发者希望高度定制化界面样式的项目。今天博主就 Tailwind CSS 做一个简单介绍以及案例讲解,争取读者阅读文章后入门。 仅靠一篇文章博主也不可能将Tailwind CSS所有内容讲解的面面俱到,在…

算法学习——LeetCode力扣二叉树篇5

算法学习——LeetCode力扣二叉树篇5 513. 找树左下角的值 513. 找树左下角的值 - 力扣(LeetCode) 描述 给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 示例 示例 1: 输入: r…

CorelDRAW2024国内专业个人免费版下载

CorelDRAW是一款屡获殊荣的图形和图像编辑软件,包含两个绘图应用程序:一个用于矢量图及页面设计,另一个用于图像编辑。自1989年进入中国市场以来,CorelDRAW不断推出新的版本和功能,以满足用户不断变化的需求。 CorelD…

力扣面试题 16.21. 交换和(哈希表)

Problem: 面试题 16.21. 交换和 文章目录 题目描述思路及解法复杂度Code 题目描述 思路及解法 1.分别求取array1与array2数组每一个元素的和(sum1与sum2)并同时将array2的元素存入一个set集合中; 2.如果sum1和sum2的和为奇数,则不…

Redis相关介绍

概念 Redis:非关系型数据库(non-relational),Mysql是关系型数据库(RDBMS) Redis是当今非常流行的基于KV结构的作为Cache使用的NoSQL数据库 为什么使用NoSQL 关系型 数据库无法应对每秒上万次 的读写请求 表中的存储记录 数量有限 无法简单…

【JavaEE】_JavaScript基础语法

目录 1. JavaScript概述 1.1 JavaScript简介 1.2 HTML、CSS、JavaScript的关系 1.3 JavaScrip的组成 2. JavaScript的书写形式 2.1 内嵌式 2.2 行内式 2.3 外部式 3. 输出 3.1 alert 3.2 console.log 4. 变量的使用 4.1 创建变量 4.1.1 使用var 4.1.2 使用let …

幻兽帕鲁Palworld专用服务器CPU内存配置怎么选择?

腾讯云幻兽帕鲁服务器配置怎么选?根据玩家数量选择CPU内存配置,4到8人选择4核16G、10到20人玩家选择8核32G、2到4人选择4核8G、32人选择16核64G配置,腾讯云百科txybk.com来详细说下腾讯云幻兽帕鲁专用服务器CPU内存带宽配置选择方法&#xff…

面试经典150题——无重复字符的最长子串

我生来就是高山而非溪流,我欲于群峰之巅俯视平庸的沟壑 1. 题目描述 2. 题目分析与解析 2.1 思路一——暴力解法 看到这个题目,我们是不是发现和上一篇内容刚刚讲过的长度最小的子数组题目很像?首先自然的暴力解法,就是遍历字符…