egg 视频流返回前端无法播放

wkyowqbh  于 2022-11-05  发布在  其他
关注(0)|答案(5)|浏览(171)

Discussed in #4767

Originally posted byliyang9331September 27, 2021

ctx.set('content-type', 'video/mp4');//设置返回类型
    let stream = fs.createReadStream('./assets/test.mp4');
    if (stream) {//判断状态
      stream.on('open', function () {
        console.log('文件打开')
      });
      stream.on('end', function () {
        console.log("读取完毕")
      })
      stream.on('data', function (data) {
        // console.log("读取文件流")
        ctx.body = data
      })
      stream.on('err', function () {
        console.log("发生错误")
      })
      stream.on('close', function () {
        console.log('关闭')
        // ctx.end
      });
    }
apeeds0o

apeeds0o1#

谁跟你说 Koa 的 body 可以多次赋值,然后响应的。。。

kmbjn2e3

kmbjn2e32#

only ctx.body = stream ,koa will handle stream

3qpi33ja

3qpi33ja3#

谁跟你说 Koa 的 body 可以多次赋值,然后响应的。。。

不可以多次响应,如何分段返回媒体流?
ctx.body = stream,不是将整个媒体流返回了吗?

ftf50wuq

ftf50wuq4#

不可以多次响应,如何分段返回媒体流? ctx.body = stream,不是将整个媒体流返回了吗?

要多次分段返回只能自己切割后多次靠逻辑组合多次请求。

http 请求自身本来就只能 send 一次,或者你可以用 stream.PassThrough 自己控制输出速度。

nzk0hqpo

nzk0hqpo5#

谁跟你说 Koa 的 body 可以多次赋值,然后响应的。。。

不可以多次响应,如何分段返回媒体流?

ctx.body = stream,不是将整个媒体流返回了吗?

你是在 data 事件里面赋值的啊, 这是一个重复行为。而且没有 await 事件

相关问题