Raspberry Pi 到网站流

Raspberry Pi 到网站流

有无数的指南描述如何从 Raspberry Pi 传输数据到某个地方,我不知何故迷失了方向,并且厌倦了尝试不同的配置。

我的资源:

  1. 树莓派相机 v2
  2. 树莓派 v3
  3. OpenWRT路由器
  4. 20 Mbit 上传光纤连接,带静态 IP
  5. 廉价 VPS,具有静态 IP (100/100 MBit)
  6. 一些常规的 Linux 技能。

我的目标:通过网络浏览器为一些客户获取来自摄像头的(公开)实时流。

这应该足以实现相当好的直播质量,但事实证明并不是那么容易。

首先,我尝试了 raspicam、netcat、mplayer——它们质量很差、不稳定,并且需要客户端使用二进制 mplayer。

然后我发现了 uv4l,它还不错,但并不完美。我要么通过 h264 二进制 mplayer 获得高质量流,要么通过 mjpeg 获得 1-2 fps 流,我使用了一些技巧将其嵌入到网站上的 iframe 中……它工作了一段时间,但它消耗了整个网络,对 CPU 的要求很高。

网站上的嵌入还不够完美。后来我遇到了 ffmpeg 解决方案。我目前的参数是:

ffmpeg -f video4linux2 -input_format h264 -video_size 1920x1080 -framerate 40 -i /dev/video0 -vcodec copy -codec:a copy -f ssegment -segment_list playlist.m3u8 -segment_list_type hls -segment_list_size 10 -segment_list_flags +live -segment_time 40 -sc_threshold 0 -segment_wrap 30 out%03d.ts

输出是 VPS 上的 NFSv4 挂载目录,服务器上有 apache2 和 flowplayer。

运行良好,但可以更好。

优点:

  1. 无论客户端数量多少,本地连接的负载都相同
  2. 我从 Raspberry Pi 硬件编码中获益
  3. 我获得了 40 fps、全高清

缺点:

  1. 由于段正在终止,因此需要通过 NFS 将其写入 VPS - 流因此阻塞。根据段的大小,流会冻结 3-15 秒(通过 NFS 写入文件所需的时间?)。
  2. 当 Pi 上传数据段时,网络上行变得饱和
  3. 流媒体中有几个片段(一两分钟)延迟

您建议至少采取什么措施来应对 1 和 2?我原本想“以另一种方式”执行 NFS,但不断写入 microSD 可能会损坏我的卡。

服务器上的 ffmpeg 是一个选项,但我可能没有足够的 CPU 能力来动态地对其进行转码。

我并不期待一个明确的、“正确且唯一的答案”,但会很感激能得到一些想法。

相关内容