简介
直播技术 :直播技术可以分为基于传统的RTMP协议和基于HTTP的HLS协议。RTMP协议延迟较低,适合实时性要求较高的场景,而HLS协议兼容性更好,适合各种终端设备。根据需求选择适合的技术。
搭建服务器环境 :选择一台性能较好的服务器,可以使用云服务器来搭建直播平台。根据直播技术的选择,配置相应的服务器环境,如安装Nginx、FFmpeg等工具。
视频采集与编码 :选择合适的视频采集设备,如摄像头、视频采集卡等,并使用合适的编码器将视频流进行编码,如H.264编码。
流媒体服务器搭建 :搭建流媒体服务器用于接收和分发视频流。可以使用开源的流媒体服务器软件,如Nginx-rtmp-module、FFmpeg等。
视频分发与播放 :选择合适的内容分发网络(CDN)服务商,将视频流分发到全球各地的用户。同时,选择合适的播放器进行视频播放,如HLS协议可以使用HLS.js、video.js等播放器。
直播平台功能开发 :根据需求开发直播平台的功能,如用户注册登录、直播间管理、礼物打赏、弹幕功能等。可以使用前端开发技术(如HTML、CSS、JavaScript)和后端开发技术(如PHP、Java、Python)进行开发。
安全性保障 :确保直播平台的安全性,如用户信息加密、防止恶意攻击、防止盗播等。可以使用网络安全产品和服务进行保障。
直播实时编码流
服务器
首先,你需要选择一台高性能的服务器来承载你的流媒体直播系统。服务器的配置应该能够满足你预计的用户量和带宽需求。
安装流媒体服务
流媒体服务器软件是构建直播系统的核心组件。常见的流媒体服务器软件包括Nginx-rtmp、Wowza Streaming Engine、Adobe Media Server等。根据你的需求选择一个适合的流媒体服务器软件,并按照其官方文档进行安装和配置。
服务与模块
Openresty下载
wget https://openresty.org/download/openresty-1.21.4.3.tar.gz
nginx-ts-module下载
git clone https://github.com/arut/nginx-ts-module.git
ffmpeg 下载安装
相关教程请看这里
动态编译安装
Openresty环境配置
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
FFmpeg推流
推流是将视频数据从采集设备(如摄像头)发送到流媒体服务器的过程。你可以使用专业的推流软件(如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
端口
公网 rtmp 测试地址
邓紫棋 多美丽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>
<htmllang="en">
<head>
<metacharset="UTF-8">
<title>开源技术小栈流媒体直播系统</title>
</head>
<body>
<h1>开源技术小栈 | 流媒体直播系统</h1>
<scriptsrc="http://cdn.dashjs.org/latest/dash.all.min.js"></script>
< style>
video {
width: 1024px;
height: 600px;
}
</ style>
<div>
<videodata-dashjs-playerautoplaysrc="http://127.0.0.1:8777/play/dash/sintel/index.mpd"controls></video>
</div>
</body>
</html>
播放效果
OBS 推流
如果不使用
ffmpeg
直接拉流到
http://127.0.0.1:8777/publish/sintel
服务的解决方案是什么?答案是:OBS
OBS Studio 是 Windows 系统端开源的推流软件,编码使用H264(X264)和AAC ,它一款非常好用的开源直播推流软件,为用户提供了视频、文本、图像等的捕获录制功能。基于GPU的高性能游戏流媒体游戏捕获。支持DirectShow的捕获设备(摄像头,采集卡,等),双线性或lanczos3重采样。当然选择它主要是开源,免费。
解决方案
nginx-rtmp-module下载
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证书加密传输、配置负载均衡等。