当前位置: 首页 > article >正文

Ubuntu下基于simple-rtsp-server构建轻量级实时视频流媒体服务

1. 为什么选择simple-rtsp-server搭建流媒体服务最近在给公司搭建内部监控系统时我对比了市面上七八种RTSP服务器方案最终选择了simple-rtsp-server。这个用纯C语言编写的轻量级服务器编译后二进制文件只有几百KB但性能却出乎意料的好——在我的测试中单台Ubuntu 20.04虚拟机就能稳定支持50路1080P视频流同时传输。相比其他方案它有三大杀手锏首先是零配置开箱即用把视频文件扔进指定目录就能自动生成RTSP地址其次是跨平台特性同一套代码在Windows和Linux上都能完美运行最重要的是极低资源占用在我那台老旧的Intel NUC迷你主机上CPU占用率长期保持在3%以下。对于需要快速搭建演示环境或者产品原型验证的开发者来说这简直就是救命稻草。记得第一次使用时我把测试用的mp4文件放进mp4path目录五分钟后就已经能用VLC观看实时流了。这种傻瓜式的操作体验让隔壁组刚毕业的实习生都能独立完成部署。下面我就把踩过无数坑后总结的最佳实践分享给大家。2. 环境准备与依赖安装2.1 系统环境检查在开始之前建议先运行lsb_release -a确认Ubuntu版本。我在18.04和22.04上都做过完整测试但最稳定的还是20.04 LTS版本。内存建议至少2GB硬盘空间需要预留5GB用于编译安装FFmpeg。遇到过最坑的问题是旧系统残留的FFmpeg版本冲突。建议先用这组命令彻底清理sudo apt purge ffmpeg* libav* sudo apt autoremove2.2 依赖库全家桶安装simple-rtsp-server依赖FFmpeg处理视频编解码这里推荐使用4.x版本。以下是我整理好的依赖安装清单复制粘贴就能用# 基础编译工具链 sudo apt update sudo apt install -y autoconf automake build-essential pkg-config # 视频处理核心依赖 sudo apt install -y libass-dev libfreetype6-dev libx264-dev libx265-dev \ libvdpau-dev libva-dev libtheora-dev libtool # 音频处理全家桶 sudo apt install -y libfdk-aac-dev libmp3lame-dev libopus-dev libvorbis-dev # 汇编加速组件 sudo apt install -y yasm nasm特别提醒如果遇到libfdk-aac报错需要手动编译0.1.6版本。我专门写了自动安装脚本wget https://downloads.sourceforge.net/project/opencore-amr/fdk-aac/fdk-aac-0.1.6.tar.gz tar xzf fdk-aac-0.1.6.tar.gz cd fdk-aac-0.1.6 ./configure --prefix/usr/local --enable-shared make -j$(nproc) sudo make install3. FFmpeg编译安装详解3.1 源码编译最佳实践下载FFmpeg 4.0.5源码包后推荐使用这个经过优化的配置参数./configure --prefix/usr/local --enable-gpl --enable-nonfree \ --enable-libx264 --enable-libx265 --enable-libfdk-aac \ --enable-libmp3lame --enable-libopus --enable-shared \ --extra-cflags-I/usr/local/include \ --extra-ldflags-L/usr/local/lib关键参数说明--enable-shared生成动态链接库避免后续程序运行时找不到符号extra-cflags/ldflags确保编译器能找到手动安装的fdk-aac-j$(nproc)调用所有CPU核心加速编译编译完成后必须执行这步让系统找到新库sudo ldconfig3.2 验证安装效果用这个组合命令检查关键功能是否正常ffmpeg -version | grep configuration \ ffmpeg -codecs | grep -E libx264|libx265|fdk_aac正常应该看到包含--enable-libx264 --enable-libfdk-aac的输出。如果遇到error while loading shared libraries错误通常是LD_LIBRARY_PATH没设置正确可以临时用export LD_LIBRARY_PATH/usr/local/lib:$LD_LIBRARY_PATH4. 编译部署simple-rtsp-server4.1 源码获取与编译技巧从GitHub克隆项目时建议加上--depth1参数加快下载git clone --depth1 https://github.com/BreakingY/simple-rtsp-server.git编译时有个小技巧在build目录下先执行ccmake ..可以交互式查看所有编译选项。比如修改RTSP_FILE_SERVER可以关闭内置文件回放功能调整RTSP_SERVER_PORT改变默认8554端口设置RTSP_AUTH_ENABLE控制鉴权开关我常用的编译命令组合mkdir build cd build cmake -DCMAKE_BUILD_TYPERelease .. make -j$(nproc) VERBOSE14.2 服务器运行与测试启动服务时这些参数最实用./rtsp_server_file \ 1 \ # 启用鉴权 1 \ # 循环播放 /path/to/videos # 自定义视频目录测试时发现个有趣的现象同时用VLC和FFmpeg拉流时虽然两个客户端连接时间相差10秒但视频画面却是同步的。这是因为服务器做了智能的流同步处理就像真实摄像头一样。推荐用这个命令测试TCP模式传输ffmpeg -rtsp_transport tcp -i rtsp://admin:123456localhost:8554/demo.mp4 \ -vcodec copy -acodec copy -f null -5. 高级配置与性能调优5.1 安全加固方案默认鉴权用的是Base64编码的明文密码我改进的方法是修改rtsp_server.c中的handle_authenticate函数加入SHA256哈希校验配置文件中存储加盐后的密码哈希值对于企业级应用还可以用iptables限制访问IP范围配置Lets Encrypt证书启用RTSPS定期轮换鉴权密码5.2 性能监控脚本我写了个实用的监控脚本rtsp_monitor.sh#!/bin/bash while true; do ts$(date %Y-%m-%d %H:%M:%S) conn$(netstat -an | grep 8554 | wc -l) cpu$(ps -C rtsp_server_file -o %cpu | tail -n 1) echo [$ts] 连接数:$conn CPU使用:$cpu% sleep 5 done5.3 自定义流源开发通过修改rtsp_session.c我成功接入了三种流源海康威视摄像头的SDK回调数据FFmpeg解码后的RGB帧OpenCV处理后的AI分析结果关键代码结构// 创建自定义会话 rtsp_session_t* session create_rtsp_session(); // 添加视频轨道 rtsp_add_video_track(session, RTSP_CODEC_H264, // 编码类型 video_frame_cb // 帧数据回调 ); // 添加音频轨道 rtsp_add_audio_track(session, RTSP_CODEC_AAC, audio_frame_cb );6. 常见问题排坑指南Q1客户端连接立即断开检查防火墙sudo ufw allow 8554/tcp确认视频编码格式是H.264/H.265运行strace -f ./rtsp_server_file查看系统调用Q2播放时花屏卡顿尝试TCP传输模式ffmpeg -rtsp_transport tcp降低视频分辨率到720p测试查看服务器CPU是否过载Q3多路流同步问题在rtsp_server.c中调整MAX_SESSION_SYNC_MS参数确保所有视频的帧率一致使用-re参数保持原始时间戳最近在Jetson Xavier上测试时发现开启硬件解码后能支持150路720P视频流转发。这个性能对于边缘计算场景简直完美下一步我准备把深度学习的分析结果也通过RTSP推流整合进来。

