ffmpeg转换流不保存直接推送到前端浏览器
时间: 2023-10-06 13:09:28 浏览: 87
你可以使用 WebSocket 将转换后的流实时推送到前端浏览器。具体步骤如下:
1. 在客户端创建一个 WebSocket 连接,连接到服务器。
2. 在服务器端,使用 ffmpeg 将视频转换为指定格式,并将转换后的数据通过 WebSocket 发送给客户端。
3. 在客户端,监听 WebSocket 的消息,接收转换后的数据,并将数据渲染到网页上。
下面是一个简单的 Node.js 示例代码:
```javascript
const WebSocket = require('ws');
const spawn = require('child_process').spawn;
const server = new WebSocket.Server({ port: 8080 });
server.on('connection', function connection(ws) {
const ffmpeg = spawn('ffmpeg', [
'-i', 'input.mp4',
'-f', 'mpegts',
'-codec:v', 'mpeg1video',
'-s', '640x360',
'-b:v', '800k',
'-r', '30',
'-',
]);
ffmpeg.stdout.on('data', function(data) {
ws.send(data);
});
ws.on('close', function() {
ffmpeg.kill();
});
});
```
在上面的代码中,我们使用 WebSocket 创建了一个服务器,并在客户端连接后,使用 ffmpeg 将 `input.mp4` 转换为 MPEG-TS 格式,并将转换后的数据通过 WebSocket 实时发送给客户端。
在客户端,我们可以使用 JavaScript 代码监听 WebSocket 的消息,并将数据渲染到网页上:
```javascript
const video = document.querySelector('video');
const ws = new WebSocket('ws://localhost:8080');
ws.addEventListener('message', function(event) {
const blob = new Blob([event.data], { type: 'video/mp2t' });
const url = URL.createObjectURL(blob);
video.src = url;
});
```
在上面的代码中,我们监听 WebSocket 的 `message` 事件,接收转换后的数据,并将数据转换成 Blob 对象,然后使用 `URL.createObjectURL()` 方法将 Blob 对象转换为 URL,最后将 URL 赋值给 `<video>` 标签的 `src` 属性,实现实时播放视频的效果。
阅读全文