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

从安防摄像头到网页直播:手把手教你用FFmpeg把RTSP流转成HLS(m3u8),解决浏览器播放难题

从安防摄像头到网页直播FFmpeg实现RTSP转HLS全链路解决方案当我们需要将企业园区、仓库或门店的安防监控画面集成到内部管理系统时总会遇到一个技术瓶颈——现代浏览器无法直接播放摄像头输出的RTSP流。本文将彻底解决这个痛点通过FFmpeg构建完整的流媒体转换管道让传统监控设备无缝融入Web应用。1. 浏览器播放RTSP的技术困境与解决方案选型监控摄像头普遍采用的RTSP协议诞生于1998年其设计初衷是用于点对点的实时视频传输。这种基于RTP/UDP的传输方式在现代Web环境中面临三大障碍协议不支持HTML5的video标签仅支持HTTP-FLV、HLS、MPEG-DASH等基于HTTP的流媒体协议编码兼容性摄像头输出的H.264/H.265裸流缺少Web所需的容器封装如MP4的moov原子防火墙限制企业网络通常禁止UDP端口通行而RTSP默认使用UDP传输媒体数据目前主流的转协议方案有以下几种方案延迟兼容性实现复杂度适用场景RTSP→WebRTC0.5-2s需要适配浏览器高实时监控、视频会议RTSP→HTTP-FLV1-3s依赖Flash中已淘汰RTSP→HLS5-20s全平台支持低监控回看、直播RTSP→MPEG-DASH3-10s需要JS支持中自适应码率场景实践建议对于安防监控场景HLS因其极佳的兼容性和稳定性成为首选方案虽然存在6-10秒的固有延迟但对于大多数非实时性监控需求完全可以接受。2. FFmpeg转码核心命令解析以下是将RTSP流转为HLS的典型FFmpeg命令ffmpeg -i rtsp://admin:password192.168.1.64:554/Streaming/Channels/101 \ -c:v copy -c:a aac -ac 1 -ar 44100 \ -f hls -hls_time 4 -hls_list_size 6 -hls_flags delete_segments \ -hls_segment_filename stream_%03d.ts stream.m3u8关键参数说明-c:v copy视频流直接复制不重新编码-hls_time 4每个TS切片时长4秒-hls_list_size 6m3u8列表中保留6个切片delete_segments自动删除过期的TS文件针对不同场景的参数优化降低延迟模式-hls_time 1 -hls_list_size 3 -preset ultrafast -tune zerolatency高画质模式-crf 18 -profile:v high -level 4.1 -pix_fmt yuv420p多分辨率自适应-vf split3[s1][s2][s3]; \ [s1]scale1280:720[s1out]; \ [s2]scale854:480[s2out]; \ [s3]scale640:360[s3out] \ -map [s1out] -map [s2out] -map [s3out] \ -var_stream_map v:0,name:720p v:1,name:480p v:2,name:360p3. 生产环境部署方案3.1 基础架构设计[摄像头] → [FFmpeg转码服务器] → [Nginx分发] → [前端播放] ↓ [存储服务器]3.2 Nginx关键配置server { listen 80; server_name stream.example.com; location /hls { types { application/vnd.apple.mpegurl m3u8; video/mp2t ts; } root /var/www/stream; add_header Cache-Control no-cache; add_header Access-Control-Allow-Origin *; } }3.3 系统服务化配置创建systemd服务确保进程持续运行# /etc/systemd/system/rtsp2hls.service [Unit] DescriptionRTSP to HLS Converter Afternetwork.target [Service] Userstream Groupstream ExecStart/usr/local/bin/ffmpeg -i rtsp://cam1 -f hls /var/www/stream/out.m3u8 Restartalways RestartSec5 [Install] WantedBymulti-user.target4. 前端播放器集成方案4.1 video.js基础实现link hrefhttps://vjs.zencdn.net/7.20.3/video-js.css relstylesheet video idcam1 classvideo-js vjs-default-skin controls source srchttp://stream.example.com/hls/stream.m3u8 typeapplication/x-mpegURL /video script srchttps://vjs.zencdn.net/7.20.3/video.min.js/script script const player videojs(cam1, { autoplay: true, fluid: true, html5: { vhs: { overrideNative: true } } }); /script4.2 多摄像头管理界面class CameraManager { constructor(containerId) { this.players new Map(); this.container document.getElementById(containerId); } addCamera(name, url) { const playerId player-${Date.now()}; const playerHtml div classcamera-view video id${playerId} classvideo-js controls source src${url} typeapplication/x-mpegURL /video div classcamera-name${name}/div /div ; this.container.insertAdjacentHTML(beforeend, playerHtml); const player videojs(playerId, { autoplay: true, muted: true }); this.players.set(name, player); } }5. 性能优化与异常处理5.1 FFmpeg进程监控脚本#!/usr/bin/env python3 import subprocess import time import logging logging.basicConfig(filenamestream_monitor.log, levellogging.INFO) def check_stream(): try: result subprocess.run([ ffmpeg, -i, rtsp://cam1, -c:v, copy, -c:a, copy, -f, null, - ], stderrsubprocess.PIPE, timeout10) if Input/output error in result.stderr.decode(): logging.error(Stream connection lost) return False return True except Exception as e: logging.error(fCheck failed: {str(e)}) return False def restart_service(): subprocess.run([systemctl, restart, rtsp2hls]) if __name__ __main__: while True: if not check_stream(): restart_service() time.sleep(30) time.sleep(60)5.2 常见问题排查指南黑屏无画面检查RTSP地址有效性ffplay rtsp://cam1验证端口可达性telnet 192.168.1.64 554确认摄像头账号权限播放卡顿降低转码分辨率-vf scale1280:-1调整GOP长度-g 30开启TCP传输-rtsp_transport tcp音画不同步统一时间基准-use_wallclock_as_timestamps 1音频重采样-async 1 -af aresampleasync1000在实际部署中我们发现海康威视摄像头的RTSP地址格式存在多个变体这是最常用的几种路径模式主码流/Streaming/Channels/101 子码流/Streaming/Channels/102 自定义/cam/realmonitor?channel1subtype0

