【问题标题】:how to make node js online video streaming如何制作node js在线视频流
【发布时间】:2019-02-03 05:19:51
【问题描述】:

这是我的节点 js 代码

socket.on('stream',()=>{
        let  readStream = fs.createReadStream(__dirname+'/video.mp4');
        readStream.on('data',(chunk)=>{

           socket.emit('stream-chunk',chunk);
            //res.render("hello");
        });
    });

这里是客户端

            let chunkArray = [];
            socket.on('stream-chunk', (chunk) => { 
                    chunkArray.push(chunk);
                    //console.log(chunk);
                    //var url = URL.createObjectURL(chunk);
                    //alert(url);
                    $("#video").attr("src",url);

            });

如您所见,我只想从节点服务器获取视频文件并使用缓冲区对其进行流式传输.. 到目前为止,这些块作为 ArrayBuffers 来到客户端。但我不知道如何将这些传入的块用于我的 html5 <video> 元素

这是我的客户端 html 标签

<video controls type="video/mp4" src="" id="video" width="300" height="300"></video>

【问题讨论】:

    标签: javascript node.js socket.io stream video-streaming


    【解决方案1】:

    直接使用 HTTP。无需使用网络套接字进行单向通信。

    使用 Express 静态地提供该文件。然后在您的视频标签中,src="path/video.mp4"

    【讨论】:

    • 当一个巨大的视频文件来的时候可以吗?我想让它像 youtube 一样流式传输
    • @THEWOLF 是的,事实上它会比你现在做的更好。当您通过 HTTP 流式传输它时,拥塞控制会以几种不同的方式处理。最直接的部分是通过常规的 TCP 拥塞控制。当浏览器不想再缓冲任何数据时,它会关闭窗口。最终它可以选择断开连接,或者它可以再次打开窗口以接受更多数据。像 Chrome 这样的浏览器实际上一次只请求文件的片段,通过范围请求。 Express 在后台为您处理所有这些。
    • 那好吧。我只想要最优化的解决方案。那么我将只使用路径对吗?当用户请求视频时,我只会发送路径字符串并将其附加到视频 src 对吗?
    【解决方案2】:

    这是我使用 NodeJS 和 FFmpeg 处理 HTTP Live Streams HLS + m3u8 即 VOD 的完整示例实现。检查一下

    https://github.com/pluginfactory/HLS-transcoding-nodejs

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-23
      • 2015-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-16
      • 2014-03-15
      • 2018-05-09
      相关资源
      最近更新 更多