相关文章:

Ubuntu下基于simple-rtsp-server构建轻量级实时视频流媒体服务

1. 为什么选择simple-rtsp-server搭建流媒体服务 最近在给公司搭建内部监控系统时,我对比了市面上七八种RTSP服务器方案,最终选择了simple-rtsp-server。这个用纯C语言编写的轻量级服务器,编译后二进制文件只有几百KB,但性能却出乎…...

终极go2rtc流媒体解决方案:3分钟搭建多协议摄像头管理系统

终极go2rtc流媒体解决方案:3分钟搭建多协议摄像头管理系统 【免费下载链接】go2rtc Ultimate camera streaming application with support RTSP, RTMP, HTTP-FLV, WebRTC, MSE, HLS, MP4, MJPEG, HomeKit, FFmpeg, etc. 项目地址: https://gitcode.com/GitHub_Tre…...

Windows系统信息导出全攻略:从msinfo32生成报告到用PowerShell定制你的专属硬件清单

Windows系统信息自动化采集与定制化报告实战指南 对于IT资产管理专员和技术团队而言,准确获取终端设备的硬件配置信息是软件许可合规、资产盘点和故障排查的基础工作。传统的手动记录方式效率低下且容易出错,而Windows内置的msinfo32工具生成的报告又过于…...

保姆级教程:在Ubuntu 22.04物理机上,从开启SSH到配置IPv6防火墙的完整流程

Ubuntu 22.04物理机从SSH配置到IPv6防火墙的完整安全指南 当你拿到一台全新的Ubuntu物理机时,如何安全地配置远程访问并启用IPv6连接?本文将带你从零开始,一步步完成从系统初始化到防火墙配置的全过程。无论你是搭建家庭服务器、开发测试环境…...

Python 3.14 JIT编译器实测对比:启动耗时降63%、内存开销压减41%,你的服务还在用默认配置?

第一章:Python 3.14 JIT编译器实测性能跃迁全景Python 3.14 引入的实验性 JIT 编译器(基于 Pyjion 与 CPython 运行时深度集成)首次在标准发行版中启用可配置的即时编译通道,显著改变了传统解释执行的性能边界。我们通过统一基准套…...

Kubernetes集群的搭建与DevOps实践(下)- 部署实践篇

