Nginx本身是一个非常出色的HTTP服务器,FFMPEG是非常好的音视频解决方案,ffmpeg与nginx-rtmp组合在一起即可以搭建一个功能相对比较完善的流媒体服务器。
nginx-rtmp服务安装
docker pull tiangolo/nginx-rtmp
docker run --restart=always --privileged=true -p 1935:1935 --name nginx-rtmp -d tiangolo/nginx-rtmp
docker run --restart=always --privileged=true -p 1935:1935 -p 18081:80 --name nginx-rtmp -d tiangolo/nginx-rtmp
端口1935接收流媒体数据推入,自行挂载/etc/nginx/nginx.conf配置文件,默认开启live直播。
参考:Nginx-Rtmp官方Docker
参考:nginx-rtmp-module官方wike
FFmpeg服务安装
docker pull jrottenberg/ffmpeg
docker run --privileged=true --restart=always -it --name app_ffmpeg -p 18080:8080 --entrypoint='bash' -d jrottenberg/ffmpeg
参考:FFmpeg官方Docker
启动后进入容器执行推流命令
ffmpeg -rtsp_transport tcp -i rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov -vcodec copy -acodec copy -f flv rtmp://192.168.1.200:1935/live/test
URL为流媒体源,IP为Nginx服务,test为推流(拉流)地址。
播放RTMP
rtmp://IP:1935/live/test
HLS配置
Nginx配置文件新增hls实现
worker_processes auto;
rtmp_auto_push on;
events {}
rtmp {
server {
listen 1935;
listen [::]:1935 ipv6only=on;
application live {
live on;
record off;
}
application hls {
live on;
hls on;
hls_path /tmp/hls;
hls_nested on;
hls_variant _low BANDWIDTH=160000;
hls_variant _mid BANDWIDTH=320000;
hls_variant _hi BANDWIDTH=640000;
}
}
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location /hls {
types {
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
root /tmp;
add_header Cache-Control no-cache;
}
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
application hls定义频道,location /hls定义状态访问URI。
HLS播放
http://IP/hls/test/index.m3u8
Niginx整合FFmpeg
其他博文实现
博客1
博客2
博客3