前端Web瀏覽器基於Flash如何實時播放監控視頻畫面(三)之使用ffmpeg‘推流’


 [關鍵字:前端瀏覽器如何播放RTSP流畫面 | 前端瀏覽器如何播放RTMP流畫面 | Web瀏覽器播放攝像頭畫面]

本片文章只是起到拋磚引玉的作用,能從頭到尾走通就行,並不做深入研究。為了讓文章通俗易懂,盡量使用白話描述。(或參考基於H5的新方案)

0x001: 下載ffmpeg

開源免費的推流軟件有很多,這里以 ffmpeg 為例。ffmpeg沒有可視化界面,如果覺得ffmpeg不好用,當然也可以使用OBS,這款軟件有操作界面,比較友好。


下載后解壓,無需安裝可直接使用,至於環境變量 配不配 都可以,區別是配了以后在使用CMD命令窗口調用ffmpeg時會方便一點,我這里沒配。

0x002: 單元測試推流

為了減少出錯概率,容易排查錯誤原因,在上一步驟的流媒體服務器環境搭建完成后 '首次推流時' 需要驗證這個服務器的RTMP模塊是否能正常訪問。

將本地視頻推流至RTMP流媒體服務器,找到ffmpeg.exe所在的文件,鼠標右鍵 '在此處打開命令窗口',敲入:

1 ffmpeg -re -i "C:\Users\Administrator\Desktop\test.mp4" -f flv "rtmp://localhost:1935/mytv/test"

 


其中"C:\Users\Administrator\Desktop\test.mp4"為視頻文件所在磁盤的目錄,"rtmp://localhost:1935/mytv/test"為RTMP協議地址。


這里重點解釋一下RTMP地址,rtmp為協議名稱,localhost為協議地址,1935為開放端口號,mytv為nginx根目錄/conf/nginx.conf內的rtmp模塊application 后的 mytv(可以根據自己的需求改,但要互相對應),test為自定義名稱,可以理解為房間ID,如rtmp://localhost:1935/mytv/test1或rtmp://localhost:1935/mytv/1001

之后敲回車,會輸出以下信息,黃色圈起來的是當前ffmpeg配置信息和視頻的元數據信息以及相應的轉碼信息,如下圖


若推流成功,此CMD窗口內紅色方框圈起來的的INFO會一直不停的輸出滾動。如下圖這樣:


使用VLC播放此地址,觀察是否能正常播放,下圖左側在實時推流,下圖右側在實時播放(若不能播放,說明上一步驟的流媒體服務器環境搭建的有問題,需要自己排查)


0x003: 正式推流

這里以海康監控RTSP流為例來演示推流

1 ffmpeg -i "rtsp://admin:admin123@10.77.59.2:554/h264/ch1/sub/av_stream" -vcodec copy -acodec copy -f flv "rtmp://localhost:1935/mytv/test1"

推流成功后,同樣可以使用VLC播放此地址,觀察是否能正常播放。

經測試,生產環境下的ffmpeg,在保證RTSP流正規且穩定的前提下,使用時其實還是挺穩定的。
下圖是使用ffmpeg推海康的RTSP流至搭建的RTMP服務器,可以看出,推了大約307小時后停止了,原因是廠房斷電導致RTSP流不通導致。


0x004: 遺留問題

因為要轉碼推流的監控比較多,8個監控想要使用ffmpeg全部推流到RTMP服務器那就得需要開8個CMD窗口,這樣的壞處就是在系統的任務欄占據了比較大的空間。將來監控的數量還有可能會擴充,16個,32個......,那這樣以來使用 CMD命令窗口的方式 用ffmpeg來推流的方案 似乎有點不可行。

關於這個遺留問題,暫且解決辦法是 通過設置任務欄進行相同程序合並隱藏,如果你有什么更好的解決方案,歡迎指出,不吝賜教,THANKS!

 

------------------------------------------------------------ 2020-06-01 00:07:46 ------------------------------------------------------------

關於上邊這個遺留問題的解決有幾個,如下

  • 根據業務需求推合並流,如甲方需要一個可見光配套一個熱成像,那么可以2個合並后再推,這樣就是4個CMD窗口。如果沒需求可直接8個合並1個流后再推,或4個合並推2個,等等。
  • 上邊的方案雖然可行,但還是用的CMD窗口的方式,如果技術條件允許,完全可以用程序控制FFmpeg去推流。寫成簡易化API,供平台隨時調用。如開啟、停止、監測等等
  • 當然對於一個不了解音視頻編解碼的普通程序員來說做到步驟2就已經可以了。如果你了解音視頻編解碼還可以直接使用FFmpeg官方提供的外部鏈接庫來推流。


0x005: 下一步


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM