别再浪费硬盘了用MediaMTX打造自动录制HLS点播系统还能钩子转码你的监控录像是不是还在“傻录”你是不是遇到过这些情况公司100个摄像头7x24小时录制结果90%的画面都是空荡荡的走廊想找昨天下午3点的回放结果发现视频文件是单个几十个G根本打不开直播流录下来了但还得人工去服务器拷文件、手动转成MP4才能发给同事在这个视频监控和直播盛行的时代“如何优雅地录制和回放”成了所有人的痛点。传统的“一刀切”录制模式不仅浪费存储管理起来更是灾难。今天我们就来聊一聊如何用轻量级神器MediaMTX搭建一套自动分段、智能清理、甚至能触发转码的HLS点播系统彻底告别无效存储️➡️一、为什么是MediaMTX它不只是个“路由器” 如果你还停留在用Nginx搭配RTMP模块的老路上那你就 out 了。MediaMTX原名rtsp-simple-server是一款零依赖、高性能的实时媒体服务器 。它最牛的地方在于**“胶水”能力**——它能将不同协议RTSP、RTMP、WebRTC的流无缝转换但今天我们不谈转发我们深挖它的“硬盘功夫”录制与回放。二、告别“大文件”噩梦自动分段录制实战 ⏱️如果你直接将一个直播流录成一个文件一旦服务器断电或程序崩溃这个文件大概率就损坏了无法播放。MediaMTX通过“分段录制”完美解决了这个问题。它会把持续的流切成一个个时长均匀的TS文件或fMP4这正是HLSHTTP Live Streaming的核心思想 。️ 配置步骤小白也能抄作业找到你的mediamtx.yml配置文件在pathDefaults或具体的paths下添加如下魔法参数pathDefaults:# 开启录制功能record:yes# 录制格式用mpegts还是fmp4选ts兼容性最好recordFormat:mpegts# 重点分段时长这里设置每30分钟切一个文件recordSegmentDuration:30m# 分段内部的碎片时长影响回放延迟安防场景建议1srecordPartDuration:1s# 文件保存路径支持动态变量下面会细讲recordPath:./recordings/%path/%Y-%m-%d/%H-%M-%S# 自动清理保留7天超过自动删除recordDeleteAfter:168h配置解读recordSegmentDuration: 30m这是分段核心。流会不断生成像15-30-45.ts、16-00-15.ts这样30分钟的小文件。即使系统崩溃只会丢失当前这30分钟的数据实际由recordPartDuration决定前面的文件完好无损 。recordDeleteAfter: 168h这是硬盘救星。服务器会自动计算文件年龄7天前的老文件自动消失你再也不用写crontab删垃圾了 。三、让Nginx替你打工搭建HLS点播服务器 文件录好了存在硬盘里怎么让老板在手机上点开就看这时候需要Nginx上场当“服务员”。 文件结构规划首先我们要让MediaMTX录出来的文件结构直接能被Nginx的HLS模块读取。推荐上面的recordPath配置./recordings/%path/%Y-%m-%d/%H-%M-%S它会生成类似./recordings/camera1/2025-10-07/14-30-00.ts这样的路径简直是强迫症的福音 Nginx配置关键安装Nginx记得编译时加上--with-http_flv_module和--with-http_ssl_module然后在配置文件中添加HLS的locationlocation /hls { # 指定存放录制文件的根目录也就是mediamtx的recordings目录 alias /path/to/mediamtx/recordings/; # 添加跨域头方便嵌入各种页面 add_header Access-Control-Allow-Origin *; # 缓存策略直播点播不要缓存 add_header Cache-Control no-cache; # 关键让nginx识别ts和m3u8文件 types { application/vnd.apple.mpegurl m3u8; video/mp2t ts; } }现在玩法就多了回放某一天的录像直接播放http://your-ip/hls/camera1/2025-10-07/index.m3u8前提是你需要有个m3u8索引文件下面会讲。极致延迟配合MediaMTX自带的HLS服务器默认8888端口你甚至可以直接播放低延迟HLSLL-HLS延迟控制在1-3秒 。四、高级玩法录制完成“钩子”触发视频处理 这是资深玩家和小白的分水岭。录完的视频可能体积太大或者你想把重要的片段自动备份到阿里云OSSMediaMTX提供了强大的runOnRecordSegmentComplete钩子 。 场景视频录制完成即自动压缩转码录制的原始TS文件可能包含多音轨或码率过高。我们可以在录完一个分段后立马调用FFmpeg进行压缩。pathDefaults:# 其他录制参数...runOnRecordSegmentComplete:/usr/local/bin/post_record.sh %path %segmentPath然后编写/usr/local/bin/post_record.sh脚本#!/bin/bash# 接收MediaMTX传递的参数path_name$1segment_full_path$2# 定义输出文件路径把ts转成mp4output_path${segment_full_path%.*}.mp4# 调用ffmpeg进行重新编码压缩体积ffmpeg-i$segment_full_path-c:vlibx264-crf23-c:aaac-y$output_path# 可选上传到云存储# rclone copy $output_path myoss:/bucket-name/$path_name/# 记录日志echo处理完成:$output_path/var/log/mediamtx_post.log这意味什么你等于拥有了一条自动化视频流水线。流进来 → 分段存储 → 自动压缩 → 云端备份。全自动五、避坑指南 最佳实践 在折腾过程中这几个坑你一定会遇到提前预防路径权限问题No.1杀手MediaMTX默认不会自动创建多级目录。如果你的recordPath里包含了%Y-%m-%dMediaMTX需要自己新建这些日期文件夹。解决方案在mediamtx.yml中设置recordAutoCreateDirs: yes或者确保运行用户对父目录有写权限 。时间戳变量迷惑行为%Y-%m-%d用的是系统时间。注意如果你的服务器时区没设对录出来的文件命名可能和实际时间差8小时。记得在启动命令或系统层面设置好TZAsia/Shanghai。分段时长与检索的平衡recordSegmentDuration设得太短比如1分钟文件数量爆炸管理压力大设得太长比如6小时回放定位到具体某分钟会很慢。建议监控场景30分钟直播回放10分钟。总结通过MediaMTX Nginx Shell脚本这套组合拳我们不仅搭建了一套自动分段的录制系统还让它具备了工业级的文件管理能力和自动化处理能力。再也不怕文件损坏分段存储损失可控。再也不怕硬盘爆炸自动清理智能保鲜。再也不用手动处理钩子触发万物自动。这套方案不仅适用于海康大华的安防摄像头改造也适用于个人游戏直播的录像备份甚至教育行业的课程录制。如果你还在用手动方式处理视频流不妨从今天开始试试MediaMTX让你的服务器学会自己“思考”和“整理”你有在用MediaMTX吗在录制过程中遇到最头疼的问题是什么欢迎在评论区留言交流
别再浪费硬盘了!用MediaMTX打造自动录制+HLS点播系统,还能钩子转码!
别再浪费硬盘了用MediaMTX打造自动录制HLS点播系统还能钩子转码你的监控录像是不是还在“傻录”你是不是遇到过这些情况公司100个摄像头7x24小时录制结果90%的画面都是空荡荡的走廊想找昨天下午3点的回放结果发现视频文件是单个几十个G根本打不开直播流录下来了但还得人工去服务器拷文件、手动转成MP4才能发给同事在这个视频监控和直播盛行的时代“如何优雅地录制和回放”成了所有人的痛点。传统的“一刀切”录制模式不仅浪费存储管理起来更是灾难。今天我们就来聊一聊如何用轻量级神器MediaMTX搭建一套自动分段、智能清理、甚至能触发转码的HLS点播系统彻底告别无效存储️➡️一、为什么是MediaMTX它不只是个“路由器” 如果你还停留在用Nginx搭配RTMP模块的老路上那你就 out 了。MediaMTX原名rtsp-simple-server是一款零依赖、高性能的实时媒体服务器 。它最牛的地方在于**“胶水”能力**——它能将不同协议RTSP、RTMP、WebRTC的流无缝转换但今天我们不谈转发我们深挖它的“硬盘功夫”录制与回放。二、告别“大文件”噩梦自动分段录制实战 ⏱️如果你直接将一个直播流录成一个文件一旦服务器断电或程序崩溃这个文件大概率就损坏了无法播放。MediaMTX通过“分段录制”完美解决了这个问题。它会把持续的流切成一个个时长均匀的TS文件或fMP4这正是HLSHTTP Live Streaming的核心思想 。️ 配置步骤小白也能抄作业找到你的mediamtx.yml配置文件在pathDefaults或具体的paths下添加如下魔法参数pathDefaults:# 开启录制功能record:yes# 录制格式用mpegts还是fmp4选ts兼容性最好recordFormat:mpegts# 重点分段时长这里设置每30分钟切一个文件recordSegmentDuration:30m# 分段内部的碎片时长影响回放延迟安防场景建议1srecordPartDuration:1s# 文件保存路径支持动态变量下面会细讲recordPath:./recordings/%path/%Y-%m-%d/%H-%M-%S# 自动清理保留7天超过自动删除recordDeleteAfter:168h配置解读recordSegmentDuration: 30m这是分段核心。流会不断生成像15-30-45.ts、16-00-15.ts这样30分钟的小文件。即使系统崩溃只会丢失当前这30分钟的数据实际由recordPartDuration决定前面的文件完好无损 。recordDeleteAfter: 168h这是硬盘救星。服务器会自动计算文件年龄7天前的老文件自动消失你再也不用写crontab删垃圾了 。三、让Nginx替你打工搭建HLS点播服务器 文件录好了存在硬盘里怎么让老板在手机上点开就看这时候需要Nginx上场当“服务员”。 文件结构规划首先我们要让MediaMTX录出来的文件结构直接能被Nginx的HLS模块读取。推荐上面的recordPath配置./recordings/%path/%Y-%m-%d/%H-%M-%S它会生成类似./recordings/camera1/2025-10-07/14-30-00.ts这样的路径简直是强迫症的福音 Nginx配置关键安装Nginx记得编译时加上--with-http_flv_module和--with-http_ssl_module然后在配置文件中添加HLS的locationlocation /hls { # 指定存放录制文件的根目录也就是mediamtx的recordings目录 alias /path/to/mediamtx/recordings/; # 添加跨域头方便嵌入各种页面 add_header Access-Control-Allow-Origin *; # 缓存策略直播点播不要缓存 add_header Cache-Control no-cache; # 关键让nginx识别ts和m3u8文件 types { application/vnd.apple.mpegurl m3u8; video/mp2t ts; } }现在玩法就多了回放某一天的录像直接播放http://your-ip/hls/camera1/2025-10-07/index.m3u8前提是你需要有个m3u8索引文件下面会讲。极致延迟配合MediaMTX自带的HLS服务器默认8888端口你甚至可以直接播放低延迟HLSLL-HLS延迟控制在1-3秒 。四、高级玩法录制完成“钩子”触发视频处理 这是资深玩家和小白的分水岭。录完的视频可能体积太大或者你想把重要的片段自动备份到阿里云OSSMediaMTX提供了强大的runOnRecordSegmentComplete钩子 。 场景视频录制完成即自动压缩转码录制的原始TS文件可能包含多音轨或码率过高。我们可以在录完一个分段后立马调用FFmpeg进行压缩。pathDefaults:# 其他录制参数...runOnRecordSegmentComplete:/usr/local/bin/post_record.sh %path %segmentPath然后编写/usr/local/bin/post_record.sh脚本#!/bin/bash# 接收MediaMTX传递的参数path_name$1segment_full_path$2# 定义输出文件路径把ts转成mp4output_path${segment_full_path%.*}.mp4# 调用ffmpeg进行重新编码压缩体积ffmpeg-i$segment_full_path-c:vlibx264-crf23-c:aaac-y$output_path# 可选上传到云存储# rclone copy $output_path myoss:/bucket-name/$path_name/# 记录日志echo处理完成:$output_path/var/log/mediamtx_post.log这意味什么你等于拥有了一条自动化视频流水线。流进来 → 分段存储 → 自动压缩 → 云端备份。全自动五、避坑指南 最佳实践 在折腾过程中这几个坑你一定会遇到提前预防路径权限问题No.1杀手MediaMTX默认不会自动创建多级目录。如果你的recordPath里包含了%Y-%m-%dMediaMTX需要自己新建这些日期文件夹。解决方案在mediamtx.yml中设置recordAutoCreateDirs: yes或者确保运行用户对父目录有写权限 。时间戳变量迷惑行为%Y-%m-%d用的是系统时间。注意如果你的服务器时区没设对录出来的文件命名可能和实际时间差8小时。记得在启动命令或系统层面设置好TZAsia/Shanghai。分段时长与检索的平衡recordSegmentDuration设得太短比如1分钟文件数量爆炸管理压力大设得太长比如6小时回放定位到具体某分钟会很慢。建议监控场景30分钟直播回放10分钟。总结通过MediaMTX Nginx Shell脚本这套组合拳我们不仅搭建了一套自动分段的录制系统还让它具备了工业级的文件管理能力和自动化处理能力。再也不怕文件损坏分段存储损失可控。再也不怕硬盘爆炸自动清理智能保鲜。再也不用手动处理钩子触发万物自动。这套方案不仅适用于海康大华的安防摄像头改造也适用于个人游戏直播的录像备份甚至教育行业的课程录制。如果你还在用手动方式处理视频流不妨从今天开始试试MediaMTX让你的服务器学会自己“思考”和“整理”你有在用MediaMTX吗在录制过程中遇到最头疼的问题是什么欢迎在评论区留言交流