使用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中出现视频画面了,表示拉流成功了

发布了54 篇原创文章 · 获赞 55 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/u014552102/article/details/86606465