ffmpeg - 是否可以通过 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 内容吗?(我是新手,提前为我的无知道歉)
解决方案
推荐阅读
- python - 如何在 PyOpenGL 中将纹理应用于金字塔
- sql - SQL 根据父状态对项目进行分类
- c - 如何从文本中插入单词并通过 bst 跟踪词频?
- javascript - route.params 从不更新反应导航 v5
- java - Mondrian 尝试奇怪地优化 Segment.load 导致部分或完全空的结果
- powershell - 从 Proxyaddresses powershell 获取主 SMTP
- reactjs - 我如何在路径中使用参数作为道具反应路由器 dom v6
- database - EntityFramework 一对多关系重复插入问题
- python - Pandas 跨组删除重复项
- vba - 如何选择第二行到最后一行Word VBA的范围