ffmpeg nginx web_FFmpeg推流直播实践

01 前言

      FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。它提供了录制、转换以及流化音视频的完整解决方案。它的工作过程如图所示:                                     

196e58357f5ed19c713bd64baa4dc2bc.png

输入输出文件可有四种:

  • 普通文件如视频文件或jpg图片

  • 设备文件如摄像头或屏幕(unix理念一切皆是文件)

  • 网络协议如http和rtmp

  • 未编码的原生帧(应用滤镜)

     下面介绍利用ffmpeg的设备文件输入和网络协议推流输出功能搭建的直播环境,流程如下图所示:

c7d9e61f3756020c7f1348b0c56c8e06.png

02 搭建环境

      图中摄像头和麦克风和ffmpeg程序集成在同一台windows电脑上,Nginx是高性能web服务,安装rtmp协议扩展模块后就可以提供媒体服务,它安装于局域网内一个虚拟机centos linux上,ffplay是ffmpeg工具集的播放器,安装于另一台电脑上。

03 搭建步骤

      一、在windows上安装ffmpeg,到ffmpeg官网下载编译好的windows版ffmpeg解压即可。

      二、在centos安装nginx和rtmp扩展模块,安装nginx很简单因为有现成的安装包,但安装rtmp扩展模块就没有那么简单了,需从源码编译的方式把rtmp模块编译进nginx里再安装,步骤是:

       ①下载nginx和nginx-module-rtmp的源码,解压。

       ②进入nginx源码目录

         $ ./configure –add-moudle=../nginx-rtmp-module #配置编译参数

         $ make; sudo make install #编译并安装

  三、配置nginx支持rtmp,打开/usr/local/nginx/conf/nginx.conf,末尾添加上

         rtmp {

               server {

                   application live {

                           live on;

                  } } }

      四、 启动nginx

            #sudo /usr/local/nginx/sbin/nginx

      五、在widnows上采集摄像头和麦克风音视频流并推流给nginx:

          ① 先查看摄像头和麦克风的设备名:

          >ffmpeg -list_devices true -f dshow -i dummy

a9ea7d003d3b896aa652b18766b24145.png

把设备名分别填入下面的命令中。

② 采集摄像头和麦克风的视频音频流并编码混合然后推流

        ffmpeg -f dshow -i video="HP Wide Vision HD Camera" -f dshow -i audio="麦克风阵列 (2- Realtek High Definition Audio)" -vcodec libx264 -acodec aac -preset:v ultrafast -tune:v zerolatency -f flv rtmp://192.168.151.158:1935/living

  • -f dshow指出后面输入流的格式

  • -I video=表示输入视频,后面指出摄像头设备名

  • -i audio=表示输入音频,后面指出麦克风设备名

  • -vcodec libx264表示用x264编码库把视频转码为h264

  • -acodec aac表示把音频转码为aac

  • -preset:v ultrafast -tune:v zerolatency表示对x264编码器设置两组预设参数集

  • -f flv表示输出文件的格式是flv

  • rtmp://表示采用rtmp协议,没有-i的就是输出项,所以它表示推流192.168.151.158是虚拟机centos所在的宿主windows的ip,1935是缺省的rtmp协议端口号,通过vmware里的端口映射,把访问宿主机的ip:1935映射为访问虚拟机的ip:1935,这样其它电脑就可以访问虚拟机里的nginx服务了。

     六、允许通过防火墙和从其他电脑访问宿主机内虚拟机提供的服务

      ①使centos的防火墙开放1935端口

   $ sudo firewall-cmd –zone=public –add-port=1935/tcp –permanent

   $ sudo firewall-cmd –reload #使其生效

      ②配置虚拟机所在宿主windows系统防火墙开放1935端口。

     ③设置虚拟机端口映射,在虚拟机vaware的虚拟机网络编辑器里增加rtmp端口1935的映射,其他电脑就可以通过访问宿主机的ip和端口1935来访问虚拟机centos里的nginx服务

8684cbf1c5ebd5901afe638598349d9d.png

     七、在同一个局域网的另一个电脑上,用ffplay拉流播放

        ffplay  rtmp://192.168.151.158:1935/living 如下即为直播效果:

8cfc4a0f3ee1f8ec2973ca414418c42a.png

04 结束语

不用写一行代码就实现了简单的直播,可见ffmpeg的视频处理,媒体设备数据采集和网络推送功能丰富强大。

                                作者:张仰东

青榴实验室---超高清视频技术的传播者

ca5f0b2b0079fd18c5f610e318389c97.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值