首页
壁纸
关于
站点统计
推荐
思维导图
deepseek
短巷与雨
Search
1
零成本搭建个人站点
7 阅读
2
archliunx关闭自动休眠
5 阅读
3
搭建高效写作环境:Typora+PicGo+缤纷云图床小白完整指南
4 阅读
4
Qt安装配置教程(小白适用)
3 阅读
5
Snipaste:一款非常好用的截图神器
3 阅读
默认分类
工具分享
文章转载
Linux笔记
AI工具
环境搭建
问题排错
登录
Search
Linkify
累计撰写
21
篇文章
累计收到
1
条评论
首页
栏目
默认分类
工具分享
文章转载
Linux笔记
AI工具
环境搭建
问题排错
页面
壁纸
关于
站点统计
推荐
思维导图
deepseek
短巷与雨
搜索到
21
篇与
的结果
2025-09-08
Windows搭建RTMP服务器
本文转载自:Windows搭建RTMP服务器+OBS推流+VLC拉流_浏览器查看 推流服务器信息 vlc-CSDN博客# 一、Nginx-RTMP服务器搭建1、下载Nginx下载地址:http://nginx-win.ecsds.eu/download/该版本是带rtmp模块且编译过的nginx版本,可以直接使用下载完成后解压,解压后的目录命名为 nginx2、下载Nginx的RTMP扩展包下载地址:https://github.com/arut/nginx-rtmp-module下载完成后解压,将解压后的文件夹放入 nginx 目录下3、修改配置文件在conf目录下,新建一个文件“nginx.conf”,内容如下:worker_processes 1; events { worker_connections 1024; } #RTMP服务 rtmp { server { listen 1935; #监听端口 chunk_size 4096; #数据传输块大小 application live{ #创建名为"live"的应用 live on; } } } #HTTP服务,可以通过浏览器访问http://localhost/stat 或者 http://localhost:80/stat 查看服务器状态 http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 80; server_name localhost; location /stat { rtmp_stat all; rtmp_stat_stylesheet stat.xsl; } location /stat.xsl { root ./nginx-rtmp-module-master/; #rtmp拓展包目录 } location / { root html; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } } 该文件主要是直播配置,录播配置、直播回放配置各有不同4、启动服务器在nginx目录下打开命令行界面,输入 nginx.exe -c conf\nginx.conf启动后,可以在任务管理器中看到nginx进程5、查看服务器状态在浏览器地址栏输入 localhost/stat ,可以看到服务器状态信息6、其它ngnix命令nginx.exe -s stop //快速终止服务器,可能不保存相关信息 nginx.exe -s quit //完整有序停止服务器,保存相关信息 nginx.exe -s reload //重新载入Nginx,当配置信息修改,需要重新载入这些配置时使用此命令二、OBS推流官网下载地址:https://obsproject.com/zh-cn/download1 、推流设置服务:自定义服务器: rtmp://127.0.0.1:1935/live串流秘钥: stream添加流媒体源,然后开始直播2、查看服务器状态打开浏览器输入 localhost/stat 可以看到推流信息三、VLC拉流VLC下载地址:https://www.videolan.org/1、打开网络串流配置2、输入媒体流地址rtmp://127.0.0.1:1935/live/stream,点击播放即可四、补充若需要在公网环境下进行推拉流,只需将80和1935端口映射到公网即可,然后将本地地址改为公网地址
2025年09月08日
2 阅读
0 评论
0 点赞
2025-09-08
VSCode配置C&C++语言环境(小白专用保姆教程)
基本步骤:下载并安装VSCode地址:https://code.visualstudio.com/](https://code.visualstudio.com/)不会安装vscode的看下方博客:超详细VSCode安装教程(Windows)_索儿呀的博客-CSDN博客:https://blog.csdn.net/Zhangguohao666/article/details/105665412安装C++插件安装编译器(MinGW-W64 GCC)C编译器(MinGW-W64 GCC)下载地址:https://sourceforge.net/projects/mingw-w64/files/mingw-w64/ 在线下载的exe文件一般是会有网络的问题,导致下载不了,建议windows64位直接下载8.1.0版本的x86_64-win32-seh或者x86_64-posix-seh。两者在多线程方面有些许差异,一般情况不会用到该功能,所以两者皆可。下载后用解压软件解压即可。配置环境变量找到这个文件夹内的一个叫bin的文件夹,然后把它的地址复制一下: 打开之后将刚刚复制的地址添加进去: 然后点确定,之前弹出的所有页面都点击确定。然后测试环境配置是否成功: Win+R快捷键打开运行窗口,在里面输入cmd,回车打开cmd.exe 在cmd.exe中输入如下命令: gcc -v -E -x c++ - 如果运行结果像下方图片中这样,就配置成功了。配置最后在VSCode中进行相关配置: 先新建一个文件夹作为C语言项目文件,然后点击菜单栏中的File——>Open Folder,找到刚才新建的文件夹,然后点击选择文件夹打开这个项目文件。 然后在里面新建一个hello.c文件(名字随便起,以.c结尾就行了) 然后再建一个 .vscode文件夹(注意前面有个点),在里面建三个文件,c_cpp_properties.json、launch.json、tasks.jsonc_cpp_properties.json:将这段代码复制进去{ "configurations": [ { "name": "Win32", "includePath": [ "${workspaceRoot}", "C:/MinGW-W64 GCC/mingw64/include/**", "C:/MinGW-W64 GCC/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++", "C:/MinGW-W64 GCC/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/x86_64-w64-mingw32", "C:/MinGW-W64 GCC/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/backward", "C:/MinGW-W64 GCC/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include", "C:/MinGW-W64 GCC/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include-fixed", "C:/MinGW-W64 GCC/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/include" ], "defines": [ "_DEBUG", "UNICODE", "__GNUC__=6", "__cdecl=__attribute__((__cdecl__))" ], "intelliSenseMode": "msvc-x64", "browse": { "limitSymbolsToIncludedHeaders": true, "databaseFilename": "", "path": [ "${workspaceRoot}", "C:/MinGW-W64 GCC/mingw64/include/**", "C:/MinGW-W64 GCC/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++", "C:/MinGW-W64 GCC/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/x86_64-w64-mingw32", "C:/MinGW-W64 GCC/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/backward", "C:/MinGW-W64 GCC/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include", "C:/MinGW-W64 GCC/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include-fixed", "C:/MinGW-W64 GCC/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/include" ] } } ], "version": 4 }然后,下方红框里的内容需要修改,将所有的改为自己的安装路径:launch.json:复制粘贴,然后miDebuggerPath属性里的内容也要改成自己的路径{ "version": "0.2.0", "configurations": [ { "name": "(Windows) Launch", "type": "cppvsdbg", "request": "launch", "program": "cmd", "preLaunchTask": "echo", "args": [ "/C", "${fileDirname}\\${fileBasenameNoExtension}.exe", "&", "echo.", "&", "pause" ], "stopAtEntry": false, "cwd": "${workspaceFolder}", "environment": [], "console":"externalTerminal" }, { "name": "(gdb) Launch", "type": "cppdbg", "request": "launch", "program": "${workspaceFolder}/${fileBasenameNoExtension}.exe", "args": [], "stopAtEntry": false, "cwd": "${workspaceFolder}", "environment": [], "externalConsole": true, "MIMode": "gdb", "miDebuggerPath": "C:\\MinGW-W64 GCC\\mingw64\\bin\\gdb.exe",// 自己电脑的gdb "preLaunchTask": "echo",//这里和task.json的label相对应 "setupCommands": [ { "description": "Enable pretty-printing for gdb", "text": "-enable-pretty-printing", "ignoreFailures": true } ] } ] }tasks.json:复制粘贴{ // See https://go.microsoft.com/fwlink/?LinkId=733558 // for the documentation about the tasks.json format "version": "2.0.0", "tasks": [ { "label": "echo", "type": "shell", "command": "gcc", "args": [ "-g", "${file}", "-o", "${fileBasenameNoExtension}.exe", "-fexec-charset=GBK",//解决中文乱码 "-lstdc++"//解决只能运行c不能运行c++ ] } ], "presentation": { "echo": true, "reveal": "always", "focus": false, "panel": "shared", "showReuseMessage": true, "clear": false } }然后就可以在之前建的hello.c文件里面写程序啦,比如我们熟悉的hello world:#include<stdio.h> main() { printf("hello world\n"); //system("pause"); }程序闪退问题上面的三个文件只要复制正确,路径改成自己的闪退问题就已经解决实在不行你就把输入system("pause");f5运行结果: vscode配置c/c++环境就配置完成。
2025年09月08日
2 阅读
0 评论
0 点赞
2025-09-08
Ubuntu安装SSH服务
一、SSH简介安全外壳协议(Secure Shell,简称SSH)是一种加密的网络传输协议,设计用于替代许多不安全的远程登录程序,如Telnet。SSH提供了加密、身份验证和数据完整性等功能,确保数据在传输过程中的安全。它主要应用于远程登录、远程命令执行、文件传输等场景,是网络管理员和远程用户进行安全通信的重要工具。二、Ubuntu安装SSH1.更新系统包sudo apt-get update2.安装SSH服务sudo apt-get install openssh-server3.启动SSH服务sudo systemctl start ssh4.查看SSH服务状态sudo systemctl status ssh 5.设置ssh服务开机自启动sudo systemctl enable ssh6.允许ssh通过防火墙sudo ufw allow ssh到此ssh服务配置完毕,可从远程客户端使用SSH来连接您的Ubuntu服务器了三、总结SSH(Secure Shell)作为一种加密的网络传输协议,在网络安全通信中扮演着至关重要的角色。通过SSH,用户可以在不安全的网络环境中安全地进行远程登录、命令执行和文件传输等操作,有效防止了数据在传输过程中的被窃听、篡改等风险。本文详细介绍了在Ubuntu系统上安装和配置SSH服务的步骤,包括系统包的更新、SSH服务的安装、服务的启动与状态检查、设置服务开机自启动以及允许SSH通过防火墙等关键操作
2025年09月08日
2 阅读
0 评论
0 点赞
2025-09-08
STM32驱动DS18B20温度传感器例程(OLED显示)
效果展示:DS18B20温度显示效果 第一部分:DS18B20温度模块驱动代码头文件(DS18B20.h)#ifndef __DS18B20_H__ #define __DS18B20_H__ #include"stm32f10x.h" #define SkipROM 0xCC //跳过ROM #define SearchROM 0xF0 //搜索ROM #define ReadROM 0x33 //读ROM #define MatchROM 0x55 //匹配ROM #define AlarmROM 0xEC //告警ROM #define StartConvert 0x44 //开始温度转换,在温度转换期间总线上输出0,转换结束后输出1 #define ReadScratchpad 0xBE //读暂存器的9个字节 #define WriteScratchpad 0x4E //写暂存器的温度告警TH和TL #define CopyScratchpad 0x48 //将暂存器的温度告警复制到EEPROM,在复制期间总线上输出0,复制完后输出1 #define RecallEEPROM 0xB8 //将EEPROM的温度告警复制到暂存器中,复制期间输出0,复制完成后输出1 #define ReadPower 0xB4 //读电源的供电方式:0为寄生电源供电;1为外部电源供电 void ds18b20_init(void); unsigned short ds18b20_read(void); #endif第二部分:DS18B20温度模块驱动代文件(DS18B20.c)#include "ds18b20.h" #define EnableINT() #define DisableINT() #define DS_PORT GPIOA #define DS_DQIO GPIO_Pin_1 #define DS_RCC_PORT RCC_APB2Periph_GPIOA #define DS_PRECISION 0x7f //精度配置寄存器 1f=9位; 3f=10位; 5f=11位; 7f=12位; #define DS_AlarmTH 0x64 #define DS_AlarmTL 0x8a #define DS_CONVERT_TICK 1000 #define ResetDQ() GPIO_ResetBits(DS_PORT,DS_DQIO) #define SetDQ() GPIO_SetBits(DS_PORT,DS_DQIO) #define GetDQ() GPIO_ReadInputDataBit(DS_PORT,DS_DQIO) static unsigned char TempX_TAB[16]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09}; void Delay_us(u32 Nus) { SysTick->LOAD=Nus*9; //时间加载 SysTick->CTRL|=0x01; //开始倒数 while(!(SysTick->CTRL&(1<<16))); //等待时间到达 SysTick->CTRL=0X00000000; //关闭计数器 SysTick->VAL=0X00000000; //清空计数器 } unsigned char ResetDS18B20(void) { unsigned char resport; SetDQ(); Delay_us(50); ResetDQ(); Delay_us(500); //500us (该时间的时间范围可以从480到960微秒) SetDQ(); Delay_us(40); //40us //resport = GetDQ(); while(GetDQ()); Delay_us(500); //500us SetDQ(); return resport; } void DS18B20WriteByte(unsigned char Dat) { unsigned char i; for(i=8;i>0;i--) { ResetDQ(); //在15u内送数到数据线上,DS18B20在15-60u读数 Delay_us(5); //5us if(Dat & 0x01) SetDQ(); else ResetDQ(); Delay_us(65); //65us SetDQ(); Delay_us(2); //连续两位间应大于1us Dat >>= 1; } } unsigned char DS18B20ReadByte(void) { unsigned char i,Dat; SetDQ(); Delay_us(5); for(i=8;i>0;i--) { Dat >>= 1; ResetDQ(); //从读时序开始到采样信号线必须在15u内,且采样尽量安排在15u的最后 Delay_us(5); //5us SetDQ(); Delay_us(5); //5us if(GetDQ()) Dat|=0x80; else Dat&=0x7f; Delay_us(65); //65us SetDQ(); } return Dat; } void ReadRom(unsigned char *Read_Addr) { unsigned char i; DS18B20WriteByte(ReadROM); for(i=8;i>0;i--) { *Read_Addr=DS18B20ReadByte(); Read_Addr++; } } void DS18B20Init(unsigned char Precision,unsigned char AlarmTH,unsigned char AlarmTL) { DisableINT(); ResetDS18B20(); DS18B20WriteByte(SkipROM); DS18B20WriteByte(WriteScratchpad); DS18B20WriteByte(AlarmTL); DS18B20WriteByte(AlarmTH); DS18B20WriteByte(Precision); ResetDS18B20(); DS18B20WriteByte(SkipROM); DS18B20WriteByte(CopyScratchpad); EnableINT(); while(!GetDQ()); //等待复制完成 /////////// } void DS18B20StartConvert(void) { DisableINT(); ResetDS18B20(); DS18B20WriteByte(SkipROM); DS18B20WriteByte(StartConvert); EnableINT(); } void DS18B20_Configuration(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(DS_RCC_PORT, ENABLE); GPIO_InitStructure.GPIO_Pin = DS_DQIO; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; //开漏输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //2M时钟速度 GPIO_Init(DS_PORT, &GPIO_InitStructure); } void ds18b20_init(void) { DS18B20_Configuration(); DS18B20Init(DS_PRECISION, DS_AlarmTH, DS_AlarmTL); DS18B20StartConvert(); } unsigned short ds18b20_read(void) { unsigned char TemperatureL,TemperatureH; unsigned int Temperature; DisableINT(); ResetDS18B20(); DS18B20WriteByte(SkipROM); DS18B20WriteByte(ReadScratchpad); TemperatureL=DS18B20ReadByte(); TemperatureH=DS18B20ReadByte(); ResetDS18B20(); EnableINT(); if(TemperatureH & 0x80) { TemperatureH=(~TemperatureH) | 0x08; TemperatureL=~TemperatureL+1; if(TemperatureL==0) TemperatureH+=1; } TemperatureH=(TemperatureH<<4)+((TemperatureL&0xf0)>>4); TemperatureL=TempX_TAB[TemperatureL&0x0f]; //bit0-bit7为小数位,bit8-bit14为整数位,bit15为正负位 Temperature=TemperatureH; Temperature=(Temperature<<8) | TemperatureL; DS18B20StartConvert(); return Temperature; //返回16位数据 bit0-bit7为小数位,bit8-bit14为整数位,bit15为正负位 }经过测试,通讯正常,温度读取正确。。 注意程序的读取函数,返回值的说明喔。 我之前没仔细分析,把返回值乘以0.0625....结果不对。后来发现,返回的值,已经是温度的16进制形式。假如 返回值为 0x1504 那么温度即 21.4。 0x15=16+5=21 0x04=4 21.4 ℃。程序调用方法:int main(void) { unsigned int value; ds18b20_init(); while(1) { value = ds18b20_read(); } } B站视频展示:https://www.bilibili.com/video/BV1nN41187n3/?vd_source=544771c3a0efd4ea1dba16527ea8cd52源码获取:公众号后台发送:STM32-DS18B20例程
2025年09月08日
3 阅读
0 评论
0 点赞
2025-09-08
STM32—Keil工程模板创建详细教程
1 建立工程文件夹,Keil中新建工程2 选择芯片型号3 工程文件夹里建立Start、Library、User文件夹,复制固件库里面的必要文件到工程文件夹固件库网盘:https://pan.baidu.com/s/1yr6qu0WujwCGcmYUyJU1kg?pwd=vqzz 提取码: vqzz 其作用分别是: (1)Start—用于管理MDK开发环境下与具体芯片相对应的启动代码及CM3管理CMSIS内核的驱动程序代码和配置时钟代码; (2)Library—用于管理STM32外设的相关驱动程序代码; (3)User—用于管理自行开发的程序代码;4 工程里对应建立Start、Library、User同名称的分组,然后将文件夹内的文件添加到工程分组里5 工程选项,C/C++,Include Paths内声明所有包含头文件的文件夹Include Paths:设置为编译过程中文件包含要查找的路径 (Include Paths),单击该选项右侧的按钮,即可设置要包含的路 径。注意:必须把工程模板涉及的所有文件所在的文件夹作为路径设 置进来。编6 工程选项,C/C++,Define内定义USE_STDPERIPH_DRIVER因: 则: 该宏定义符号表示要使用固件库,在固件库开发模式下,该符号必须设置;7 工程选项,Debug,下拉列表选择对应调试器,Settings,Flash Download里勾选Reset and Run即可
2025年09月08日
3 阅读
0 评论
0 点赞
1
2
3
...
5