当前位置: 首页 > 知识库问答 >
问题:

前端 - 从接口渲染mp4视频遇到的问题, overload reslution failed?

宋朝
2023-07-26

image.png

web端项目想通过接口拿到视频文件,但是显示执行到sourceBuffer.appendBuffer的时候报错了,不知道为什么???

这是渲染视频的逻辑

onMounted(() => {  const video = document.querySelector('#homeVideo')  const mediaSource = new MediaSource()  video.src = URL.createObjectURL(mediaSource)  mediaSource.addEventListener('sourceopen', () => {    const sourceBuffer = mediaSource.addSourceBuffer(      'video/mp4; codecs="avc1.42E01E, mp4a.40.2"'    )    getBackgroundNormal().then((data) => {      sourceBuffer.appendBuffer(data)    })  })})

这是前端api接口

const getBackgroundNormal = () => {  return api({    method: 'get',    url: 'backgroundVideoNormal',    headers: { responseType: 'arraybuffer' }  })}

这里是我自己写的node返回视频文件的接口

 router.get('/backgroundVideoNormal', async (ctx) => {    const video = fs.readFileSync(path.join(__dirname, 'bk.mp4'))    ctx.type = 'video/mp4'    ctx.body = video  })

尝试了下面朋友的方法

export const getBackgroundNormal = () => {  return api({    method: 'get',    url: 'backgroundVideoNormal',    headers: { responseType: 'arraybuffer' }  }).then((res) => res.data)}onMounted(() => {  const video = document.querySelector('#homeVideo')  const mediaSource = new MediaSource()  video.src = URL.createObjectURL(mediaSource)  mediaSource.addEventListener('sourceopen', () => {    if (mediaSource.readyState === 'open') {      const sourceBuffer = mediaSource.addSourceBuffer(        'video/mp4; codecs="avc1.42E01E, mp4a.40.2"'      )      getBackgroundNormal().then((data) => {        sourceBuffer.appendBuffer(data)      })    }  })})

还是会报一样的错误

共有1个答案

傅毅然
2023-07-26

API接口:

const getBackgroundNormal = () => {  return api({    method: 'get',    url: 'backgroundVideoNormal',    headers: { responseType: 'arraybuffer' }  }).then(response => response.data)}

检查MediaSource.readyState属性:

mediaSource.addEventListener('sourceopen', () => {  if (mediaSource.readyState === 'open') {    const sourceBuffer = mediaSource.addSourceBuffer(      'video/mp4; codecs="avc1.42E01E, mp4a.40.2"'    )    getBackgroundNormal().then((data) => {      sourceBuffer.appendBuffer(data)    })  }})
 类似资料:
  • 在使用 nuxt 时,nuxt 可以使用 usefetch 进行请求,底层的实现是 ofetch 这个库,这个库支持在服务器端和客户端进行请求,nuxt 做了优化,如果服务器端有请求过的数据会序列化传输到客户端,这样客户端在水合时就不用再发起请求。而在使用 nextjs 时,使用的是 fetch 进行请求,nextjs 对 fetch 进行了扩展,增加了缓存的功能,但是我发现这个扩展的 fetch

  • 根据数据库里面获取到的数据信息渲染表格,起初根据数据结构生成了四列,但是由于后续数据库里面会有数据结构上的变化,会增加字段,那我要如何在表格中去追加这部分新数据,从而在前端渲染出一个新的表格————就是说原来四列变六列,并把对应数据也一同渲染上去。

  • 我使用了fetch方法向后端发送了一个请求,获取到了返回数据之后 ,该数据是一个对象类型的,我如何批量创建li到该ul中呢?li中要对应对象的属性 后端数据格式

  • 我正在尝试将过滤器(如Instagram的过滤器)应用于现有视频。 我使用GLSURFACHEVIEW显示视频帧,并希望通过对传入帧应用特定过滤器,使用onDrawFrame()渲染每个帧。 但是在onDrawFrame()中,如何获取传入帧? 谢谢

  • 用的vue3 和element plus,在代码中 每次code1获取到的值都是上一次存入的值,网上搜说是因为异步的关系,具体应该怎么修改请大佬指导!

  • 我正在努力熟悉Java的LWJGL库,我一直在线学习一些教程,我似乎无法渲染模型。 我使用的是OpenGL 2.1(这似乎非常过时,但我不知道如何更新它,我知道它与你的硬件捆绑在一起,如果有人对我的规格感兴趣,我使用的是MacBook Pro 2017型号) 如果有人能看看我的代码,告诉我哪里做错了,我会非常感激!(现在呈现的只是一个红色窗口) 从我研究过的来源来看,这段代码应该会产生一个由两个三