關於docker容器中使用ffmpeg拉流rtsp報錯問題

一、問題背景

最近有個業務需求用到node中間層使用ffmpeg對rtsp流轉碼成MP4推給前端,本地開發基本完成並且能完美運行,但是通過docker部署時發現ffmpeg不能正常使用,根據Log一步步排查,發現可能時端口以及協議問題。

docker容器內環境:

  • node v12.0
  • Debian GNU/Linux 9
  • ffmpeg 3.2.10-1~deb9u1

二、報錯問題

通過排查日誌,發現在docker中試用ffmpeg請求rtsp流時,UDP端口時無法返回的,報錯如下:

[rtsp @ 0x5650696e2580] UDP timeout, retrying with TCP
[rtsp @ 0x5650696e2580] method SETUP failed: 454 Session Not Found
[rtsp @ 0x5650696e2580] Could not find codec parameters for stream 0 (Video: h264, none): unspecified size
Consider increasing the value for the 'analyzeduration' and 'probesize' options

三、解決方案

  • 嘗試創建容器時指定暴露一個UDP端口,但依然報錯,問題原因未知

  • 強制將ffmpeg對rtsp拉流時試用tcp協議,目前有效,加上-rtsp_transport tcp參數

ffmpeg -rtsp_transport tcp -i 'rtsp://admin:[email protected]:554/cam/realmonitor?channel=17&subtype=0' -an -c:v copy -f mp4 -movflags +frag_keyframe+empty_moov+default_base_moof pipe:1

但是性能上是存在問題的,畢竟tcp需要多次握手,具體UDP爲什麼無法使用,問題還在排查中。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章