请教,nginx rtmp module模块有没有办法限制推流来源

nginx搭建rtmp服务器
一.准备工作
1、安装依赖包:
-y install gcc glibc glibc-devel make nasm pkgconfig lib-devel
openssl-devel expat-devel gettext-devel libtool mhash.x86_64
perl-Digest-SHA1.x86_64&
2、安装git工具:
& & 2.1&添加repository
RHEL/CentOS
/etc/yum.repos.d/&
http://geekery.altervista.org/geekery-el6-i686.repo
/etc/yum.repos.d/
http://geekery.altervista.org/geekery-el6-x86_64.repo
&2.2&install&RPMforge
RHEL/CentOS 6
http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.i686.rpm
rpm -ivh rpmforge-release-0.5.2-2.el6.rf.i686.rpm
http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm
rpm -ivh rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm
& &2.3 install epel
i686: rpm -ivh
http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
x86_64: rpm -ivh
http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
&2.4 开始使用yum安装git
#yum -y install
#git --version
#git version
3.安装ffmpeg及其依赖包
++++++++Yasm+++++++++++
http://www.tortall.net/projects/yasm/releases/yasm-1.2.0.tar.gz
#tar xzvf yasm-1.2.0.tar.gz
#cd yasm-1.2.0
#./configure
#make install
++++++++x264+++++++++++
#git clone git://git.videolan.org/x264
#./configure --enable-shared&
#make install
++++++++LAME+++++++++++
http://downloads.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz
#tar xzvf lame-3.99.5.tar.gz
#cd lame-3.99.5
#./configure --enable-nasm
#make install
++++++++libogg+++++++++++
http://downloads.xiph.org/releases/ogg/libogg-1.3.0.tar.gz
#tar xzvf libogg-1.3.0.tar.gz
#cd libogg-1.3.0
#./configure
#make install
++++++++libvorbis+++++++++++
http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.3.tar.gz
#tar xzvf libvorbis-1.3.3.tar.gz
#cd libvorbis-1.3.3
#./configure
#make install
++++++++libvpx+++++++++++
#git clone http://git.chromium.org/webm/libvpx.git
#cd libvpx
#./configure &--enable-shared
#make install
++++++++FAAD2+++++++++++
http://downloads.sourceforge.net/project/faac/faad2-src/faad2-2.7/faad2-2.7.tar.gz
#tar zxvf faad2-2.7.tar.gz
#cd faad2-2.7
#./configure
#make install
++++++++FAAC+++++++++++
http://downloads.sourceforge.net/project/faac/faac-src/faac-1.28/faac-1.28.tar.gz
#tar zxvf faac-1.28.tar.gz
#cd faac-1.28
#./configure
#make install
编译FAAC-1.28时遇到错误:
mpeg4ip.h:126: error: new declaration ‘char* strcasestr(const
char*, const char*)’
解决方法:
修改此文件mpeg4ip.h
#ifdef __cplusplus
extern "C" {
char *strcasestr(const char *haystack, const char
#ifdef __cplusplus
#ifdef __cplusplus
extern "C++" {
const char *strcasestr(const char *haystack, const char
#ifdef __cplusplus
++++++++Xvid+++++++++++
http://downloads.xvid.org/downloads/xvidcore-1.3.2.tar.gz
xvidcore-1.3.2.tar.gz
xvidcore/build/generic
#./configure
#git clone
git://source.ffmpeg.org/ffmpeg
#./configure
&--prefix=/opt/ffmpeg/ --enable-version3
&--enable-libvpx --enable-libfaac
--enable-libmp3lame &--enable-libvorbis
--enable-libx264 --enable-libxvid --enable-shared --enable-gpl
--enable-postproc --enable-nonfree
&--enable-avfilter --enable-pthreads
&& make install
修改/etc/ld.so.conf如下:
ld.so.conf.d/*.conf
/usr/lib64
/usr/local/lib
/usr/local/lib64
/opt/ffmpeg/lib
yadmi的作用是为flv文件添加关键帧,才能实现拖动播放
#wget&http://sourceforge.net/projects/yamdi/files/yamdi/1.4/yamdi-1.4.tar.gz/download
#tar&xzvf&yamdi-1.4.tar.gz
#cd&yamdi-1.4
#make&&&&make&install
使用方法:yamdi&-i&input.flv&-o&out.flv
给input.flv文件&添加关键帧,输出为out.flv文件
三、下载nginx
&wget&http://ftp.exim.llorien.org/pcre/pcre-8.32.tar.gz
&wget&wget
http://nginx.org/download/nginx-1.4.3.tar.gz
http://h264./download/nginx_mod_h264_streaming-2.2.7.tar.gz
&git clone
git:///arut/nginx-rtmp-module.git
pcre-8.32.tar.gz&
#cd pcre-8.32
#./configure&
#make&&make
nginx-1.4.3.tar.gz
#cd nginx-1.4.3
#./configure --prefix=/usr/local/nginx
&--add-module=../nginx_mod_h264_streaming-2.2.7
--with-http_flv_module --with-http_gzip_static_module
--with-http_stub_status_module --with-http_mp4_module
--add-module=../nginx-rtmp-module
#make&&make
报错ngx_http_streaming_module.c:158:
错误:‘ngx_http_request_t’ 没有名为 ‘zero_in_uri’
的成员。这需要修改nginx_mod_h264_streaming-2.2.7的源代码:
修改ngx_http_streaming_module.c,注释掉
(r-&zero_in_uri) &
& return NGX_DECLINED;
clean,重新configure,重新make
worker_connections 51200;
&#rtmp_auto_push
& server {
& listen 1935;
& application vod {
/opt/media/nginxrtmp/
/usr/local/nginx/sbin/nginx
nginx -s stop
nginx -s quit
nginx -s reload
更换配置,启动新的工作进程,优雅的关闭以往的工作进程
nginx -s reopen
重新打开日志文件
启动nginx报错&nginx: error while
loading shared libraries: libpcre.so.1
#ln -s libpcre.so.0.0.1
libpcre.so.1
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。flash - How can I get audio in my ffmpeg stream to nginx rtmp server? - Stack Overflow
to customize your list.
Stack Overflow is a community of 4.7 million programmers, just like you, helping each other.
J it only takes a minute:
Join the Stack Overflow community to:
Ask programming questions
Answer and help your peers
Get recognized for your expertise
I currently have a nginx server setup with the rtmp plugin for video streaming.
I'm streaming to it with ffmpeg and then displaying the stream on a web browser with adobe flash player.
I have the video streaming successfully but I have not been able to get audio.
This is the ffmpeg command I use to start the stream
ffmpeg -f video4linux2 -s 320x240 -r 16 -i /dev/video0 -f alsa -i hw:0 -an -f flv rtmp://123.456.789.51:31002/rover/mystream
The stream then goes to nginx which is running on this conf file
worker_processes
logs/user/error.
worker_connections
listen 31002;
application rover {
#record_path /
#record_max_size 128K;
#record_interval 30s;
#record_suffix .this.is.
#on_publish http://localhost:8080/
#on_play http://localhost:8080/
#on_record_done http://localhost:8080/record_
location /stat {
rtmp_stat_stylesheet stat.
location /stat.xsl {
root nginx-rtmp-module-master/;
location /control {
#location /publish {
return 201;
#location /play {
return 202;
#location /record_done {
return 203;
location /rtmp-publisher {
root /path/to/
location / {
root nginx-rtmp-module-master/test/
I then access the stream from a browser using this set up for the adobe flash player and strobe media player.
&object width="470" height="320"&
&param name="movie" value="http://osmf.org/dev/2.0gm/StrobeMediaPlayback.swf"&
&param name="flashvars" value="src=rtmp%3A%2F%2F184.173.103.51%3A31002%2Frover%2Fmystream&autoPlay=true"&&/param&
&param name="allowFullScreen" value="true"&&/param&
&param name="allowscriptaccess" value="always"&&/param&
&param name="wmode" value="direct"&&/param&
&embed src="http://osmf.org/dev/2.0gm/StrobeMediaPlayback.swf" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" wmode="direct" width="470" height="320" flashvars="src=rtmp%3A%2F%2F184.173.103.51%3A31002%2Frover%2Fmystream&autoPlay=true"&&/embed&
Could I get some suggestions as to how I couldn't be getting audio?
I'm streaming video from my webcam and specifying audio from my mic.
Do you know what "-an" option is in ffmpeg? If you want audio, you should not use it.
Your Answer
Sign up or
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Post as a guest
By posting your answer, you agree to the
Not the answer you're looking for?
Browse other questions tagged
Stack Overflow works best with JavaScript enabled11:16 提问
FFmpeg推送rtmp视频流到nginx的问题
FFmpeg将网络摄像机的rtsp视频流转换成rtmp流,然后推送rtmp视频流到nginx上面,然后使用手机播放hls的视频流。
在期间遇到一些问题,总是丢包,我截了个图,请大家帮忙看看是不是我在使用ffmpeg时参数设置的不对啊。
我使用的命令:
ffmpeg -i rtsp://admin:.35.56 -vcodec copy -acodec aac -ar 44100 -strict -2 -ac 1 -f flv -s 640x480
rtmp://172.27.35.2:1935/hls/test2
按赞数排序
命令没问题,应该是网络的问题。
你好,请问用ffmpeg将udp流切片到nginx目录下,命令行怎么写?
./ffmpeg -i udp://@231.0.16.101:5001 -f flv -vcodec libx264 -vprofile baseline -acodec aac -ar 44100 -strict -2 -ac 1 -f flv -s
-q 10 rtmp://192.168.100.108:1935/hls/test
使用ffmpeg推送flv视频文件到nginx指定的临时文件中,推送成功临时文件夹中生成*.m3u8和多个*.ts文件,但是过了几分钟,*.m3u8和多个*.ts文件自动被删除,不知道这是为什么?
相关参考资料3060人阅读
Flash(1)
Linux(4)
本人一直用的是CRtmpServer服务,在CRtmpServer服务中根据自已的想法也加入了许多功能,如通过http接口来加载配置等,苦于不支持HLS,自已添加ts分片水平又有限,思来想去决定借助SimpleRtmpServer的HLS功能。说干就干,马上查找相关资源,下载、解压一一蹴而就,SRS顺利搭好,比想像中的要简单很多。
SRS服务搭建好后,直推测试成功,在配置CRtmpServer转推流时,SRS的流播放不出,查看日志发现报了个tcUrl不能为空的异常,于是想到应该是CRtmpServer在转推时没有传入tcurl的参数,查看CRtmpServer的源代码,定位到转推的位置,跟综下来确认tcUrl为空,了解了tcUrl的格式,与targetUri是一致,于是将targetUri的值赋给tcUrl,测试顺利通过,就是这么简单,但是,经过一段时间跑下来发现SRS好像不太稳定,也许是对它不太了解。也许看到大家都在用Nginx的HLS,于是又有了将SRS换成Nginx的想法。
在搭建Nginx
Rtmp服务时参考的是前辈留下的、二、三,由于是第一次在Nginx中添加nginx-rtmp-module模块,感觉和SRS的相比相对烦锁,很多的依赖包要么对版本依赖性较大,要么干脆链接打不开。总的来说整个流程下来搭建还算顺利。
Nginx的配置之前一直用的是它的反向代理及前端Cache,配置起来也得心应手,很快便可以独立使用了,但我搭建Nginx的目的是想用来做RTMP的边缘,提供RTMP以及HLS的播放。在测试时,同样也遇到了CRtmpServer转推至Nginx时不成功,在Nginx
日志中也没发现什么异常,与直接推送相比,发现PUSH的连接,成功然后马上又被断开,经过反复的比较,直推是连接成功后便有创建流、发布流的日志,如下:
17:13:12 [info] 6587#0: *8 client connected '10.22.22.245'
17:13:12 [info] 6587#0: *8 createStream, client: 10.22.22.245, server: 0.0.0.0:1936
17:13:12 [info] 6587#0: *8 publish: name='snh48_live_640_360' args='' type=live silent=0, client: 10.22.22.245, server: 0.0.0.0:1936
转推的日志中并没有createStream与publish的相关日志,便怀疑会不会是CRtmpServer本身的问题呢?为了验证,马上又开启了CRtmpServer进行本地的调试,发现多了一条错误日志,内容为:
basertmpprotocol.cpp:799:BaseRTMPProtocol::ProcessBytes:Unable to send rtmp message to application。
也是就是这玩意在做怪,迅速找到这片代码:
if (!_pProtocolHandler-&InboundMessageAvailable(this, header, channel.inputData)) {
FATAL(&Unable to send rtmp message to application&);
分析后,估计是CRtmpServer对Nginx返回的消息不被支持,但也不想再去看Nginx的框架,于是想法大胆的直接将return false注释掉跑跑看。
if (!_pProtocolHandler-&InboundMessageAvailable(this, header, channel.inputData)) {
FATAL(&Unable to send rtmp message to application&);
}再次调试,果然灵光。又测试了转推其它类型流媒体服务,我又笑了。。。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:64483次
排名:千里之外
原创:23篇
评论:21条
(1)(2)(1)(2)(3)(4)(1)(3)(1)(4)(3)windows下流媒体nginx-rmtp-module服务器搭建及java程序调用fmpeg将rtsp转rtmp直播流
发布时间: 11:03:27
第一步:首先介绍一下所用相关技术
注:项目中使用的jwplayer插件,不支持rtsp协议,所以使用以下技术来进行转艺
。在这里我只用到了它的功能,将rtsp协议的视频流转成rtmp
(实时流):&
公司用的是海康的监控地址为(rtsp://admin:8.3.218/h264/ch1/main/av_stream)
&&&& 3. (实时消息传输协议 ):
RTMP是一种设计用来进行实时数据通信的网络协议,主要用来在Flash/AIR平台和支持RTMP协议的流媒体/交互服务器之间进行音视频和数据通信。支持该协议的软件包括Adobe Media Server/Ultrant Media Server/red5/nginx(这里我用到的NGINX)等。
&&&&&4.是一个开源的在网页上使用的、音频以及图片播放器
它支持播放的Adobe Flash Player和HTML5浏览器可以处理任何格式(FLV文件,H.264标准,MP4功能,VP8的,WEBM,支持MP3,AAC,JPG,PNG和GIF)。它也支持各种流和播放清单格式(包括RMTP协议,HTTP直播和更多)和多种播放选项。
&&&& 5.nginx-rmtp-module是的流媒体插件:
Nginx本身是一个非常出色的HTTP服务器,ffmpeg是非常好的音视频解决方案.这两个东西通过一个nginx的模块nginx-rtmp-module,组合在一起即可以搭建一个功能相对比较完善的流媒体服务器.这个流媒体服务器可以支持RTMP和HLS(Live Http Stream)。
nginx配合ffmpeg做流媒体服务器的原理是:
nginx通过rtmp模块提供rtmp服务, ffmpeg推送一个rtmp流到nginx, 然后客户端通过访问nginx来收看实时视频流。(这里我是用jwplayer来访问这个rtmp地址)
第二步:相关软件的配置及应用
当前使用的nginx-1.5.8版本
(现在需要使用nginx-rtmp.exe这个程序, 网上可以搜索到该软件已经集成rtmp模块的版本)
& & & & & & & & & & & &
&&&&& 2.打开conf文件夹找到nginx.conf文件,配置rtmp
&&&&& (添加rtmp{....})
&&& 3.运行cmd命令,启动nginx.exe服务
(start nginx.exe:启动nginx服务,然后看进程中是否有nginx.exe)
&& 4.打开网页输入:localhost或者127.0.0.1本机ip
(显示一下界面说明启动成功)
第三步:相关软件的配置及应用Nginx服务启动之后就可以执行ffmpeg命令进行rtsp协议转成rtmp:
&&& ffmpeg -i "rtsp://admin:8.3.218/h264/ch1/main/av_stream" -f flv -r 25 -s 640x480 -an "rtmp://192.168.3.138:1935/myapp/test2"
运行cmd:执行ffmpeg命令语句
ffmpeg:其实就是ffmpeg.exe,运行语句的时候.exe可不要
-i:后面是我所需要的摄像头协议
-f flv:后面是我要转到nginx的rtmp服务器上
-s:视频解析度:(分配率)也就是能调视屏的清晰度,如果在本机上测试建议640*480就好,改变视屏流的解析式cpu会消耗很大
(rtmp服务地址:rtmp://192.168.3.138:1935/myapp/test2)
192.168.3.138:nginx启动的机器ip
1935:端口号(之前在nginx.conf里配置的)
myapp:是application 后面的名称
test2:可以随便起,记得到时候访问rtmp时要一致
回车执行ffmpeg语句
(下面是我执行的结果,证明我的是执行成功的,通过ffmpeg把rtsp协议的摄像头的视屏流一直运行的转到nginx的rtmp视屏流服务器上)
第四步:配置jwplayer: 文件名JWplayer6.8.-06-28)(完美去水印
(网上下载的资源,这里主要用到jwplayer.js 以及 jwplayer.flash.swf两个,index.html里有一些参数介绍,其它文件的相应介绍自己可以百度)
注:jwplayer貌似不支持在本地html页面中播放,要在服务器环境中实现播放
项目里只配置了自己所需的:
附:Java中执行ffmpeg语句如下
public static boolean convertProtocol(String ffmpeg,String rtsp, String rtmp,String s){
ffmpeg -i "rtsp://admin:8.3.218/h264/ch1/main/av_stream"
-f flv -r 25 -s 640x480 -an "rtmp://192.168.3.138:1935/myapp/test2"
List&String& commend = new ArrayList&String&();
commend.add(ffmpeg);
commend.add("-i");
commend.add("\""+rtsp+"\"");
commend.add("-f");
commend.add("flv");
commend.add("-r");
commend.add("25");
commend.add("-s");
commend.add(s);
commend.add("-an");
commend.add(rtmp);
ProcessBuilder builder = new ProcessBuilder(); //创建系统进程
mand(commend);
builder.start();//启动进程
} catch (Exception e) {
e.printStackTrace();
&注:以上所涉及软件都可在网上找到,如果找不到或者有什么问题可直接回复博文,我看到后会第一时间回复大家
转载请注明出处谢谢
来源:/icbc/p/4147138.html

我要回帖

更多关于 nginx rtmp windows 的文章

 

随机推荐