相关文章:

从安防摄像头到网页直播:手把手教你用FFmpeg把RTSP流转成HLS(m3u8),解决浏览器播放难题

从安防摄像头到网页直播:FFmpeg实现RTSP转HLS全链路解决方案 当我们需要将企业园区、仓库或门店的安防监控画面集成到内部管理系统时,总会遇到一个技术瓶颈——现代浏览器无法直接播放摄像头输出的RTSP流。本文将彻底解决这个痛点,通过FFmpeg…...

运维笔记:一次搞定金山V9终端安全在CentOS/RHEL 7上的客户端注册

企业级终端安全部署实战:金山V9在CentOS/RHEL 7的完整注册指南 当企业IT基础设施面临日益复杂的威胁环境时,终端安全系统的可靠部署成为防护体系的关键一环。金山终端安全系统V9作为国内主流的企业级防护解决方案,其Linux客户端的稳定运行直接…...

森利威尔SL7100B PWM及线性调光低压差降压恒流IC 外围简单无需电感 成本优势明显

SL7100B是一款集成了调光功能的线性降压LED恒流驱动器,专为简化LED照明应用设计而打造。该芯片以其低静态电流、宽输入电压范围以及高度集成的保护机制,在LED驱动领域脱颖而出。其独特之处在于,仅需外接一个电阻即可构成完整的LED恒流驱动电路…...

用STM32F103的CAN总线做个简易车载数据监控器(附完整代码)

基于STM32F103的汽车OBD数据监控器开发实战 在汽车电子开发领域,CAN总线作为车辆各ECU之间通信的神经系统,承载着发动机转速、车速、油温等关键数据的传输。本文将带您从零开始构建一个基于STM32F103的简易车载数据监控器,通过实际项目掌握CA…...

3D检测演进:从点云处理、体素编码到中心点表征的技术脉络

1. 3D目标检测的起点:PointNet如何颠覆传统 2017年CVPR上横空出世的PointNet,就像给点云处理领域扔下了一颗炸弹。当时我在做自动驾驶感知项目,第一次看到这个模型时简直惊为天人——它居然能直接吃进原始点云数据,完全跳过了传统…...

nnUNetv2保姆级安装配置指南:从零搭建医学影像分割环境(含环境变量避坑)

nnUNetv2医学影像分割环境搭建全攻略:从零配置到实战避坑指南 医学影像分析领域的研究者常被环境配置的"暗坑"绊住脚步。作为当前最先进的自动医学图像分割框架,nnUNetv2的安装过程看似简单,实则隐藏着诸多环境变量、路径配置和依赖…...

别再死记公式了!用Python手写一个反向传播,5分钟搞懂链式法则

