手把手教你使用ffmpeg及nginx實現直播、點播、安防監控

  • 2019 年 11 月 11 日
  • 筆記

搭建思路:

1. 採用nginx+nginx-rtmp-module搭建rtmp服務端

2. ffmpeg作為推送端,將影片流轉為adobe flash flv格式封裝後推送到nginx rtmp服務

Nginx服務端:

nginx下載:

nginx-rtmp-module下載:

編譯安裝:

添加rtmp配置:

啟動服務:

配置Nginx流媒體伺服器

nginx伺服器有一個配置文件叫做nginx.conf ,這個文件默認是位於/usr/local/nginx/conf 目錄下。 我將這個文件改成這樣:

其中rtmp就是rtmp伺服器模組,埠是1935,application我理解為一個路徑。可以通過訪問rtmp://localhost/videotest 來訪問videotest這個資源。live on 表示這是實時的傳輸,這不同於點播,點播就好比我在某影片網站上想看一個影片,無論我什麼時候去點擊,它會從頭開始播放。而實時傳輸(直播),就是好比看電視,我在19:20去打開電視(打開直播路),影片不會從頭開始播放,而是從當前(19:20)的影片數據開始播放。

除了配置rtmp伺服器,還可以配置HTTP和HTTPS伺服器。這方面我還沒有深入去了解。更多關於nginx伺服器和其配置方式,請閱讀nginx官網 。

安裝ffmpeg

首先安裝h264 影片編解碼庫:

sudo apt-get update

sudo apt-get install libx264-dev

安裝ffmpeg ,依次輸入以下命令:

wget http://ffmpeg.org/releases/ffmpeg-3.0.9.tar.bz2

tar jxvf ffmpeg-3.0.9.tar.bz2

cd ffmpeg-3.0.9/

sudo ./configure –enable-shared –enable-pthreads –enable-gpl –enable-avresample –enable-libx264 –enable-libtheora –disable-yasm

動態

sudo ./configure –disable-shared –enable-static –enable-pthreads –enable-gpl –enable-avresample –enable-libx264 –enable-libtheora –disable-yasm

靜態

如果出現錯誤 ,可能需要安裝sudo apt-get -y install libtheora-dev

sudo make

sudo make install

其中sudo make 這個過程會比較久。安裝完ffmpeg之後,在命令行中輸入ffmpeg:

如果出現找不到庫,說明是使用動態編譯,庫的路徑無法找到。

因為這裡我重新用靜態命令編譯一遍,然後就成功了。

推流與拉流

配置好nginx.conf之後,重新啟動sudo /usr/local/nginx/sbin/nginx

然後在命令行中使用 ffmpeg 進行推流:

ffmpeg -re -i /home/hjh/nginx/video.mp4 -vcodec copy -acodec copy -b:v 800k -b:a 32k -f flv rtmp://localhost:1935/videotest/test

/home/hjh/nginx/video.mp4自己需要播放的文件。

在本機器上用vlc打開串流rtmp://localhost:1935/videotest/test如圖

這裡有一個bug,區域網中其他電腦訪問伺服器需要使用: rtmp://10.150.90.230:1935/videotest/test 10.150.90.230 表示伺服器的IP地址,並且需要加入埠號,否則只能在本機伺服器上播放,其他電腦如法播放。