利用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-08
nginx如何使用openssl自簽名實現(xiàn)https登錄
這篇文章主要介紹了nginx使用openssl自簽名實現(xiàn)https登錄,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-08-08
Ubuntu使用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
nginx配置負(fù)載均衡的服務(wù)宕機(jī)了怎么處理
這篇文章主要為大家介紹了nginx配置負(fù)載均衡的服務(wù)宕機(jī)的處理方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06

