win7 下基于nginx和ffmpeg的rtmp流媒体服务器搭建

简介: 前提:最近公司要做直播方面的APP开发,刚接触到的时候是一脸懵逼状态,经过两天的采坑填坑终于搞懂了直播的流程,在此记录一下。一是怕自己忘记,另外一个是给其他人做一个参考吧。

前提:

最近公司要做直播方面的APP开发,刚接触到的时候是一脸懵逼状态,经过两天的采坑填坑终于搞懂了直播的流程,在此记录一下。一是怕自己忘记,另外一个是给其他人做一个参考吧。
ps:现在好多的文章千篇一律,不负责任的复制粘贴,让人摸不着头脑,并且话说的不够细致,让人很是头疼。

准备条件

  • nginx-rtmp-module(带rtmp模块)

  • ffmpeg 密码:eha3

  • screencapturer 密码:ypgz (是一个虚拟设备,在使用FFMpeg之前,需要安装)

  • vlc播放器 密码:3yjf

    首先 nginx-rtmp-module是nginx的一个组件,可以自己编译生成,也可以从网上下载。需要注意的是,从nginx官网上下载的版本是不带rtmp模块的,但您可以通过: http://nginx-win.ecsds.eu/找到包含rtmp组件的nginx版本,比如:nginx 1.7.8.1 Gryphon

然后,解压按下ctrl+R键输入cmd打开命令行窗口,切换到解压的路径下,输入nginx -V 查看 nginx版本,如下图所示表示成功:


img_30accad38a8b95d0a49a14d643ffc23d.png
查看nginx版本.png
  • conf 下的nginx.conf配置文件(如果没有需要自己新建)
    如下图所示路径:
    img_f126a96a3c4ff188f0809c70d272b5a9.png
    nginx配置文件路径.png

    PS:下图是nginx配置文件,如果没有需要自己手动创建
img_d5ccd55e6f4a1f760172e262e4b66e1e.png
nginx配置文件.png
  • nginx.conf的配置内容

      #将以下内容拷贝到conf/nginx.conf文件中。
    #nginx进程数,建议设置为等于CPU总核心数
    worker_processes  2;
    #工作模式与连接数上限
     events {
       worker_connections  8192;
     }
    
     rtmp_auto_push on;
    
    rtmp {
    server {
      listen 1935;
      application myapp {
          live on;
      }       
     }
    }
    
  • nginx启动方式

    img_b2c233093b026157c48299ac6951e4f9.png
    nginx启动方式.png

    如上图所示:切换到你的nginx安装路径下然后输入 start nginx即可启动
    注意: 启动也可以输入 nginx.exe -c conf\nginx-win-rtmp.conf,这种方法带来的问题是不能优雅退出,切记!
    然后打开任务管理器可以看到nginx进程已经启动,如下图所示:

img_05971e3be848c0e64f534c4284ebd721.png
nginx进程.png

其次,基于ffmpeg的推拉流测试

    ffmpeg是一个自由软件,它提供了一整套多媒体的解决方案,从采集、编码、转换、播放应有尽有。
在流媒体应用领域不借助 ffmpeg 的力量,就好比做 windows 程序而不用 Visual Studio ,做 iOSApp 
不用 XCode 一样,需要很大的勇气。
  • ffmpeg 安装
    解压ffmpeg到指定文件夹下,我这里是在D盘的ProgramFile下的ffmpeg路径,然后将ffmpeng的bin路径添加到系统的path路径下


    img_70e37cea11889960817d4a200ac4c9a4.png
    FFMPEGbin路径.png

注意:里面的里面的两个视频文件是我添加进去的,没有什么作用。
将D:\ProgramFile\ffmpg\ffmpeg-win64\bin 添加到环境变量的PATH后面,当然要根据你自己的安装路径配置环境变量。

  • 1、 ffmpeg实现录屏推流
    打开windows命令行在命令行下输入:

       ffmpeg -f gdigrab -i desktop -r 16 -vcodec h264 -acodec aac -f flv 
       rtmp://192.168.0.197/myapp/pc
    

注意: 这是一行命令行下的,没有空格,这里是方便你们查看。如下图所示,推流已经开始了。

