名詞解釋 ? | |
RTSP (Real-Time Streaming Protocol) |
是一種網絡協(xié)議,用于控制實時流媒體的傳輸。它是一種應用層協(xié)議,通常用于在客戶端和流媒體服務器之間建立和控制媒體流的傳輸。RTSP允許客戶端向服務器發(fā)送請求,如播放、暫停、停止、前進、后退等,以控制媒體流的播放和操作。RTSP可以與不同的傳輸協(xié)議(如RTP、TCP、UDP)結合使用,以實現(xiàn)實時的音視頻流傳輸。它在視頻監(jiān)控、流媒體直播、視頻會議等應用中廣泛使用。 |
RTMP |
RTMP(Real-Time Messaging Protocol)是一種用于實時數(shù)據(jù)傳輸?shù)木W絡協(xié)議。它通常用于流媒體傳輸和實時通信應用程序。 RTMP 最初由Adobe開發(fā),用于在Adobe Flash播放器和媒體服務器之間進行音視頻傳輸。它使用TCP作為傳輸層協(xié)議,并支持實時音頻、視頻和數(shù)據(jù)的傳輸。 RTMP可以用于直播、視頻會議、在線游戲等應用場景。通過RTMP,用戶可以將音視頻數(shù)據(jù)流從客戶端上傳到媒體服務器,然后其他用戶可以通過相同的協(xié)議從媒體服務器上獲取這些數(shù)據(jù)流。 |
RTSP和RTMP區(qū)別 |
RTSP(Real-Time Streaming Protocol)和RTMP(Real-Time Messaging Protocol)是兩種用于實時流媒體傳輸?shù)膮f(xié)議,它們有以下幾個主要區(qū)別:
總的來說,RTSP更注重流媒體的控制和會話管理,適用于需要靈活控制的場景;而RTMP更注重實時音視頻數(shù)據(jù)傳輸和交互,適用于直播和實時通信等場景。選擇使用哪種協(xié)議應根據(jù)具體需求和平臺支持進行決策。 |
HTTP-FLV |
HTTP-FLV是將流媒體數(shù)據(jù)先封裝成FLV格式,然后通過HTTP協(xié)議傳輸給客戶端,通過HTTP FLV的直播,這里使用了一個HTTP的協(xié)議約定,http 的content-length頭字段如果不存在,則客戶端就會一直接收數(shù)據(jù),直到HTTP連接斷開為止,其流程很簡單,視頻客戶端發(fā)送HTTP請求,不帶content-length頭字段,服務器響應HTTP,并一直發(fā)送FLV的數(shù)據(jù);客戶端接收響應并一直接收數(shù)據(jù)直到連接斷開。 |
Nginx |
Nginx是一個廣泛用于提供靜態(tài)內容、代理和負載均衡的Web服務器。在這個場景中,Nginx用于接收RTSP流并通過HTTP向客戶端提供服務 |
FFmpeg |
FFmpeg是一個強大的開源多媒體框架,允許用戶解碼、編碼、轉碼、復用、解復用、流式處理、過濾和播放各種類型的媒體文件。在這種情況下,F(xiàn)Fmpeg用于解碼RTSP流,并將其轉碼為FLV格式。 |
nginx-http-flv-module |
這是一個專門用于通過HTTP傳輸實時FLV(Flash Video)流的Nginx模塊。它作為Nginx的插件,提供了以流式方式提供FLV文件所需的功能 |
整體是使用nginx搭建HTTP FLV流媒體服務器:
流程:攝像頭rtsp視頻流->rtmp->http-flv.
rtsp轉為rtmp需要借助ffmpeg轉化。
rtmp轉為http-flv需要借助nginx轉化。
nginx-http-flv-module是基于nginx-rtmp-module開發(fā)的,包含nginx-rtmp-module所有功能,因此不能nginx-rtmp-module同時安裝,其編譯安裝步驟與nginx-rtmp-module類似
安裝依賴庫:
nginx編譯依賴 gcc 環(huán)境,如果沒有 gcc 環(huán)境,則需要安裝:
yum -y install gcc gcc-c++
nginx的http模塊使用pcre來解析正則表達式,pcre-devel 是使用 pcre 開發(fā)的一個二次開發(fā)庫,nginx需要依賴這兩個庫,執(zhí)行如下命令:
yum install -y pcre pcre-devel
nginx使用zlib對http包的內容進行gzip,需要安裝此庫:
yum install -y zlib zlib-devel
nginx可能需要支持HTTPS,最好在系統(tǒng)中安裝好openssl,一般系統(tǒng)自帶,可通過如下命令確認:
openssl version
如果安裝了會顯示版本號,如果提示未安裝,執(zhí)行如下命令安裝:
yum install -y openssl openssl-devel
nginx編譯和安裝
下載nginx:
wget http://nginx.org/download/nginx-1.21.6.tar.gz
下載nginx模塊HTTP FLV模塊:
wget https://github.com/winshining/nginx-http-flv-module/archive/v1.2.10.tar.gz
或者是
https://github.com/winshining/nginx-http-flv-module.git
下載zip包也可以
解壓nginx和HTTP FLV模塊:
tar -zxvf nginx-1.21.6.tar.gz
tar -zxvf v1.2.10.tar.gz
nginx編譯和安裝:
./configure --prefix=/usr/local/nginx --add-module=../nginx-http-flv-module-1.2.10
這里配置了–prefix,配置安裝路徑,不安裝到默認路徑,以便安裝文件移植和卸載,可直接拷貝次目錄下的文件到其他電腦運行如果目錄不同,啟動時通過-p指定目錄即可。
make & makeinstall
啟動nginx,驗證是否正確,執(zhí)行命令(注意安裝目錄下的sbin/nginx):
/usr/local/nginx/sbin/nginx
打開瀏覽器輸入:http://10.45.12.29/,注意ip為本機ip,顯示如下內容,即表示安裝成功
修改nginx相關配置支持HTTP FLV
在/home/wangdenuan/nginx/conf/nginx.conf文件中增加:
#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;
chunk_size 4096;
application myapp {
live on;
meta off;#為了兼容flvj.js
hls on;
hls_path /tmp/hls;
hls_fragment 4;
hls_playlist_length 30;
record off;
allow play all;
}
}
}
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;
}
location /hls{
add_header Access-Control-Allow-Origin *;
types {
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
alias /tmp/hls;
expires -1;
}
location /flv {
flv_live on;
chunked_transfer_encoding on; #支持'Transfer-Encoding: chunked'方式回復
add_header 'Access-Control-Allow-Origin' '*'; #添加額外的 HTTP 頭
add_header 'Access-Control-Allow-Credentials' 'true'; #添加額外的 HTTP 頭
}
#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;
}
}
}
其配置與RTMP配置增加了HTTP FLV的URI的配置。
配置完成后,執(zhí)行:/home/wangdenuan/nginx/sbin/nginx -s reload,使得配置生效。
如果是多個rtmp地址
rtmp {
# 第一個轉流地址
server {
listen 1935; #監(jiān)聽的端口號
application hik01 { #自定義的名字
live on;
}
}
# 第二個轉流地址
server {
listen 1936; #監(jiān)聽的端口號
application hik02 { #自定義的名字
live on;
}
}
# 第N個轉流地址
server {
listen xxxx; #監(jiān)聽的端口號
application xxxx { #自定義的名字
live on;
}
}
}
安裝ffmpeg
安裝FFmpeg需要先安裝其依賴:yasm
yum install yasm -y
# 獲取
wget https://ffmpeg.org/releases/ffmpeg-4.1.tar.bz2
# 解壓
tar -xvf ffmpeg-4.1.tar.bz2
# 查看
cd ffmpeg-4.1
# 編譯
./configure
# 安裝
make && make install
如果make報錯,并且和yasm相關,那就配置一下yasm的環(huán)境變量
以上的在使用的過程中會報錯,原因不支持libx264編解碼,所以下面的會比較全面。
下載ffmpeg
官網下載linux版的ffmpeg,官網鏈接:https://ffmpeg.org/
點擊 download 按鈕,如下圖所示:
點擊 more releases 超級鏈接,如下圖所示:
選擇最新穩(wěn)定版FFmpeg 5.0.1,點擊 Download xz tarball 按鈕,如下圖所示:
上傳ffmpeg到VMware虛擬機
使用xftp將源碼包ffmpeg-6.0.tar.xz上傳至linux虛擬機(本教程上傳至/soft/ffmpeg目錄)
解壓ffmpeg壓縮包
# cd /soft/ffmpeg # tar -xvf ffmpeg-6.0.tar.xz
安裝gcc
# yum install -y gcc
安裝yasm編譯器
進入http://yasm.tortall.net/releases/Release1.3.0.html,下載yasm-1.3.0.tar.gz,上傳至/soft/ffmpeg目錄下
或者使用 wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
解壓yasm
# tar -zxvf yasm-1.3.0.tar.gz
進入解壓目錄
# cd yasm-1.3.0
編譯和安裝
# ./configure # make # make install
查看安裝結果
# yasm --version
安裝nasm
下載:wget https://www.nasm.us/pub/nasm/releasebuilds/2.14.02/nasm-2.14.02.tar.gz
解壓
# tar -xvf nasm-2.14.02.tar.gz
進入目錄
# cd nasm-2.14.02
編譯和安裝
# ./configure # make && make install
查看安裝結果
# nasm --version
安裝libx264
https://code.videolan.org/videolan/x264/ 訪問git,然后下載tar.gz
解壓x264
# tar -xvf x264-master.tar.gz
進入解壓目錄
# cd x264-master
編譯和安裝
# ./configure --enable-shared # make && make install
查看安裝結果
# x264 --version
安裝ffmpeg
進入ffmpeg解壓目錄
# cd /soft/ffmpeg/ffmpeg-6.0
指定安裝目錄/soft/ffmpeg
# ./configure --enable-libx264 --enable-gpl --prefix=/soft/ffmpeg
安裝
# make && make install
修改文件/etc/ld.so.conf
# vim /etc/ld.so.conf
添加兩行:
/soft/ffmpeg/lib/ /usr/local/lib/
使修改的文件/etc/ld.so.conf
# ldconfig
查看安裝結果
# ./ffmpeg -version
配置環(huán)境變量
# vim /etc/profile export PATH=$PATH:/soft/ffmpeg/bin
使環(huán)境變量生效
# source /etc/profile
查看ffmpeg版本
# ffmpeg -version
問題1 & 解決辦法
執(zhí)行編譯ffmpeg(./configure --enable-libx264 --enable-gpl --prefix=/soft/ffmpeg)時,異常:
解決辦法1: 下載pkg-config-0.29.2.tar.gz,地址:https://www.freedesktop.org/wiki/Software/pkg-config/
或者直接 wget http://pkgconfig.freedesktop.org/releases/pkg-config-0.29.2.tar.gz 解壓壓縮包
# tar zxvf pkg-config-0.29.2.tar.gz
進入解壓目錄
# cd pkg-config-0.29.2
編譯與安裝
# ./configure --with-internal-glib # make # make check # make install
查看安裝結果
# pkg-config –-version
問題2 & 解決辦法
安裝ffmpeg后,執(zhí)行 ./ffmpeg -version 時異常
解決辦法2: 修改文件/etc/ld.so.conf
# vim /etc/ld.so.conf
添加兩行:
/soft/ffmpeg/lib/ /usr/local/lib/
使修改的文件/etc/ld.so.conf生效
# ldconfig
編譯之后查看目標文件的鏈接情況
# ldd ffmpeg
看到的結果是有幾個庫沒有找到鏈接庫文件, 顯示xxx not found, 但是庫文件是存在的。 見:解決辦法2。
配置ffmpeg環(huán)境變量
# vim /etc/profile
在最后增加兩行
export FFMPEG_HOME=/soft/ffmpeg/ffmpeg-6.0 export PATH=$PATH:$FFMPEG_HOME/bin
使配置生效
# source /etc/profile
啟用ffmpeg進行推流
以下命令需要修改rtsp流地址,rtmp地址以服務器實際配置為準,其他命令暫時復制即可。
-rtsp_transport tcp 是將默認的udp協(xié)議轉為tcp協(xié)議,可以一定程度上解決花屏(丟包)的問題。
# 命令
ffmpeg -rtsp_transport tcp -i [rtsp流地址] flv -r 25 -s 1920*1080 -an [轉換后的rtmp流地址]
# 實例
ffmpeg -rtsp_transport tcp -i rtsp://admin:123456@192.168.00.00 -f flv -r 25 -s 1920*1080 -an rtmp://localhost:1935/hik01/
# 后臺運行,在命令前加nohup,后加 &
nohup ffmpeg -rtsp_transport tcp -i rtsp://admin:123456@192.168.00.00 -f flv -r 25 -s 1920*1080 -an rtmp://localhost:1935/hik01/ &
打開命令提示行,輸入如下ffmpeg命令,推送rtmp視頻流到rtmp服務器,這里假設rtmp服務器IP為:10.45.12.29
ffmpeg -re -i rtsp://admin:zxm10@@@@10.45.12.141/h264/ch1/main/av_stream -vcodec libx264 -acodec aac -f flv rtmp://10.45.12.29:1935/myapp/mystream
后臺運行
nohup ffmpeg -re -i rtsp://admin:zxm10@@@@10.45.12.141/h264/ch1/main/av_stream -vcodec libx264 -acodec aac -f flv rtmp://10.45.12.29:1935/myapp/mystream &
利用VLC等視頻工具驗證flv流是否可用,VLC下載可自行百度
用VLC播放如下串流:http://10.45.12.29/flv?port=1935&app=myapp&stream=mystream,驗證HTTP FLV是否能播放成功
文章來源:http://www.zghlxwxcb.cn/news/detail-601532.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-601532.html
到了這里,關于使用nginx和ffmpeg搭建HTTP FLV流媒體服務器(攝像頭RTSP視頻流->RTMP->http-flv)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!