需求清单: 100张数据表要迁移(还要支持后续动态新增) 双链路同步:MySQL到MySQL、MongoDB到PostgreSQL 不能写死配置,要能灵活扩展 工期不到1个月 技术约束: 源环境(塔外)和目标环境&…...

基于DQN深度强化学习电力-热力-算力三维协同的数据中心智能调度优化研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

Xilinx FPGA FIFO IP核复位机制深度解析与实战调试

1. Xilinx FPGA FIFO IP核复位机制基础解析 第一次接触Xilinx FPGA的FIFO IP核时,很多人都会在复位环节栽跟头。我刚开始用Vivado生成FIFO IP核时,就遇到过复位信号处理不当导致数据丢失的问题。FIFO(First In First Out)作为数据…...

AD5660 16位DAC驱动库深度解析:嵌入式SPI接口实践

1. AD5660 数字模拟转换器库深度解析:面向嵌入式工程师的16位高精度DAC驱动实践1.1 器件本质与工程定位AD5660 是 Analog Devices 推出的单通道、16位电压输出型数模转换器(DAC),采用紧凑的 8 引脚 MSOP 封装,专为对精…...

EF Core与SQLite实战:从零构建轻量级数据库应用

1. 为什么选择EF Core与SQLite这对黄金组合 如果你正在开发一个需要本地数据存储的移动应用或桌面小工具,SQLite绝对是你的首选数据库。这个只有几百KB的小家伙,不需要任何服务器配置,直接读写单个文件就能完成所有数据库操作。而EF Core作为…...

STM32F103 SPI+DMA驱动WS2812B的时序实现原理

