个人流媒体服务搭建
创始人
2024-05-19 19:42:02
0

简介

主要是个人的流媒体服务器的创建的方式分享

Centos7自建基于HLS的私人直播服务器

相关资源下载

链接:https://pan.baidu.com/s/1zhWFpFRy2v0_lyjA0-AfAg 
提取码:yyds 


入门操作

实现方法基于nginx和nginx的一个rtmp模块。因为epel源和nginx官方源里面安装的nginx是没有nginx-rtmp-module的,所以只能编译安装

先新建一个www用户和组专门用来跑Nginx:

groupadd www
useradd www -g www -s /sbin/nologin

安装EPEL/开发工具包/以及编译Nginx所需的依赖:

yum -y install epel-release
yum -y groupinstall "Development Tools"
yum -y install wget openssl-devel pcre-devel zlib-devel geoip-devel gd-devel

进入到opt目录下载nginx-rtmp-module模块:

如果下载不了,可以访问我的百度网盘

链接:https://pan.baidu.com/s/1qwzHVbHqG_0SBcEb1UaeZg 
提取码:yyds 

cd /opt
git clone https://github.com/arut/nginx-rtmp-module.git

同时下载解压Nginx并进入到Nginx的源码目录:

wget http://nginx.org/download/nginx-1.15.8.tar.gz
tar -xzvf nginx-1.15.8.tar.gz
cd nginx-1.15.8

虽然我们本次使用Nginx只是需要用到它的RTMP功能,但既然都编译了,就编译个全面一点的Nginx吧,所以这里我还是把Nginx常用的一些功能和模块都加上:

由于我网盘里面是windows压缩的,会有文件换行的问题

yum install dos2unix
dos2unix /opt/nginx-rtmp-module/config

同理,如果你的文件是在 linux 编写需要到 windows 环境使用:

unix2dos file
./configure --user=www --group=www --prefix=/usr/local/nginx --add-module=/opt/nginx-rtmp-module --with-http_ssl_module --with-http_v2_module --with-stream --with-stream_ssl_module --with-http_gzip_static_module --with-http_gunzip_module --with-http_flv_module --with-http_mp4_module --with-http_image_filter_module --with-http_geoip_module --with-http_sub_module --with-http_stub_status_module --with-http_realip_module --with-http_addition_module

如果配置没有错误,那么就可以编译并完成安装了:

make
make install

然后新建一个systemd服务:

vi /etc/systemd/system/nginx.service

写入:

[Unit]
Description=nginx - high performance web server
Documentation=http://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID[Install]
WantedBy=multi-user.target

现在创建hls视频文件存放的目录:

mkdir -p /opt/stream/hls

接着创建一个conf.d目录,专门用来存放Nginx的站点配置文件:

mkdir -p /usr/local/nginx/conf/conf.d

很多人配置的时候都喜欢直接在Nginx的主配置文件内去写http段,这是极其愚蠢的做法。为了可以让你的Nginx配置变的一目了然,更好的分类,正确的做法应该是在主配置文件内引用其他http段的配置,所以现在编辑Nginx的主配置文件:

vi /usr/local/nginx/conf/nginx.conf

引用我们之前创建的conf.d目录,所以在Nginx的主配置文件加入:

