这是我想出的通过摄像机进行实时流式传输的方法。它很粗糙,但适用于所有浏览器。
我不知道您是如何访问树莓派摄像头的,但下面的示例显示了如何访问 linux 中的内置网络摄像头:
使用 ffmpeg 将您的相机编码为更新的图像文件:
ffmpeg -analyzeduration 0 -i /dev/video0 -update 1 -q 1 -r 5 -y /video/feed/1.jpg
用 php 读取图像文件并在更改时输出内容:
<?php
session_start();
session_write_close();
$imgFile = '/video/feed/1.jpg';
$img = (file_get_contents($imgFile));
$lastImgSize = $_SESSION['imageSize'];
while (true) {
usleep(20000);
$img = (file_get_contents($imgFile));
$imgSize = strlen($img);
if ($lastImgSize != $imgSize) {
break;
}
}
session_start();
header("Content-type: image/jpg");
$_SESSION['imageSize'] = $imgSize;
echo $img;
exit;
用 javascript 重新加载图像,php 将在可用时提供一个新图像:
<img id="feed" src>
<script>
img = new Image
function f() {
img.src = "img.php?rnd=" + Date.now();
img.onload = function() {
feed.src = img.src;
setTimeout(function() {
f();
}, 50);
};
img.onerror = function() {
setTimeout(function() {
f();
}, 50);
};
}
f();
</script>
如果您正在寻找更高级的东西:
看看flowplayer,它支持来自 rtmp / hls 源的实时流,两者都可以用 ffmpeg 编码。
或者更喜欢 Dashcast 一个 linux / windows 流媒体服务,它以 html5 mpeg-DASH 格式编码直播流,目前支持 ie 和 chrome,firefox 支持是 on the way