【Android音视频开发】【023】nginx+rmtp+ffmpeg+vlc一分钟实现rtmp推流和播放(Windows版本)
准备环境nginx,反向代理服务器,http://nginx.org/en/download.htmlnginx-rmtp-module,nginx的rtmp服务插件,https://github.com/arut/nginx-rtmp-module/releasesffmpeg-win64,windows版本的ffmpeg程序,https://github.com/BtbN/FFmpeg-Bui
准备环境
- nginx,反向代理服务器
- nginx-rmtp-module,nginx的rtmp服务插件
- ffmpeg-win64,windows版本的ffmpeg程序
- vlc,专业的视频播放器
- nginx在编译完成后,无法再动态添加其它模块,所以我们如果想添加nginx-rmtp-module,不能直接下载运行包,必须下载源代码自己编译
- nginx一般在Linux下编译,windows下编译nginx并添加自定义组件很麻烦,所以一般都是用第三方编译好的nginx版本,即nginx-Gryphon,这个程序包含了许多常用的nginx模块,也包括rtmp
程序下载
建议大家直接从博客里面下载,网上的很多教程写得不够细,很多操作顺序是不对的,或者配置文件需要修改,这些都遗漏了,需要自己排查错误
我这个版本是我整理过的,不用配环境变量,不用改配置文件,也不用自己敲命令行,因为我已经把命令行写到bat文件里了,直接启动bat就行了
两个bat文件,一个是启动nginx-rtmp服务,一个是向rtmp服务器推mp4视频流
下载地址 => nginx+rtmp+ffmpeg+vlc.zip
启动环境
解压全部文件到任意目录
运行nginx/nginx-rtmp.bat,启动nginx-rtmp服务
运行ffmpeg/bin/push-rtmp.bat,向rtmp服务器推流
打开vlc.exe,播放rtmp://localhost:18005/live/home地址,即可看到视频
工作原理
到此为止,我们已经实现了一分钟搭建运行环境了
对于“不求甚解”的同学来说,下个文件,双击两下,就已经轻松达到了自己的目标了
对于想学得深点的同学,我们再来谈谈工作原理
当我们点击nginx-rtmp.bat,实际上执行了以下命令
nginx-rtmp -c conf\nginx-rtmp.conf
我们启动了nginx-rtmp主程序,同时以nginx-rtmp.conf作为启动时使用的配置文件
这个是第三方的nginx主程序,官方的主程序是nginx.exe,默认配置文件是nginx.conf
实际我们可以通过指令来指定nginx.exe使用哪个配置文件
我们也可以修改配置文件,指定自定义的服务端口,我们这里是以18004作为http服务端口,18005作为rtmp服务端口
当我们点击push-rtmp.bat,实际上执行了以下命令
ffmpeg -re -i orange.mp4 -vcodec libx264 -acodec aac -f flv rtmp://localhost:18005/live/home
我们调用了ffmpeg主程序,执行了推流指令,同时指定了推流文件,视频解码器,音频解码器,推流格式,推流地址
如果想推其它视频文件,或推到其它服务器,修改指令参数即可
注意rtmp地址最后的home这个路径,这个是可变的,它相当于一个直播房间号
推流的时候往哪个房间号推,看视频的时候去对应的房间号看就行了
比如我们的推流地址改成rtmp://localhost:18005/live/10086,那么播放的时候也使用rtmp://localhost:18005/live/10086就行了,通过这种方式,rtmp就可以实现多路视频同时推送
后话
下一篇我们要讲解Linux版本的
Windows版的只是一个傻瓜式的,别人编译好直接拿来用的服务,只是为了方便大家快速了解rtmp的运作方式
如果大家以后做的是专业的音视频开发,很多时候,都是需要自己去编译库,自己去定制模块的,而且大多时候是在Linux上编译和运行的,这个才是我们的学习重点
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)