Nginx
為什麼不能用ffplay拉破折號流?
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
參考資料:這個答案