img_f7d816fefb0161a64477d187c5349e14.png
ffmpeg推流.png

  • vlc串流配置
    打开vlc客户端,点击媒体,在下拉框选项中选中打开网络串流这一个选项,会弹出如下图所示的对话框,在对话框中填入刚才第二行连接( rtmp://192.168.0.197/myapp/pc)即可,当然我这个是在局域网下面的。
    img_2cbc095e1370fdd1dbdb4eb1b76e6e33.png
    vlcrtmp串流配置.png

解释:

  • 1、myapp为application的名字,由nginx的conf中定义

  • 2、pc为直播流的名字,由推送方定义

  • 2、ffmpeg播放视频文件
    切换到保存视频文件的路径下,我这里是在nginx路径下,如下图所示:


    img_828a588ecf3ce1f38eacf8fb42b9fd31.png
    ffmpeg视频文件.png

那么对应的命令就是这样写:

ffmpeg -re -i gdiOut.avi -vcodec libx264 -acodec aac -f flv 
rtmp://192.168.0.197:1935/myapp/home

解释:

  • 1、myapp为application的名字,由nginx的conf中定义
  • 2、home为直播流的名字,由推送方定义

最后

  经过两天的采坑不断尝试终于搞定了服务器这块,下来直播的还需要自己去努力完成了。我相信有志者事竟成,
一定会死磕到底,去解决那个难题。

致谢

第一讲:win7下快速搭建媒体服务器的方法
Nginx搭建RTMP推拉流服务器
另外推荐一个Android交流群493180098,如需转载请标明出处,谢谢。

相关文章
|
7月前
|
Ubuntu 安全 应用服务中间件
详细指南:配置Nginx服务器在Ubuntu平台上
以上步骤涵盖了基本流程:从软件包管理器获取 Ngnix, 设置系统服务, 调整UFW规则, 创建并激活服务器块(也称作虚拟主机), 并进行了初步优化与加固措施。这些操作都是建立在命令行界面上,并假设用户具有必要权限(通常是root用户)来执行这些命令。每个操作都有其特定原因:例如,设置开机启动确保了即使重启后也能自动运行 Ngnix;而编辑server block则定义了如何处理进入特定域名请求等等。
395 18
|
7月前
|
Ubuntu 安全 应用服务中间件
详细指南:配置Nginx服务器在Ubuntu平台上
以上步骤涵盖了基本流程:从软件包管理器获取 Ngnix, 设置系统服务, 调整UFW规则, 创建并激活服务器块(也称作虚拟主机), 并进行了初步优化与加固措施。这些操作都是建立在命令行界面上,并假设用户具有必要权限(通常是root用户)来执行这些命令。每个操作都有其特定原因:例如,设置开机启动确保了即使重启后也能自动运行 Ngnix;而编辑server block则定义了如何处理进入特定域名请求等等。
657 17
|
8月前
|
缓存 负载均衡 JavaScript
Nginx:高性能Web服务器与反向代理利器
Nginx:高性能Web服务器与反向代理利器
385 110
|
8月前
|
缓存 负载均衡 前端开发
Nginx:高性能Web服务器的核心引擎
Nginx:高性能Web服务器的核心引擎
269 47
|
Linux 开发工具 Android开发
FFmpeg开发笔记(六十)使用国产的ijkplayer播放器观看网络视频
ijkplayer是由Bilibili基于FFmpeg3.4研发并开源的播放器,适用于Android和iOS,支持本地视频及网络流媒体播放。本文详细介绍如何在新版Android Studio中导入并使用ijkplayer库,包括Gradle版本及配置更新、导入编译好的so文件以及添加直播链接播放代码等步骤,帮助开发者顺利进行App调试与开发。更多FFmpeg开发知识可参考《FFmpeg开发实战:从零基础到短视频上线》。
1774 2
FFmpeg开发笔记(六十)使用国产的ijkplayer播放器观看网络视频
|
Linux API 开发工具
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
ijkplayer是由B站研发的移动端播放器,基于FFmpeg 3.4,支持Android和iOS。其源码托管于GitHub,截至2024年9月15日,获得了3.24万星标和0.81万分支,尽管已停止更新6年。本文档介绍了如何在Linux环境下编译ijkplayer的so库,以便在较新的开发环境中使用。首先需安装编译工具并调整/tmp分区大小,接着下载并安装Android SDK和NDK,最后下载ijkplayer源码并编译。详细步骤包括环境准备、工具安装及库编译等。更多FFmpeg开发知识可参考相关书籍。
770 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
|
编解码 语音技术 内存技术
FFmpeg开发笔记(五十八)把32位采样的MP3转换为16位的PCM音频
《FFmpeg开发实战:从零基础到短视频上线》一书中的“5.1.2 把音频流保存为PCM文件”章节介绍了将媒体文件中的音频流转换为原始PCM音频的方法。示例代码直接保存解码后的PCM数据,保留了原始音频的采样频率、声道数量和采样位数。但在实际应用中,有时需要特定规格的PCM音频。例如,某些语音识别引擎仅接受16位PCM数据,而标准MP3音频通常采用32位采样,因此需将32位MP3音频转换为16位PCM音频。
526 0
FFmpeg开发笔记(五十八)把32位采样的MP3转换为16位的PCM音频
|
Android开发 开发者
FFmpeg开发笔记(五十七)使用Media3的Transformer加工视频文件
谷歌推出的Transformer,作为Jetpack Media3架构的一部分,助力开发者实现音视频格式转换与编辑。Media3简化了媒体处理流程,提升了定制性和可靠性。Transformer可用于剪辑、添加滤镜等操作,其示例代码可在指定GitHub仓库中找到。要使用Transformer,需在`build.gradle`中添加相关依赖,并按文档编写处理逻辑,最终完成音视频转换任务。具体步骤包括配置剪辑参数、设置空间效果以及监听转换事件等。
385 0
FFmpeg开发笔记(五十七)使用Media3的Transformer加工视频文件
|
XML 开发工具 Android开发
FFmpeg开发笔记(五十六)使用Media3的Exoplayer播放网络视频
ExoPlayer最初是为了解决Android早期MediaPlayer控件对网络视频兼容性差的问题而推出的。现在,Android官方已将其升级并纳入Jetpack的Media3库,使其成为音视频操作的统一引擎。新版ExoPlayer支持多种协议,解决了设备和系统碎片化问题,可在整个Android生态中一致运行。通过修改`build.gradle`文件、布局文件及Activity代码,并添加必要的权限,即可集成并使用ExoPlayer进行网络视频播放。具体步骤包括引入依赖库、配置播放界面、编写播放逻辑以及添加互联网访问权限。
1615 1
FFmpeg开发笔记(五十六)使用Media3的Exoplayer播放网络视频

热门文章

最新文章