用Python代码拆解反向传播:5分钟可视化链式法则 当我在第一次接触神经网络时,那些复杂的数学公式让我望而却步。直到有一天,我决定用Python代码亲手实现一个简单的反向传播过程,才真正理解了链式法则的精妙之处。本文将带你用不到…...

怎样高效压缩视频图片:3步掌握CompressO跨平台压缩神器

怎样高效压缩视频图片:3步掌握CompressO跨平台压缩神器 【免费下载链接】compressO Convert any video/image into a tiny size. 100% free & open-source. Available for Mac, Windows & Linux. 项目地址: https://gitcode.com/gh_mirrors/co/compressO …...

VSCode+LLM开发环境搭建,从零到生产级推理仅需8分钟(附可验证配置模板)

更多请点击: https://intelliparadigm.com 第一章:VSCodeLLM开发环境搭建,从零到生产级推理仅需8分钟(附可验证配置模板) 必备工具链安装 确保已安装 VSCode 1.85、Python 3.11 和 Node.js 18。执行以下命令一次性完…...

部署国标GB28181视频平台EasyGBS,授权方式怎么选?激活文件、加密狗、加密机,一次讲清楚

很多朋友第一次部署EasyGBS平台时,都会卡在同一个问题上:“我到底该选哪种授权方式?”激活文件、加密狗、加密机,听起来都不复杂,但各有各的用法和适用场景。选错了,后面换服务器、迁系统时会很麻烦。今天咱…...

C程序员必读的7个内存越界陷阱:2026年LLVM 18+Clang静态分析实测避坑指南

更多请点击: https://intelliparadigm.com 第一章:C程序员必读的7个内存越界陷阱:2026年LLVM 18Clang静态分析实测避坑指南 在 LLVM 18 发布后,Clang 的 -fsanitizeaddress(ASan)与 -Warray-bounds、-Wstr…...

从“拼时间”到“拼结构”:AI 时代的职业跃迁新范式

一、范式迁移:职业竞争的底层规则正在改写如果说过去的职场竞争,本质是“谁更努力、谁更有经验”,那么 AI 时代的核心问题已经变成:你的能力是否处在一个可以被放大的结构中。技术的进步,并没有简单地减少岗位&#xf…...

ABC选择思维:为什么中间价位总是最好卖

有一个卖净水器的商家,产品售价1680元。但每次顾客都要犹豫很久,因为不清楚这个价位是贵还是便宜。 后来,商家做了这样一个调整:引进一款低端净水器售价980元,一款高端净水器售价2980元。三款产品同时销售。 结果神奇的…...

生信小白也能搞定!用miRcode批量预测lncRNA-miRNA互作关系(附保姆级操作截图)

零代码实战:miRcode批量预测lncRNA-miRNA互作全流程指南 刚接触ceRNA网络分析的研究者常面临一个现实问题:手头有几十个候选lncRNA,如何快速找出它们可能结合的miRNA?传统方法需要逐个基因查询,耗时且容易出错。本文将…...

nrf54l15使用I2C驱动SHT40温湿度传感器

Nordic芯片对于驱动传感器这方面我感觉对新手来说是很友好的,因为它的底层驱动集成了市面上 常见的大部分的传感器的驱动,比如说你如果使用I2C接口的传感器,使用 软件I2C的话,根本不用去拼凑时序,六段基本时序还有传感…...

AI安全进阶面试:高阶安全技术面试题与解析

AI安全进阶面试:高阶安全技术面试题与解析📝 本章学习目标:本章聚焦职业发展,帮助读者规划AI安全合规治理的学习与职业路径。通过本章学习,你将全面掌握"AI安全进阶面试:高阶安全技术面试题与解析&quo…...

20260423给万象奥科的开发板HD-RK3576-PI适配瑞芯微原厂的Buildroot时使用weston-screenshooter截屏

Y:\git_RK3576_Linux6.1\buildroot\package\weston\S49weston Y:\git_RK3576_Linux6.1\buildroot\output\rockchip_rk3576\target\etc\init.d\S49weston20260423给万象奥科的开发板HD-RK3576-PI适配瑞芯微原厂的Buildroot时使用weston-screenshooter截屏 2026/4/23 9:081、RK35…...

在openEuler 23.03上,我为什么放弃了直接编辑ifcfg文件,改用nmcli命令配置网卡?

