nginx流媒體服務器 直播推流 基於ffmpeg qt openCV

 

音視頻推流同步

類圖

協議

傳輸協議 : 長連接(斷開重連)  短連接(三次握手,開銷大)

Rtmp 

優點:實時協議,收到數據,立刻轉發,延時小,主流CDN支持             

缺點:1.基於TCP協議相對UDP開銷大(TCP面向字節拼接,頭部複雜) 2.有序校驗次序 3.TCP每發送的數據包,對方都要確認

UDP 是一個面向報文(報文可以理解爲一段段的數據)的協議。意思就是 UDP 只是報文的搬運工,不會對報文進行任何拆分和拼接操作,也會校驗包對不對,但不管是否收到。因此 1.無連接 2.不可靠 3.沒有擁塞控制

  • 在發送端,應用層將數據傳遞給傳輸層的 UDP 協議,UDP 只會給數據增加一個 UDP 頭標識下是 UDP 協議,然後就傳遞給網絡層了
  • 在接收端,網絡層將數據傳遞給傳輸層,UDP 只去除 IP 報文頭就傳遞給應用層,不會任何拼接操作

 HLS :數據包一個一個發,延時大

Rtmp協議類型

  1. 工作在TCP之上的“明文協議”(抓包時,可抓出整個通信協議的過程,https就是加密的,但也可破解漏洞),使用端口1935
  2. RtmpT封裝在Http請求之中,可穿越防火牆
  3. RtmpS封裝RtmpT,但使用的是Https連接

握手:不僅TCP三層握手,本身Rtmp也有握手

推流

準備工作以下爲centOS

yum install wget cmake

yum install openssl-devel  #頭文件和靜態庫

ubuntu下會報錯No package libssl-dev available. 

wget https://codeload.github.com/j0sh/crtmpserver/zip/centosinit
unzip centosinit
cd crtmpserver-centosinit/
cd builders/cmake
cmake .                #在當前路徑生成Makefile
make                   #編譯

運行啓動程序

#傳遞參數是這個lua的腳本(所有的參數和配置都可以在這個lua腳本中執行)
#音視頻lua性能很好,很好嵌入C++
./crtmpserver/crtmpserver ./crtmpserver/crtmpserver.lua

這樣就啓動成功了

下載ffmpeg https://ffmpeg.zeranoe.com/builds/

解壓後可以把它.exe的路徑放入環境變量path中,這樣在任一位置即可訪問

    

ffmpeg -i zhangyi.flv -f flv rtmp://IP地址/live

nginx流媒體服務器搭建

sudo apt-get install libssl-dev
sudo apt-get install libpcre3 libpcre3-dev 
sudo apt-get install openssl libssl-dev  
sudo apt-get install zlib1g-dev  
這些都在ubuntu下,centos找對應的就行

下載nginx並配置rtmp模塊

wget http://nginx.org/download/nginx-1.13.3.tar.gz
tar -zxvf nginx-1.13.3.tar.gz
git clone https://github.com/arut/nginx-rtmp-module.git

 

./configure --add-module=/home/jiangzongqing/project/nginx_server/nginx-rtmp-module

所用到的庫

然後make    ->     make install           默認都安裝在/usr/local/nginx下

 別輕易使用rm /usr/local/nginx -r 在公司裏可能會把有用的web等其他搭建的刪掉

在/usr/local/nginx/sbin/下輸入

./nginx

啓動 

輸入IP地址

 直播

快速進入

cd /usr/local/nginx/conf
vim nginx.conf

#RTMP服務
rtmp
 {
         server
         {
                 listen 1935;
                 chunk_size 4096;   #塊大小
                 application live   #直播名字配置
                 {
                          live on;   #開啓
                 }
         }
 }

退掉進程

pkill nginx

 仍然端口占用

之前開啓的srs 服務器佔據1935端口

pkill srs

在windows cmd上 ,我的下載的視頻zhangyi.flv就放在youku_dowload文件夾下

成功推流

這裏的mp4格式仍需轉成flv,清晰度會差一點,可以copy

ffmpeg -i zhangyi.flv -c copy -f flv rtmp://IP地址/live

VLC播放效果 (直播:即推流中拉流纔可播放)

通過網頁查看直播推流的狀態

在nginx-rtmp-module下就有一個stat.xsl

root路徑 -> pwd複製路徑

關閉重啓

輸入http://IP地址:8090/stat

每刷新一下,數據都會不同

用ffmpeg自帶的ffplay播放

#nobuffer沒有緩衝
ffplay rtmp://IP地址/live -fflags nobuffer

代碼驅動這些推流,拉流操作

使用ffmpeg SDK推流

  • 播放文件推流
  • 使用瀏覽器flash播放直播
  • 大華海康相機rtsp推流

 開發環境

  • ffmpeg 64 dev share
  • 使用vs2015編譯工具
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章