视频直播方案(nginx-rtmp-module ffmpeg) - Andrew's BlogAndrew's Blog
- -视频直播方案(nginx-rtmp-module ffmpeg). 本文将介绍如何从零搭建流媒体服务器作为直播方案. 一般视频录像板或者网络摄像头仅支持RTSP服务,或自己的私有协议. 因为RTSP是基于TCP的协议一般浏览器是无法支持创建Socket与其他服务相连前端无法播放. 私有协议仅能在IE浏览器下调用OCX插件播放视频,兼容性太差.
RTMP
与 HLS
两种协议。flash
与现代 H5
浏览器播放。RTSP
服务的摄像头。环境:
- OS: Ubuntu 16.04 xenial
- Kernel: x86_64 Linux 4.13.0-37-generic
RTMP
或 HLS
协议RTMP
与 HLS
的流媒体服务器RTSP
码流转换成 RTMP
码流推送到 RTMP服务器
上
流程如图所示。
##具体操作
// 创建文件夹,方便整理
mkdir rtmp-server;
cd rtmp-server;
// 下载nginx-rtmp-module模块
git clone https://github.com/arut/nginx-rtmp-module.git
// 下载nginx 1.8.1源码包
wget http://nginx.org/download/nginx-1.8.1.tar.gz
// 进入nginx源码包
cd nginx-1.8.1
// configure报错时请查阅解决
./configure --prefix=/usr/local/nginx --add-module=../nginx-rtmp-module --with-http_ssl_module
// 编译 && 安装 需要管理员权限
make && make install
注意:此为源码安装Nginx。附录有PPA安装模块链接。
Nginx编译时遇到的问题可参阅:
在默认配置 /usr/local/nginx/conf/nginx.conf
下添加
# RTMP 推流设置
rtmp {
server {
listen 1935;
chunk_size 4000;
application hls {
live on;
hls on;
hls_path /usr/local/nginx/html/hls;
hls_fragment 2s; //配置视频分片时长
hls_playlist_length 10s;
}
}
}
# HLS视频服务设置,如不需要HLS协议可以去掉
http {
server {
listen 8080;
location /hls {
# 允许跨域
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Credentials' 'true';
types {
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
root html;
expires -1;
}
}
}
注意:hls_path地址要保证可写,保留80服务。
需要录播或更多设置可参阅:
启动nginx
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
现在RTMP服务器已经搭建完成。开启Nginx服务请参阅:
vim /usr/local/nginx/html/index.html
<html>
<head>
<title>Hls.js demo - basic usage</title>
</head>
<body>
<script src="https://cdn.bootcss.com/hls.js/0.8.9/hls.min.js"></script>
<center>
<h1>Demo</h1>
<video height="600" id="video" controls></video>
</center>
<script>
if(Hls.isSupported()) {
var video = document.getElementById('video');
var hls = new Hls();
hls.loadSource('http://localhost:8080/hls/channel4.m3u8');
hls.attachMedia(video);
hls.on(Hls.Events.MANIFEST_PARSED,function() {
video.play();
});
}
</script>
</body>
</html>
注意IP替换
sudo add-apt-repository ppa:jonathonf/ffmpeg-3
sudo apt-get update
sudo apt-get install ffmpeg
此时已经同时安装上了FFplay
我们将使用FFmpeg将rtsp码流转发至rtmp服务器上
RTSP码流地址为: rtsp://192.168.100.183:554/user=admin&password=admin&channel=4&stream=0.sdp
RTMP服务器地址为: rtmp://localhost:1935/hls/channel4
ffmpeg -i "rtsp://192.168.100.183:554/user=admin&password=admin&channel=4&stream=0.sdp" -c copy -f flv "rtmp://localhost:1935/hls/channel4"
项目使用的视频录像板为雄迈具体RTSP协议请参阅:
使用ffplay进行测试
ffplay "rtmp://localhost:1935/hls/channel4"
在使用FFmpeg转码流之前最好也用ffplay测试一下
若延时严重可加参数-fflags nobuffer
打开 http://localhost
进行测试
Edge浏览器