在openEuler 23.03上,我为什么放弃了直接编辑ifcfg文件,改用nmcli命令配置网卡? 凌晨三点,服务器监控突然告警,我的SSH连接毫无征兆地断开。通过控制台查看,发现网络接口莫名其妙地失去了IP配置。这次事故…...

机器学习工程师的纳达尔式训练法

1. 项目概述:像纳达尔一样精通机器学习在职业网坛,拉斐尔纳达尔以"红土之王"著称——他通过独特的旋转球技术、惊人的体能储备和战术智慧,在法网创下14次夺冠的传奇纪录。这种将天赋、训练和策略完美结合的特质,正是机器…...

LayerDivider:如何实现智能图像分层与PSD文件自动生成?

LayerDivider:如何实现智能图像分层与PSD文件自动生成? 【免费下载链接】layerdivider A tool to divide a single illustration into a layered structure. 项目地址: https://gitcode.com/gh_mirrors/la/layerdivider LayerDivider是一款基于色…...

手把手教你用CLIP模型构建一个简易的“以图搜图”或“文搜图”系统(基于transformers 4.25.0)

从零构建基于CLIP的跨模态搜索引擎:图像与文本的语义桥梁 在数字内容爆炸式增长的时代,如何在海量图片库中快速找到符合语义需求的图像?传统的关键词搜索已经无法满足我们对图像理解的深层需求。想象一下,当你手头有十万张产品图片…...

产品经理必看:如何利用GB/T 4754-2017行业分类,做好你的用户画像与市场分析?

产品经理实战指南:用GB/T 4754-2017构建精准商业决策框架 当产品经理面对一个模糊的B端需求时,最常遇到的困境是:"我们的目标客户到底属于哪个细分行业?"去年我负责一款企业级SaaS产品重构时,销售团队反馈&q…...

手把手教你部署GEO推广系统,在线扫码授权配置,手机PC双端自适应

温馨提示:文末有资源获取方式为什么要关注GEO?AI搜索正在改变用户获取信息的方式。过去大家习惯在传统搜索引擎里找答案,现在越来越多的人直接问AI。如果你的品牌和产品无法出现在AI的答案里,就等于失去了一块新流量阵地。源码获取…...

虚拟电厂平台化运营与生态构建实战指南

1. 虚拟电厂平台化运营的核心逻辑 虚拟电厂本质上是一个能源互联网时代的"资源调度平台",就像滴滴整合私家车、美团整合餐厅一样,它把分散的储能电站、充电桩、工商业用电设备等资源聚合起来,形成一个可调控的"巨型电厂"…...

免费的可以读取.iso文件的软件——虚拟光驱-下载

免费的可以读取.iso文件的软件——虚拟光驱-下载 通过网盘分享的文件:虚拟光驱.exe 链接: https://pan.baidu.com/s/1YOaktl6D38LMVxu_MvyiDA?pwdpgnn 提取码: pgnn...

微电网多层控制架构设计的发展趋势

在“双碳”战略深入推进与新型电力系统加速建设的背景下,高比例分布式新能源(光伏、风电等)规模化渗透,交直流混合微网、多能互补微网、集群微网成为主流形态,微电网的运行场景日益复杂,对控制架构的稳定性…...

CVAT在线数据标注

CVAT支持矩形、多边形、视频插值的数据标注平台,支持团队协作、复杂项目、视频标注等,可导出YOLO格式 一、平台地址 https://app.cvat.ai/ 必须先登录在进入系统 二、创建项目 主要用于管理多个共享同一套标签体系的任务 三、创建任务与配置 任务是实…...

告别‘Unable to find suitable Visual Studio toolchain’:一份给Flutter开发者的Windows环境自查清单

Flutter开发者的Windows环境终极自查指南:从工具链报错到健壮环境搭建 当你在Windows上运行flutter run -d windows时,那个刺眼的红色错误信息"Unable to find suitable Visual Studio toolchain"是否让你感到沮丧?这不仅仅是安装…...

抖音无水印视频下载神器:5分钟掌握批量下载的完整解决方案

抖音无水印视频下载神器:5分钟掌握批量下载的完整解决方案 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback s…...

用Logitech G Hub写Lua脚本:手把手教你为PUBG M416调一个专属压枪宏

用Logitech G Hub打造专属压枪宏:从Lua脚本到PUBG实战优化 罗技G系列外设的G Hub软件为游戏玩家打开了一扇自定义操作的大门。想象一下,当你手中的M416在连续射击时,弹道像被无形的手稳稳控制着——这不是外挂,而是通过G Hub的Lua…...