为什么无法用 ffplay 拉取 dash 流?

为什么无法用 ffplay 拉取 dash 流?

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 解复用功能的预制软件包,但由于它不是绝对确定的,并且您没有指定您正在使用的操作系统,因此我将描述如何在启用了ffplayDASH 解复用功能的情况下进行构建手动。

克隆 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

参考:这个答案

相关内容