Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将带有nodejs的raspivid输出流到浏览器_Javascript_Node.js_Raspberry Pi_Video Streaming - Fatal编程技术网

Javascript 将带有nodejs的raspivid输出流到浏览器

Javascript 将带有nodejs的raspivid输出流到浏览器,javascript,node.js,raspberry-pi,video-streaming,Javascript,Node.js,Raspberry Pi,Video Streaming,我正在尝试将raspivid的输出流式传输到带有nodejs的web应用程序。问题是我正在传输的数据无法显示。这是节点服务器的代码: const bodyParser = require('body-parser'); const express = require('express'); const app = express(); const http = require('http').createServer(app); const io = require('socket.io')(h

我正在尝试将raspivid的输出流式传输到带有nodejs的web应用程序。问题是我正在传输的数据无法显示。这是节点服务器的代码:

const bodyParser = require('body-parser');
const express = require('express');
const app = express();
const http = require('http').createServer(app);
const io = require('socket.io')(http);
const spawn = require('child_process').spawn;

app.use(express.static('public'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
  extended: true
}));

const raspivid = spawn(
  'raspivid',
  ['-t', '0', '-w', '300', '-h', '300', '-hf', '-fps', '20', '-o', '-']);

raspivid.stdout.on('data', (data) => {
  var base64Image = data.toString('base64');
  io.emit('videostream', base64Image);
});

http.listen(3000, function(){
  console.log('listening on *:3000');
});
对于web应用程序,我尝试了很多方法,我尝试在图像标记和视频标记中显示流,因此我使用以下标记之一:

<video id="video" width="400" height="300"></video>
<img id="img" src="">

有人能告诉我如何在浏览器中显示流或为我指出正确的方向吗?提前感谢

我无法找到简单的解决方案。 解决此问题的一种方法是使用ffmpeg或MJPEG streamer将raspivid的输入流作为视频流,可在浏览器中显示。有关如何实现此目的的详细信息,请参阅以下文章:

或者,您可以在一小段时间内拍摄照片,然后以流的形式发送,如下所述:


我希望上面提到的其中一个解决方案对其他人有用:)

我无法找到简单的解决方案。 解决此问题的一种方法是使用ffmpeg或MJPEG streamer将raspivid的输入流作为视频流,可在浏览器中显示。有关如何实现此目的的详细信息,请参阅以下文章:

或者,您可以在一小段时间内拍摄照片,然后以流的形式发送,如下所述:

我希望上述解决方案之一对其他人有用:)

var socket = io(),
  video = document.getElementById('video'),
  img = document.getElementById('img'),
  vendorUrl = window.URL || window.webkitURL;

socket.on('videostream', function(stream) {
  var contentType = 'image/png';
  img.src = ' data:image/png;base64,' + stream;//op1 doesn't work
  var blob = b64toBlob(stream, contentType);
  img.src = vendorUrl.createObjectURL(blob);//op2 doesn't work
  video.src = vendorUrl.createObjectURL(blob);//op3 doesn't work
  video.play();
});