Nginx

為什麼不能用ffplay拉破折號流?

  • January 19, 2021

nginx.conf 很簡單:

sudo cat /usr/local/nginx/conf/nginx.conf    
worker_processes  1; 
error_log logs/error.log error;
events {
   worker_connections  4096;
}

rtmp { 
   server { 
       listen 1935; 
       application live { 
           live on; 
           dash on; 
           dash_path /mnt/dash; 
           dash_fragment 15s; 
       } 
   } 
} 

http { 
   server { 
       listen 80; 
       location /dash { 
           root /mnt; 
       } 
   }

   types {
       text/html html;
       application/dash+xml mpd;
   } 
}

我將網路攝像頭推到 127.0.0.1。

output="rtmp://127.0.0.1:1935/live/sample"
ffmpeg -f v4l2 -video_size 640x480 -i /dev/video0 -c:v libx264 -f flv $output

使用 rtmp 協議拉取它:

ffplay  rtmp://127.0.0.1:1935/live/sample

成功了!

用破折號協議拉它:

ffplay  http://127.0.0.1/dash/sample.mpd

它遇到一個錯誤:

http://127.0.0.1/dash/sample.mpd: Invalid data found when processing input

如何解決?

我的作業系統:debian9。

ffplay -formats |& grep "DASH Muxer"
 E dash            DASH Muxer

您需要在ffplay啟用 DASH Demuxing 的情況下重新編譯。可能已經為您的作業系統提供了啟用 DASH Demuxing 的預製包,但由於它不是絕對確定的並且您沒有指定您正在使用的作業系統,我將描述如何在ffplay啟用 DASH Demuxing 的情況下進行建構手動。

複製 ffmpeg 儲存庫:

git clone --depth 1 https://git.ffmpeg.org/ffmpeg.git ffmpeg

切換到 ffmpeg 目錄:

cd ffmpeg

使用所需參數執行 ./configure 腳本:

./configure --prefix=$HOME/ffmpeg-install --enable-demuxer=dash --enable-libxml2

建構並安裝 ffplay 到$HOME/ffmpeg-install

make -j$(nproc) install

在我的機器上只用了 4 分鐘。確保新建構的 ffmpeg 帶有 DASH Demuxing 支持:

$ ~/ffmpeg-install/bin/ffplay -formats |& grep "DASH Muxer"
DE dash            DASH Muxer

使用它而不是股票 ffplay:

~/ffmpeg-install/bin/ffplay http://127.0.0.1/dash/sample.mpd

參考資料:這個答案

引用自:https://unix.stackexchange.com/questions/629311