最近琢磨着搞个录播,就是希望能把一些直播或者会议啥的录下来,还得是高清的,方便以后回顾。一开始看看市面上那些成品的高清录播服务器,好家伙,一个个价格都挺吓人,什么惠普、天影视通,看着都挺专业,功能也多,但咱这小打小闹的,预算实在有限,买那玩意儿有点奢侈。
后来我就寻思,能不能自己动手,找个免费或者成本极低的方案?毕竟现在电脑性能都过剩,说不定能利用手头现有的资源搞定。于是我就开始在网上瞎转悠,看各种帖子、论坛,找找看有没有大神分享过类似的路子。
找一圈,发现思路还真不少。有人说用专业的流媒体软件,像Wowza、Adobe Media Server这些,功能强大是强大,但授权费也不便宜,pass。又看到有人提到用Nginx配合一个叫RTMP的模块,好像能搭个流媒体服务器,而且Nginx本身是免费开源的,这一下就来兴趣。
我的折腾过程
说干就干,我先把一台闲置好久的旧电脑翻出来。配置不高,但感觉跑个Nginx应该绰绰有余。系统我选个轻量级的Linux发行版,装起来比较快,资源占用也少。
第一步是安装Nginx。 这个过程还算顺利,网上教程一大把,跟着敲命令就行。关键是第二步,编译安装那个RTMP模块。
- 下载Nginx源码。
- 下载RTMP模块的源码。
- 重新编译Nginx,把RTMP模块加进去。这个过程出点小插曲,缺几个依赖库,折腾半天,查资料、装依赖,总算编译通过。
然后就是配置Nginx。 这是最核心的部分,也是最费脑子的。主要就是修改Nginx的配置文件 `*`。
我得在配置文件里加一段 `rtmp` 的配置块,大概是这样:
rtmp {

server {
listen 1935; # RTMP默认端口
chunk_size 4096;
application live { # 定义一个叫live的应用
live on; # 开启直播模式
record all; # 开启录制功能,录制所有进来的流

record_path /var/rec; # 设置录像文件存放路径,得先创建好这个目录,给Nginx写入权限
record_unique on; # 文件名加上时间戳,避免重名覆盖
这个配置过程真是踩不少坑。 一开始端口号搞错,连不上。后来是 `record_path` 那个目录权限没设置对,Nginx没法往里写文件,自然录制不。还有就是 `record unique on;` 这个参数一开始没加,导致第二次推流直接把第一次的录像给覆盖,气得够呛。来来回回改配置、重启Nginx服务 (`systemctl restart nginx` 或者 `nginx -s reload`),试不下十几次,总算把这块基础的搞定。
服务器这边准备接下来就是推流端。我用的是大家都很熟悉的OBS Studio,也是免费的。
在OBS里设置很简单:
- 打开OBS的“设置”。
- 选择“推流”。
- 服务选“自定义”。
- 服务器地址填 `rtmp://那台旧电脑的IP地址:1935/live` (这里的 `live` 就是我在Nginx配置里定义的 `application` 名字)。
- 串流密钥随便填一个,比如 `test`。
设置好之后,在OBS里点击“开始推流”,然后我就赶紧跑到那台旧电脑旁边,进到 `/var/rec` 目录下一看,果然多出来一个 `.flv` 文件!文件名还带着日期和时间,说明 `record_unique on;` 起作用。
结果和感受
我试着用播放器打开那个录下来的 `.flv` 文件,画面和声音都挺清晰,效果确实是高清的,达到我的预期。只要推流端(比如OBS)设置的分辨率和码率够高,录下来的文件质量就没问题。
这回折腾还是挺成功的。 没花一分钱软件授权费,就用一台旧电脑和免费的Nginx、OBS,搭起一个能用的高清录播服务器。虽然跟那些几万块的专业设备比起来,稳定性、易用性、并发能力肯定差远,比如我得手动去管理录像文件,担心硬盘空间够不够,服务器也得一直开着,但对于个人或者小团队内部偶尔录个会议、直播啥的,完全够用。
感觉这种自己动手丰衣足食的经历挺有意思的,虽然过程有点小波折,但搞定就特别有成就感。关键是,免费!真香!