[转]使用FFmpeg将视频推流到nginx,通过vlc拉流播放(通过命令的方式)

  安装完FFmpeg,nginx,nginx-rtmp-module,vlc后就可以进行推流、拉流测试了。博主的nginx安装在VMWare的Ubuntu中(安装方法可以参考https://blog.csdn.net/u014552102/article/details/86599289),ffmpeg和vlc都安装在windows中(win10)。

 

一、nginx配置

  首先我们得进行nginx的rtmp功能配置和直播状态监听配置。我们切换为root用户,使用vim打开Ubuntu的/usr/local/nginx/conf/nginx.conf文件,修改该文件内容为如下所示:

#user  nobody;worker_processes  1; #error_log  logs/error.log;#error_log  logs/error.log  notice;#error_log  logs/error.log  info; #pid        logs/nginx.pid;  events {    worker_connections  1024;} rtmp{    server    {        listen 1935;        chunk_size 4096;        application live        {            live on;        }    }} http {    include       mime.types;    default_type  application/octet-stream;     #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '    #                  '$status $body_bytes_sent "$http_referer" '    #                  '"$http_user_agent" "$http_x_forwarded_for"';     #access_log  logs/access.log  main;     sendfile        on;    #tcp_nopush     on;     #keepalive_timeout  0;    keepalive_timeout  65;     #gzip  on;     server {        listen       8080;        location /stat{                rtmp_stat all;                rtmp_stat_stylesheet stat.xsl;        }        location /stat.xsl{               root /home/cjc/安装包/nginx/nginx-rtmp-module-master;        }    }     server {        listen       80;        server_name  localhost;         #charset koi8-r;         #access_log  logs/host.access.log  main;         location / {            root   html;            index  index.html index.htm;        }         #error_page  404              /404.html;         # redirect server error pages to the static page /50x.html        #        error_page   500 502 503 504  /50x.html;        location = /50x.html {            root   html;        }         # proxy the PHP scripts to Apache listening on 127.0.0.1:80        #        #location ~ \.php$ {        #    proxy_pass   http://127.0.0.1;        #}         # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000        #        #location ~ \.php$ {        #    root           html;        #    fastcgi_pass   127.0.0.1:9000;        #    fastcgi_index  index.php;        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;        #    include        fastcgi_params;        #}         # deny access to .htaccess files, if Apache's document root        # concurs with nginx's one        #        #location ~ /\.ht {        #    deny  all;        #}    }      # another virtual host using mix of IP-, name-, and port-based configuration    #    #server {    #    listen       8000;    #    listen       somename:8080;    #    server_name  somename  alias  another.alias;     #    location / {    #        root   html;    #        index  index.html index.htm;    #    }    #}      # HTTPS server    #    #server {    #    listen       443 ssl;    #    server_name  localhost;     #    ssl_certificate      cert.pem;    #    ssl_certificate_key  cert.key;     #    ssl_session_cache    shared:SSL:1m;    #    ssl_session_timeout  5m;     #    ssl_ciphers  HIGH:!aNULL:!MD5;    #    ssl_prefer_server_ciphers  on;     #    location / {    #        root   html;    #        index  index.html index.htm;    #    }    #}}

 

其中,在nginx.conf文件中修改的内容中,新增加的下面的内容是使nginx增加rtmp功能。其中1935是监听的端口,live on表示开启实时。

rtmp{    server    {        listen 1935;        chunk_size 4096;        application live        {            live on;        }    }}

 

在nginx.conf文件中新增加的下面的内容,是使nginx能具有直播状态监听的功能。其中/home/cjc/安装包/nginx/nginx-rtmp-module-master是博主安装的nginx-rtmp-module的绝对路径,各位得根据自己安装的nginx-rtmp-module的路径进行修改。8080是拉流请求的端口号。

 server {        listen       8080;        location /stat{                rtmp_stat all;                rtmp_stat_stylesheet stat.xsl;        }        location /stat.xsl{               root /home/cjc/安装包/nginx/nginx-rtmp-module-master;        }    }

 

执行完上述步骤后,如果nginx服务器正在运行,我们得先关掉nginx服务器然后重启nginx后,上述更改的配置才会生效。我们执行命令:

killall nginx

 

二、推流

  推流,指的是把采集阶段封包好的内容传输到服务器的过程,主播端把本地采集的语音视频流推送到媒体服务器。就是将现场的视频信号传到网络的过程。在本博文中我们会将主机windows中的媒体文件video5.mp4推流到虚拟机Ubuntu的流媒体服务器nginx中,然后通过windows下的vlc播放出来。

在Ubuntu中执行命令:

ifconfig


如下图所示,可以看到Ubuntu的ip地址是192.168.1.109。记住这个地址。推流和拉流都要用到这个地址。

 

然后启动nginx服务器,在Ubuntu中执行命令:

/usr/local/nginx/sbin/nginx

 

然后我们来到FFmpeg安装目录。博主的FFmpeg安装在主机的win10下,如下图所示,文件夹里面有ffmpeg.exe和其依赖的dll,还有媒体文件video5.mp4。我们通过ffmpeg将video5.mp4推流到流媒体服务器crtmpserver中。

 

在windows的命令提示符中执行命令:

ffmpeg -i video5.mp4  -f flv rtmp://192.168.1.109/live/test1

其中-i 表示输入流。这里的输入流是video5.mp4。-f 表示设定的输出格式。这里因为要推流,推流得使用flv格式,所以设成-f flv。192.168.1.109是要推流到的流媒体服务器所在的Ubuntu的ip地址。上述语句的意思是通过ffmpeg将媒体文件video5.mp4推流到ip地址为192.168.1.109的平台中。
 

执行完上述命令,会出现如下界面,表示推流成功了。

 

然后我们在浏览器中输入http://192.168.1.109:8080/stat。其中192.168.1.109是nginx所在的Ubuntu的ip地址,8080是端口号。如下图所示,在下面的页面中我们可以进行直播状态监听了。

 

三、拉流

  拉流指的是用户端从服务器拉取语音视频流到客户端播放。在本博文中我们会通过vlc拉流Ubuntu的crtmpserver中的语音视频流,然后在vlc播放。

执行完上述推流的步骤后,我们在windows中打开vlc,点击“打开网络串流”,如下图所示:

 

输入网络URL,如下图所示:

 

可以看到在vlc中出现视频画面了,表示拉流成功了