ffmpeg nginx-rtmp实现流媒体播放

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

你可能感兴趣的:(ffmpeg nginx-rtmp实现流媒体播放)