首先,你需要选择一台高性能的服务器来承载你的流媒体直播系统。服务器的配置应该能够满足你预计的用户量和带宽需求。
流媒体服务器软件是构建直播系统的核心组件。常见的流媒体服务器软件包括Nginx-rtmp、Wowza Streaming Engine、Adobe Media Server等。根据你的需求选择一个适合的流媒体服务器软件,并按照其官方文档进行安装和配置。
wget https://openresty.org/download/openresty-1.21.4.3.tar.gz
git clone https://github.com/arut/nginx-ts-module.git
相关教程请看这里【如何在PHP中使用FFmpeg进行音视频操作】
apt-get install libreadline-dev libncurses5-dev libpcre3-dev \
libssl-dev perl make build-essential
./configure --prefix=/opt/openresty --with-luajit --without-http_redis2_module \
--with-http_iconv_module --add-dynamic-module=/root/nginx-ts-module
...
make -j4
...
sudo make install
nginx.conf
# vim /opt/openresty/nginx/conf/nginx.conf
error_log logs/error.log;
pid logs/nginx.pid;
load_module "/opt/openresty/nginx/modules/ngx_http_ts_module.so"; # 加载模块
events {
}
http {
server {
listen 8777;
location / {
root html;
}
location /publish/ {
ts;
ts_hls path=/var/media/hls segment=10s;
ts_dash path=/var/media/dash segment=10s;
client_max_body_size 0;
}
location /play/ {
add_header Cache-Control no-cache;
add_header 'Access-Control-Allow-Origin' '*' always;
add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
add_header 'Access-Control-Allow-Headers' 'Range';
types {
application/x-mpegURL m3u8;
application/dash+xml mpd;
video/MP2T ts;
video/mp4 mp4;
}
alias /var/media/;
}
}
}
流媒体存放文件夹建立
cd /var & mkdir media
cd media & mkdir hls & mkdir dash
推流是将视频数据从采集设备(如摄像头)发送到流媒体服务器的过程。你可以使用专业的推流软件(如OBS Studio、FFmpeg等)或者编写自己的推流脚本来实现推流功能。
ffmpeg -re -i rtmp://liteavapp.qcloud.com/live/liteavdemoplayerstreamid -bsf:v h264_mp4toannexb \
-c copy -f mpegts http://127.0.0.1:8777/publish/sintel
我这里由于端口被占用,使用的是:
8777
端口
邓紫棋 多美丽mv (非常流畅秒开级别,强烈推荐)
地址:rtmp://liteavapp.qcloud.com/live/liteavdemoplayerstreamid (可用)
伊拉克 Al Sharqiya 电视台 (有卡顿延迟)
地址:rtmp://ns8.indexforce.com/home/mystream (可用)
韩国GOOD TV (不推荐太卡,很慢)
地址:rtmp://mobliestream.c3tv.com:554/live/goodtv.sdp (可用)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>开源技术小栈流媒体直播系统</title>
</head>
<body>
<h1>开源技术小栈 | 流媒体直播系统</h1>
<script src="http://cdn.dashjs.org/latest/dash.all.min.js"></script>
<style>
video {
width: 1024px;
height: 600px;
}
</style>
<div>
<video data-dashjs-player autoplay src="http://127.0.0.1:8777/play/dash/sintel/index.mpd" controls></video>
</div>
</body>
</html>
如果不使用
ffmpeg
直接拉流到http://127.0.0.1:8777/publish/sintel
服务的解决方案是什么?答案是:OBS
OBS Studio 是 Windows 系统端开源的推流软件,编码使用H264(X264)和AAC ,它一款非常好用的开源直播推流软件,为用户提供了视频、文本、图像等的捕获录制功能。基于GPU的高性能游戏流媒体游戏捕获。支持DirectShow的捕获设备(摄像头,采集卡,等),双线性或lanczos3重采样。当然选择它主要是开源,免费。
git clone https://github.com/arut/nginx-rtmp-module.git
安装nginx-ts-module
模块一样动态编译安装既可以,最后别忘记了的在配置文件load nginx-rtmp-module.so
文件
# vim /opt/openresty/nginx/conf/nginx.conf
error_log logs/error.log;
pid logs/nginx.pid;
load_module "/opt/openresty/nginx/modules/ngx_rtmp_module.so"; # 加载rtmp模块
...
OBS => nginx-rtmp => nginx-ts
通过以上我们可以不直接使用ffmpeg 去推流了,而是在Windows端口可以通过OBS很简单的去推流了
为了保证直播系统的安全性和稳定性,你可以采取一些措施,如设置访问权限、使用SSL证书加密传输、配置负载均衡等。