首页 > 解决方案 > 是否可以通过 MPEG-DASH 流式传输 MJPEG 内容?

问题描述

我正在尝试使用 ffmpeg 在破折号上重新传输 MJPEG 流。

我有一个 ESP32 摄像头模块,它在 192.168.2.128:81/stream 处输出 MJPEG 直播(此处为 Arduino 代码)。我可以直接在浏览器中打开这个流并实时观看视频,但是当我需要多客户端解决方案时,相机一次只允许一个客户端。

什么不起作用

我目前正在尝试实施的解决方案是使用运行 apache 和 ffmpeg 的单独服务器(Raspberry Pi)使用 DASH 重新流式传输 MJPEG 内容:
ffmpeg -re -i http://192.168.2.128:81/stream -strict -2 -an -c:v copy -b:v 2000k -f dash -window_size 4 -extra_window_size 0 -min_seg_duration 2000000 -remove_at_exit 1 /var/www/html/out.mpd

在服务器上执行此命令时,我没有收到任何错误。然后我使用这个ffmpeg-dash.html在浏览器中显示视频。不幸的是,这段代码失败了,在 Firefox 中控制台报告错误:

[72][Stream] No streams to play.

其次是:

Cannot play media. No decoders for requested formats: video/mp4;codecs="mp4v.6c";width="640";height="480"

有什么作用

令我困惑的是,如果我用示例 .mkv 文件替换 MJPEG 直播 url,上面的代码可以正常工作,所以如果我使用
ffmpeg -re -i /var/www/html/video.mkv -strict -2 -an -c:v copy -b:v 2000k -f dash -window_size 4 -extra_window_size 0 -min_seg_duration 2000000 -remove_at_exit 1 /var/www/html/out.mpd

我可以使用前面提到的 ffmpeg-dash.html 文件毫无问题地查看直播示例视频 (video.mkv)。此外,ffmpeg 似乎可以毫无问题地读取 MJPEG 直播,因为

ffmpeg -t 10 -i http://192.168.2.128:81/stream -filter:v fps=15 -c:v flv test.flv

成功返回 10 秒的直播片段。

所以对我来说,问题似乎在于我如何将两者结合起来。我错过了什么?甚至可以通过 MPEG-DASH 流式传输 MJPEG 内容吗?(我是新手,提前为我的无知道歉)

标签: ffmpegesp32live-streamingmpeg-dashmjpeg

解决方案


推荐阅读