datagrid 重载本地数据_音视频系列3:使用ffmpeg + nginx搭建本地转发服务器
本文與csdn博客同步:https://blog.csdn.net/Hanghang_/article/details/104893135,歡迎關注,點贊,評論。
前言
音視頻系列:
HectoorZ:音視頻系列1:ffmpeg+rtmp拉流?zhuanlan.zhihu.comHectoorZ:音視頻系列2:ffmpeg將H.264解碼為RGB?zhuanlan.zhihu.com有興趣的朋友可以看看。
上一節我們采用ffmpeg拉取芒果臺視頻,并處理成rgb,奈何芒果臺不給力,拉流卡卡的,這樣就不知道是我代碼的問題,還是芒果臺服務器的問題了,為了杜絕這個問題發生,我們這一節在本地搭建nginx服務器,用ffmpeg進行本地推流,再用自己的代碼和VLC播放器進行PK測試。
為啥要這么做,因為本地推流,本地接收,可以保證推出來的流肯定是流暢的,這樣自己代碼出了問題(比如很卡)那么就能夠第一時間知道,等于排除了服務器的問題。
實際操作
nginx+nginx-rtmp-module安裝
nginx下載地址:http://nginx.org/en/download.html
我自己是下載了Mainline version,下載完進行解壓,會發現有個configue可執行文件,等下我們要用它生成Makefile文件。
然后這是編譯nginx的參數說明:http://nginx.org/en/docs/configure.html
nginx-rtmp-module下載:直接用git clone命令 git clone https://github.com/arut/nginx-rtmp-module.git
由于我們只需要實現推流,而不需要其他的module和環境,所以編譯的時候,我們只需要安裝nginx-rtmp-module,以及openssl證書。
首先我們看看openssl,在哪。
查看openssl位置命令:
which openssl顯示:/usr/local/openssl/bin/openssl
去掉bin/openssl,在nginx目錄下,使用configure指令:
./configure --with-openssl=/usr/local/openssl/ --add-module=nginx-rtmp-module注意,--with-openssl=填寫剛剛獲取的openssl路徑,去掉bin/openssl。 --add-module=填寫nginx-rtmp-module的路徑。
運行發現有問題:
'/usr/local/openssl/.openssl/include/openssl/ssl.h' failed說是沒發現.openssl/目錄,修改nginx目錄下,auto/lib/openssl/conf文件 ,修改成正確的路徑。
CORE_INCS="$CORE_INCS $OPENSSL/include"CORE_DEPS="$CORE_DEPS $OPENSSL/include/openssl/ssl.h"CORE_LIBS="$CORE_LIBS $OPENSSL/lib/libssl.a"CORE_LIBS="$CORE_LIBS $OPENSSL/lib/libcrypto.a"再運行:
./configure --with-openssl=/usr/local/openssl/ --add-module=nginx-rtmp-module make -j2 sudo make install安裝完成。
配置nginx的rtmp應用
sudo vim /usr/local/nginx/conf/nginx.conf修改nginx.conf,增加rtmp的application
rtmp {server {listen 1935;chunk_size 4096;application rtmplive {live on;max_connections 1024;allow publish all; # control access privilegeallow play all; # control access privilege}} }其中: application的名字為rtmplive; 最大可連接數為1024; chunk_size分開數據大小為4096; 監聽的端口為1935。
打開nginx服務,(注意要使用sudu,不然不夠權限)
sudo /usr/local/nginx/sbin/nginx報錯,bind() to 0.0.0.0:80 failed (98: Address already in use)
原因是nginx已經啟用,使用ps -e | grep nginx查看有無啟動nginx服務,有的話,可以先sudo kill -9 PID號
再啟動nginx:
sudo /usr/local/nginx/sbin/nginx或者你也可以重載nginx程序:
/usr/local/nginx/sbin/nginx -s reload到這里nginx就配置好了。
啟動ffmpeg推流
ffmpeg -re -i sss.mp4 -c copy -f flv rtmp://localhost:1935/live/rtmplive出現錯誤:
rtmp://localhost:1935/live/mytv: Input/output error實際上是地址寫錯了。 重新來:
ffmpeg -re -i sss.mp4 -c copy -f flv rtmp://localhost:1935/rtmplive本地推流大功告成。
拉流測試
終于到了PK的時候了,VLC播放器和我的代碼(詳見上一節)進行PK,究竟勝利會花落誰家呢?
我覺得,應該是我的代碼會贏。
VLC打開網絡串流,輸入rtmp://localhost:1935/live/mytv: Input/output error 我的代碼也修改rtmp地址,然后開啟。
測試半小時,VLC落后一大截,于是我重開VLC串流,發現,還是慢。
兩小時過去了,代碼仍在跑中,沒有崩潰,速度仍比VLC快,我估摸著大概快個幾秒鐘。
測試效果如下圖:左側為我的代碼,右側為VLC播放器,使用OPENCV顯示,可以看到左側已經寫了下面一行,而右側還沒寫,顯然慢于左側。
所以,最后勝利歸我,嘿嘿。
好了,本節到這里就完了,做好這些基本工作,接下來我可能會修改上一節中的代碼,使其搭配最新的api,而不再警告,要么就是引入ROS系統。
如果我的文章對你有幫助,歡迎點贊、評論、關注。總結
以上是生活随笔為你收集整理的datagrid 重载本地数据_音视频系列3:使用ffmpeg + nginx搭建本地转发服务器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 系统服务器如何给指定磁盘扩容_刀片服务器
- 下一篇: 《容器技术系列》一1.4 Docker运