![为什么无法用 ffplay 拉取 dash 流?](https://linux22.com/image/186423/%E4%B8%BA%E4%BB%80%E4%B9%88%E6%97%A0%E6%B3%95%E7%94%A8%20ffplay%20%E6%8B%89%E5%8F%96%20dash%20%E6%B5%81%EF%BC%9F.png)
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
成功了!
使用 dash 协议拉取它:
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
答案1
您需要ffplay
在启用 DASH Demushing 的情况下重新编译。可能已经为您的操作系统提供了启用了 DASH 解复用功能的预制软件包,但由于它不是绝对确定的,并且您没有指定您正在使用的操作系统,因此我将描述如何在启用了ffplay
DASH 解复用功能的情况下进行构建手动。
克隆 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 Demushing 支持:
$ ~/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
参考:这个答案