利用nginx與ffmpeg搭建流媒體服務(wù)器過程詳解
需求
本文介紹的是利用nginx和ffmpeg搭建流媒體服務(wù)器的過程。例如這種場景:公司內(nèi)部需要同時觀看在線直播時,如果每個人直接觀看必然給出口帶寬帶來壓力,影響正常訪問外網(wǎng)的同事。所以可以在內(nèi)網(wǎng)通過nginx+ffmpeg拉一路直播流,然后內(nèi)網(wǎng)的用戶訪問內(nèi)網(wǎng)的這臺流媒體服務(wù)器即可。通過nginx+ffmpeg還可以實現(xiàn)推流、拉流、轉(zhuǎn)推甚至利用FFmpeg實時切片、視頻處理等,實現(xiàn)一套直播服務(wù)模型。
環(huán)境
系統(tǒng)環(huán)境:CentOS release 6.7 (Final)
步驟
安裝ffmpeg
安裝過程參考官方文檔:https://trac.ffmpeg.org/wiki/CompilationGuide
安裝Nginx
這里采用了編譯安裝的方式,需要注意的是:一定要添加nginx-rtmp-module模塊
git clone https://github.com/arut/nginx-rtmp-module.git #編譯的時候添加nginx-rtmp-module模塊 --add-module=path_of_/nginx-rtmp-module
我的nginx編譯參數(shù)
./configure --prefix=/opt/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_gzip_static_module --with-http_stub_status_module --with-pcre=/opt/software/pcre-8.35 --with-zlib=/opt/software/zlib-1.2.8 --with-openssl=/opt/software/openssl-1.0.1i --add-module=/opt/software/nginx-1.8.1/modules/nginx-rtmp-module
修改nginx配置文件nginx.conf
user nginx; worker_processes 2; error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { use epoll; worker_connections 1024; } #切換自動推送(多 worker 直播流)模式。默認(rèn)為 off rtmp_auto_push on; #當(dāng) worker 被干掉時設(shè)置自動推送連接超時時間。默認(rèn)為 100 毫秒 rtmp_auto_push_reconnect 1s; rtmp { server { listen 1935; #直播流配置 application myapp { live on; } # hls切片 application hls { live on; hls on; hls_path /tmp/hls; } # 拉流 application qiniu { live on; push rtmp://拉流地址; } # 轉(zhuǎn)推 application pull { live on; pull rtmp://轉(zhuǎn)推地址; } # rtmp日志設(shè)置 access_log logs/rtmp_access.log ; } } 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 65; gzip on; server { listen 80; server_name localhost; charset utf-8; access_log logs/host.access.log main; location /stat { rtmp_stat all; rtmp_stat_stylesheet stat.xsl; } location /stat.xsl { root /opt/software/nginx-rtmp-module/; } location / { root /opt/www/html; index index.html index.htm; } location /hls { types { application/vnd.apple.mpegurl m3u8; video/mp2t ts; } root /tmp; add_header Cache-Control no-cache; } #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; } } include vhosts/*.conf; }
這是一個較簡單的配置, rtmp監(jiān)聽1935端口,如果是hls的話用hls on開啟hls,并且為hls設(shè)置一個臨時文件目錄hls_path /tmp/hls; 其它更高級的配置可以參看nginx-rtmp-module的readme,里面有比較詳細(xì)的介紹其它的配置。
重啟Nginx
nginx -t nginx -s reload
查看Nginx已監(jiān)聽1935端口。
使用ffmpeg推流到nginx
推一個本地的mp4到上面配置的myapp上:
ffmpeg -re -i /tmp/ffmpeg_test.mp4 -vcodec copy -acodec copy -f flv "rtmp://127.0.0.1:1935/myapp/test1"
流播放地址為(10.0.0.6是我本地的IP):rtmp://10.0.0.6:1935/myapp/test1
推一個本地的mp4到hls上:
ffmpeg -re -i /tmp/ffmpeg_test.mp4 -vcodec copy -acodec copy -f flv "rtmp://127.0.0.1:1935/hls/test2"
流播放地址為: http://10.0.0.6/hls/test2.m3u8
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。謝謝大家對腳本之家的支持。
相關(guān)文章
在Ubuntu系統(tǒng)上安裝Nginx服務(wù)器的簡單方法
這篇文章主要介紹了在Ubuntu系統(tǒng)上安裝Nginx服務(wù)器的簡單方法,包括打開和關(guān)閉Nginx的指令,需要的朋友可以參考下2015-08-08nginx如何使用openssl自簽名實現(xiàn)https登錄
這篇文章主要介紹了nginx使用openssl自簽名實現(xiàn)https登錄,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-08-08Ubuntu使用nginx搭建webdav文件服務(wù)器的詳細(xì)過程
今天通過本文給大家分享Ubuntu使用nginx搭建webdav文件服務(wù)器的詳細(xì)過程,在這小編提示大家在安裝nginx時需要先安裝nginx-full,具體安裝方法跟隨小編一起通過本文學(xué)習(xí)下吧2021-05-05詳解nginx rewrite和根據(jù)url參數(shù)location
本篇文章主要是介紹了nginx rewrite和根據(jù)url參數(shù)location,有興趣的同學(xué)可以了解以下。2016-11-11