1. WS2812B_STM32_Libmaple 库深度解析:基于 SPI DMA 的高性能 NeoPixel 驱动实现WS2812B(常被称作 NeoPixel)是当前嵌入式系统中最主流的单线协议可寻址 RGB LED。其核心挑战在于严格的时序要求:T0H(逻辑 0 的高电平时…...

如何一键获取国家中小学智慧教育平台所有电子课本?这个智能下载工具给你答案

如何一键获取国家中小学智慧教育平台所有电子课本?这个智能下载工具给你答案 【免费下载链接】tchMaterial-parser 国家中小学智慧教育平台 电子课本下载工具 项目地址: https://gitcode.com/GitHub_Trending/tc/tchMaterial-parser 还在为繁琐的教材下载流程…...

Gin 框架中的规范响应格式设计与实现

为什么需要统一的响应格式?首先,让我们思考一个问题:为什么要统一API响应格式?前后端协作效率:一致的响应格式让前端开发者能以统一的方式处理服务端响应错误处理简化:标准化的错误码和消息便于统一处理各种…...

如何突破Windows权限限制?NSudo全方位权限管理方案

如何突破Windows权限限制?NSudo全方位权限管理方案 【免费下载链接】NSudo [Deprecated, work in progress alternative: https://github.com/M2Team/NanaRun] Series of System Administration Tools 项目地址: https://gitcode.com/gh_mirrors/ns/NSudo 在…...

避坑指南:用conda一键搞定gymnasium[box2d]安装(附常见错误解决方案)

Conda环境下的gymnasium[box2d]高效安装与疑难排解全攻略 强化学习实践者常会遇到一个令人头疼的问题:在Windows系统上安装gymnasium[box2d]时,总是遭遇各种编译错误和依赖问题。本文将带你彻底解决这个痛点,通过conda环境管理工具&#xff0…...

海尔智能家居无缝接入HomeAssistant:打破品牌壁垒的终极指南

海尔智能家居无缝接入HomeAssistant:打破品牌壁垒的终极指南 【免费下载链接】haier 项目地址: https://gitcode.com/gh_mirrors/ha/haier 还在为家中海尔设备无法与其他智能设备联动而烦恼吗?想象一下,炎热的夏天回家前就能远程开启…...

颈肩腰腿痛家庭护理,长春颈肩腰腿痛医院教你居家调理

对于轻度颈肩腰腿痛或慢性疼痛缓解期,家庭护理是重要的辅助治疗方式,无需专业设备,居家就能开展,核心是通过休息、热敷、按摩、姿势调整,缓解肌肉紧张和疼痛,预防病情加重。长春颈肩腰腿痛医院家庭护理建议…...

Landsat 9 数据预处理第一步:在ENVI里正确加载影像的保姆级指南(含MTL文件处理)

Landsat 9数据预处理全流程:从ENVI加载到分析就绪的完整指南 当第一次拿到Landsat 9数据时,很多遥感新手会卡在最基础的数据加载环节。这就像拿到一把高级门锁的钥匙,却因为不知道正确的插入角度而无法开启后续分析的大门。本文将带你系统掌…...

PlotJuggler保姆级安装指南:从Ubuntu到Windows,手把手搞定ROS插件与数据可视化

PlotJuggler跨平台安装与配置全攻略:从Ubuntu到Windows的ROS数据可视化实战 在机器人开发和自动驾驶领域,数据可视化是调试和分析的核心环节。PlotJuggler作为一款专业级时间序列数据可视化工具,凭借其强大的数据处理能力和直观的交互界面&am…...

基于51单片机与HX711的智能电子秤Proteus仿真与计价系统实现

1. 项目背景与核心功能 最近在整理实验室材料时,发现很多同学对电子秤项目的仿真实现存在困惑。这个基于51单片机和HX711的智能电子秤系统,不仅能够完成基础称重,还能实现商品计价、LCD显示等完整超市电子秤功能。我在实际调试中发现&#xf…...

UniApp跨平台跳转外部链接全攻略:H5、App与小程序实战解析

1. UniApp跳转外部链接的核心逻辑 跨平台开发最头疼的就是"一套代码适配多个平台",而外部链接跳转恰恰是平台差异最明显的功能之一。我做过十几个UniApp项目,发现90%的开发者第一次遇到这个问题都会懵——为什么在H5能用的代码,打包…...

隐私计算新选择:OpenClaw+nanobot本地化数据处理

隐私计算新选择:OpenClawnanobot本地化数据处理 1. 为什么我们需要本地化数据处理方案 作为一名长期关注数据隐私的技术从业者,我最近在探索如何在不牺牲便利性的前提下,确保敏感数据处理的绝对安全。金融行业的朋友经常向我抱怨&#xff1…...

NeoPixel Painter:嵌入式HSV动画的固定点实现

1. NeoPixel Painter 库概述NeoPixel Painter 是一个面向嵌入式 LED 动画开发的轻量级 Arduino 库,专为简化 WS2812B(NeoPixel)LED 灯带的动态效果编程而设计。它并非对 Adafruit_NeoPixel 库的简单封装,而是构建在其之上的状态驱…...

电子工程师的技术洁癖与嵌入式开发实践

1. 电子工程师的职业习惯与技术洁癖 1.1 工程师的强迫症表现 在电子工程领域,许多从业者都表现出典型的"技术洁癖"特征。这种职业习惯主要体现在以下几个方面: 元器件布局强迫症 :PCB板上电阻、电容等元件的焊盘必须对齐&#x…...

【同态加密实战】从Paillier到BFV:算法原理与编码艺术深度解析

1. 同态加密:数据隐私保护的魔法钥匙 想象一下,你有一把能锁住数据的魔法钥匙——即使数据被锁在箱子里,别人依然可以对箱子里的数据进行计算,而无需打开箱子看到原始内容。这就是同态加密的神奇之处。作为密码学领域的"圣杯…...

Zotero插件生态:从翻译到效率提升的进阶配置指南

1. Zotero插件生态全景:从翻译到全流程优化 第一次接触Zotero时,我和大多数人一样,只是把它当作一个简单的文献管理工具。直到某天深夜赶论文,连续手动整理了47篇参考文献后,手指酸痛的我突然意识到:这绝对…...

AI早报 | 2026.03.29(周日)

🤖 AI 早报 | 2026.03.29(周日) 采集时间:2026-03-29 13:25 (Asia/Shanghai) 🛡️ 安全/治理 1️⃣ Anthropic 安全漏洞泄露下一代模型 Mythos Anthropic 公司遭遇数据安全事件,未受保护的数据存储中泄露了…...

SerialTransfer:Arduino轻量级高可靠串行通信协议栈

1. SerialTransfer 库概述SerialTransfer 是一款专为 Arduino 平台设计的轻量级、高可靠性串行通信协议栈,其核心目标是解决嵌入式系统中跨设备数据交换的通用性、鲁棒性与工程可维护性问题。它并非简单的Serial.write()封装,而是一套完整的面向帧&#…...

Simulink模型到AUTOSAR RTE的‘最后一公里’:手把手教你处理ARXML接口冲突并自动配置ISOLAR

Simulink模型到AUTOSAR RTE的‘最后一公里’:手把手教你处理ARXML接口冲突并自动配置ISOLAR 在汽车电子软件开发中,Simulink与AUTOSAR工具链的集成已经成为行业标配。但当你满怀期待地将Simulink模型导出为ARXML文件,准备导入ISOLAR进行后续开…...

被裁员后,我用这个 AI 助手每天只工作 2 小时|OpenClaw 实战

😭 被裁员后,我用这个 AI 助手每天只工作 2 小时“真正的自由,不是想做什么就做什么,而是不想做什么就可以不做什么”01 一个普通打工人的至暗时刻 上个月,公司裁员 30%。 我所在的部门,5 个人走了 3 个。 …...