include /usr/local/nginx/conf/conf.d/*.conf;

位置如图:

接着我们还是在这个配置文件内加入RTMP的设置,基本上每个参数我都写了注释,你可以一目了然的知道这些配置都做了啥:

vi /usr/local/nginx/conf/nginx.conf
rtmp {server {#记得放开下端口安全组listen 1935;chunk_size 4000;# POST请求改为GET用于鉴权验证notify_method get;application show {# 开启实时live on;# 鉴权验证on_publish http://你的服务器公网IP/auth;# 加密视频wait_key on;# 开启HLShls on;# ts文件存放路径hls_path /opt/stream/hls;# 每个ts包含5秒视频hls_fragment 5;# hls可回放时间hls_playlist_length 60;# 连续模式,可解决libx264编码出现的缓冲问题hls_continuous on;# 创建子目录存放ts文件hls_nested on;# 直播结束清理所有视频文件hls_cleanup on;}}
}

例子 

rtmp {server {listen 1935;chunk_size 4000;notify_method get;application show {live on;#由于后面写的server我配置的是8080on_publish http://101.132.163.124:8080/auth;wait_key on;hls on;hls_path /opt/stream/hls;hls_fragment 5;hls_playlist_length 60;hls_continuous on;hls_nested on;hls_cleanup on;}}
}

上面这段配置加到events段的下面,如图所示:

 接着我们新建一个站点配置文件

vi /usr/local/nginx/conf/conf.d/stream.conf

写入:

server {listen       80;server_name  你的服务器公网IP;charset utf-8;location / {root   /usr/local/nginx/html;index  index.html index.htm;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   /usr/local/nginx/html;}# 简单的鉴权验证location /auth {if ($arg_psk = '设置你的直播密码') {return 201;}return 404;}# HTTP播放地址location /live {types {application/vnd.apple.mpegurl m3u8;video/mp2t ts;}alias /opt/stream/hls;   expires -1;add_header Cache-Control no-cache;}# 统计location /stat {rtmp_stat all;rtmp_stat_stylesheet stat.xsl;}location /stat.xsl {root /opt/nginx-rtmp-module/;}
}

例子 

server {#由于我的ip没有备案不能用80就用的8080listen       8080;server_name  101.132.163.124;charset utf-8;location / {root   /usr/local/nginx/html;index  index.html index.htm;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   /usr/local/nginx/html;}# 简单的鉴权验证location /auth {if ($arg_psk = '123') {return 201;}return 404;}# HTTP播放地址location /live {types {application/vnd.apple.mpegurl m3u8;video/mp2t ts;}alias /opt/stream/hls;   expires -1;add_header Cache-Control no-cache;}# 统计location /stat {rtmp_stat all;rtmp_stat_stylesheet stat.xsl;}location /stat.xsl {root /opt/nginx-rtmp-module/;}
}

Nginx的配置到这里就完成了,我们可以使用下面的命令检查一下配置是否正常:

(如果这里检查出文件格式出现问题,也就是./configure这一步出现了编译问题,那么用dos2unix /opt/nginx-rtmp-module/config转换成linux格式就行了,然后从./configure这一步重新编译安装直到成功为止)

/usr/local/nginx/sbin/nginx -t

 有错误就按照错误的提示去排查,没错误就可以用systemd启动Nginx了:

systemctl start nginx
systemctl enable nginx

下面我用Dplayer简单弄个html页面用来测试是否可以正常直播:

cd /usr/local/nginx/html/

下载hls.min.js:

链接:https://pan.baidu.com/s/136gyDHi4YagCg6_S-l3GaQ 
提取码:yyds 

wget https://github.com/video-dev/hls.js/releases/download/v0.12.2/hls.min.js

编辑这个目录内的index.html:

vi index.html

把里面的内容替换成:




例子




电脑推流使用OBS进行如下设置:

 

然后点击开始直播 

 这里还是具体说一下这个OBS的推流设置,首先URL就是:

rtmp://你的服务器公网IP:1935/show/

而下面这个流的名称,比如我是:

imlala?psk=123

这其中imlala是可以自定义的,你可以把这个理解成一个直播间名字(房间号)而后面的233133xxx就是你的直播密码,这个密码是在/usr/local/nginx/conf/conf.d/stream.conf内可以设置的。其次如果你修改了你的直接间名字(房间号)那么上面那个示例html中的播放地址也需要做修改:

http://你的服务器公网IP/live/imlala/index.m3u8

这样就可以实现一个私人的直播间,如果你不做这种鉴权验证的话,那只要有人知道你的rtmp地址就可以用你的服务器做直播,这样会造成滥用。 

最后通过浏览器访问服务器IP测试是否能够正常播放(不好意思我的电脑里面只有这种视频):

http://101.132.163.124:8080/

在上面的配置中,我还配置了一个简易的统计功能,访问:

http://你的服务器公网IP/stat

可以浏览到当前你的直播间有多少观众以及你直播的时长:

 参考地址https://lala.im/4799.html

一个极易部署的流媒体服务:Node-Media-Server

现在有很多自建流媒体服务器的方法,最常用的应该是Nginx,但如果是自己想体验一下的话,这个Node-Media-Server比Nginx配置起来要简单很多,而且还有一个简单的WEB面板可以方便的查看一些信息。

这里使用Docker的方式部署,首先安装Docker

curl -sSL https://get.docker.com/ | sh
systemctl start docker
systemctl enable docker

一条命令即可完成部署:

docker run -d -p 1935:1935 -p 8000:8000 --restart=always --name nms illuspas/node-media-server

然后我们需要进到容器内,做一些更改:

docker exec -it nms /bin/sh

编辑:

vi /usr/src/app/bin/app.js

找到下面这一段,更改默认的管理员密码,然后把publish改为true,最后把secret也改一下,例如:

  auth: {                api: true,api_user: 'admin',api_pass: 'admin',play: false,publish: true,      secret: 'x1x2x3x4x5lalaim'                                        } 

这样做的话是让推流有一个鉴权验证,不做验证的话任何人知道你这个服务器的地址都能用你这台机器推流,这样会造成滥用。

改完之后退出容器并重启:

exit
docker restart nms

如果上面的重启报错,回显类似什么iptables/DNAT啥的,就直接重启Docker服务吧:

systemctl restart docker

因为我们给推流做了一个鉴权验证,这个时候我们需要计算一下推流的地址,首先要定义一个推流地址过期的时间,这里我假设地址在2023年的7月1日过期,那么将时间戳换算成unix的类型

date -d "2023-07-01 00:00:00" +%s

执行上述的命令后,得到的unix时间戳是:

1688140800

然后我们把时间戳和之前在app.js内配置的secret进行一次md5加密,格式如下:

echo -n "/live/test-1688140800-x1x2x3x4x5lalaim" | md5sum

注:其中的test是可以自己随便更改的,你这里可以理解为这是一个直播间的名字。

执行完上面的命令得到的md5值是:

c52940001cbe732cce6b4ca08980438f

那么最终我们的推流地址就是:

rtmp://101.132.163.124:1935/live/test?sign=1688140800-c52940001cbe732cce6b4ca08980438f

服务端这边就部署完成了,下面简单说一下怎么用FFMPEG/OBS推流。

FFMPEG推流

安装FFMPEG,这边一切从简,直接用FFMPEG的静态包:

wget https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-amd64-static.tar.xz
tar -xJf ffmpeg-release-amd64-static.tar.xz
cd ffmpeg-4.1.3-amd64-static
cp ffmpeg /usr/bin && cp ffprobe /usr/bin && cp qt-faststart /usr/bin

然后随便找个视频文件测试一下:

ffmpeg -re -i 230OREC-315.mp4 \
-c:v libx264 -preset superfast -tune zerolatency \
-c:a aac -ar 44100 -f flv rtmp://vpsip/live/test?sign=1561939200-2e99dbb982cd4bb0edd485a2d249745c

类似如下图的回显就说明推流成功:

OBS推流

OBS推流设置:

现在我们可以访问一下WEB面板看看推流是否正常:

http://101.132.163.124:8000/admin/

下面是使用obs推流的效果 

这个媒体服务器支持很多种格式,像什么FLV/HLS/DASH都是支持的,相应的拉流地址:

http://vpsip:8000/live/STREAM_NAME.flv
ws://vpsip:8000/live/STREAM_NAME.flv
http://vpsip:8000/live/STREAM_NAME/index.m3u8
http://vpsip:8000/live/STREAM_NAME/index.mpd

链接:https://pan.baidu.com/s/1gWD9De9LY2kqYFkJdcnr8g 
提取码:yyds 
--来自百度网盘超级会员V5的分享 


  自己弄个简单的html页面或者套个Dplayer都是可以的,这里就不多BB了。。这样一个私人直播服务器就搭建完成了。。

参考文献:

https://github.com/illuspas/Node-Media-Server/blob/master/README_CN.md

https://lala.im/5879.html

相关内容

热门资讯

介绍一件物品作文 介绍一件物品作文(通用30篇)  在日复一日的学习、工作或生活中,许多人都写过作文吧,作文要求篇章结...
月亮上的秘密_小学想象作文 月亮上的秘密_小学想象作文  在日常的学习、工作、生活中,说到作文,大家肯定都不陌生吧,借助作文人们...
被自己感动初中作文 被自己感动初中作文7篇  在平平淡淡的学习、工作、生活中,大家最不陌生的就是作文了吧,作文是由文字组...
新闻写作基础 新闻写作基础新闻写作基础1  一、结合工作撰写新闻稿件的意义  首先,我认为结合工作撰写新闻稿件,对...
泡黄豆观察日记 泡黄豆观察日记【荐】  一天的时间即将结束了,相信大家都有不少体会吧,因此我们要写好日记了。那么你真...
给孩子睡觉前讲的童话小故事 给孩子睡觉前讲的童话小故事【四篇】给孩子睡觉前讲的童话小故事【四篇】1  大家都知道,猪没有正规的名...
孔夫子的弟子歇后语   以下是小编给大家整理的孔夫子的弟子的歇后语的内容,欢迎大家查看。  孔夫子的弟子——闲(贤)人 ...
桃花瓣比喻句 桃花瓣比喻句集锦  在生活、工作和学习中,大家都看到过许多经典的句子吧,句子是语言运用的基本单位,它...
形容雨下的大的比喻句 形容雨下的大的比喻句范文  雨下得很大,仿佛一条条鞭子似的抽打着人间万物。下面是小编为你带来的形容雨...
初三作文训练 指导 初三作文训练 指导初三作文训练 指导初三作文指导与训练一 、2004年泰州市中考佳作选评1、 [试题...
文学常识选择题十六题 文学常识选择题十六题  1、先秦时代,教育内容以“六艺”为主,下列不属于“六艺”的是(D)。  A、...
“时事评论”类作文导写示例 “时事评论”类作文导写示例  在日常学习、工作和生活中,大家都写过作文,肯定对各类作文都很熟悉吧,作...
二十四节气的谚语 二十四节气的谚语(精选665句)  在平日的学习、工作和生活里,大家都有令自己印象深刻的谚语吧,谚语...
教师节送给老师的对联 教师节送给老师的对联  在日常学习、工作和生活中,大家都接触过很多优秀的`对联吧,对联是一种对偶文学...
碑文的对联 碑文的对联  在日常生活或是工作学习中,大家都接触过对联吧,对联源于中国文字语音的对称性,出现应该在...
千里送鹅毛的歇后语是什么   下面是小编给大家整理的千里送鹅毛的歇后语,欢迎大家查看。  千里送鹅毛——礼轻情意重;礼薄情意重...
家庭和睦人兴财旺的七字春联 家庭和睦人兴财旺的七字春联  春联有喜庆吉祥之意,所以“旧”春联需等到来年贴春联的时候才摘除并贴上新...
学篮球的作文450字 学篮球的作文450字  今天我去奶奶家,刚好碰上哥哥在炫耀他打篮球的技巧。这一幕深深地吸引了我,于是...
元宵节的灯谜及答案 关于2023元宵节的灯谜及答案  元宵节快要到了,这个时候猜灯谜是最好玩的,小编整理了一些关于元宵节...
虎年春联 虎年春联集锦  在平平淡淡的学习、工作、生活中,大家都接触过春联吧,春联的`张贴,要符合传统的规矩,...