首页 > 代码库 > 使用nginx+nginx-rtmp-module+ffmpeg搭建流媒体服务器笔记(一)
使用nginx+nginx-rtmp-module+ffmpeg搭建流媒体服务器笔记(一)
第一部分
主要步骤及命令记录:
1、下载nginx,地址http://nginx.org/en/download.html,选择最新版本下载、解压。当前最新版为:nginx-1.7.9。
2、为了增加对rtmp的支持,下载nginx-rtmp-module,地址:https://github.com/arut/nginx-rtmp-module#example-nginxconf,这个是个开源项目。解压后,为了和我在网上看到的教程同步,我改了文件夹名字,将其改成了nginx-rtmp-module。然后将其放到/home/user/目录下(今天才知道h和user非常像的目录usr是Unix System Resource的意思)。
cp -rf 123/nginx-rtmp-module/ /home/user/
3、进入到nginx-1.7.9文件夹目录下,执行如下命令:
./configure --prefix=/usr/local/nginx --add-module=/home/user/nginx-rtmp-module --with-http_ssl_module4、待上述命令执行完成之后,执行如下命令安装:
make5、make完成之后,执行:
make install6、希望能顺利完成以上步骤。安装完成后,打开nginx的配置文件nginx.conf进行配置:在root前提下执行下面命令打开nginx.conf
gedit /usr/local/nginx/conf/nginx.conf7、nginx.conf中增加rtmp的支持,下面是修改过得文件,以后可能还会修改更新:
#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; application myapp { live on; } application hls { live on; hls on; hls_path /tmp/hls; } } } 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 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; # } #} }8、保存完配置文件之后,启动nginx服务
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf9、启动时可能会遇到端口占用的问题,
nginx: [emerg] bind() to 0.0.0.0:1935 failed (98: Address already in use) nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use) nginx: [emerg] bind() to 0.0.0.0:1935 failed (98: Address already in use) nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use) nginx: [emerg] bind() to 0.0.0.0:1935 failed (98: Address already in use) nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use) nginx: [emerg] bind() to 0.0.0.0:1935 failed (98: Address already in use) nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use) nginx: [emerg] bind() to 0.0.0.0:1935 failed (98: Address already in use) nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use) nginx: [emerg] still could not bind()上述的显示是因为我的nginx服务已经在运行了,所以再启动时1935和80端口会占用,可以使用下面命令来终止服务:
pkill -9 nginx当遇到不是因为服务已经启动造成的端口占用时可以通过下面命令来查看是哪个线程占用的端口,然后杀死他(例如端口号1935):
<pre name="code" class="plain">netstat -tlnp|grep 1935然后系统会显示:
tcp 0 0 0.0.0.0:1935 0.0.0.0:* LISTEN 20211/nginx.conf注意到这个20211就是线程号,后面跟着的是服务名字,也就是说nginx占用着1935端口,可以使用下面命令杀死他:
kill -9 2021110、然后再启动服务,当服务启动成功的话,在本机浏览器输入:http://localhost/
Welcome to nginx! If you see this page, the nginx web server is successfully installed and working. Further configuration is required. For online documentation and support please refer to nginx.org. Commercial support is available at nginx.com. Thank you for using nginx.如果出现上述内容,则服务成功启动。
11、可以通过netstat -ltn 命令可以看到端口的监听情况.
激活Internet连接 (仅服务器) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:1935 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN tcp 0 0 127.0.1.1:53 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN tcp6 0 0 ::1:631 :::* LISTEN80是nginx默认的http监听端口。
12、用ffmpeg推流到nginx,myapp上,我推送的是网络摄像机的rtsp直播视频流。用如下命令:
ffmpeg -i rtsp://admin:12345@172.27.35.56 -acodec aac -strict experimental -ar 44100 -ac 2 -b:a 96k -r 25 -b:v 500k -s 640*480 -f flv rtmp://172.27.35.2:1935/myapp/test1上述命令参照http://www.tuicool.com/articles/eAfIVv具体参数还有待修改。
在VLC上打开网络串流 ,填写 rtmp://172.27.35.2:1935/myapp/test1可以看到监控画面,有大约2~3秒的延时。
明天继续,将流推送到hls上……
使用nginx+nginx-rtmp-module+ffmpeg搭建流媒体服务器笔记(一)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。