bilibili / WebAV

WebAV is an SDK built on WebCodecs, designed for creating and editing video files on the web platform. WebAV 是基于 WebCodecs 构建的 SDK,用于在 Web 平台上创建/编辑视频文件。
https://bilibili.github.io/WebAV/
MIT License
930 stars 109 forks source link

av-cliper 里如何获取已缓冲的时长 #260

Closed zhw2590582 closed 3 weeks ago

zhw2590582 commented 3 weeks ago

我想为av-cliper写一个播放器的UI:

demo code

假如视频是流式加载的话,我需要展示一个已缓冲的进度条,但我在文档里没发现这个属性,请问怎么获取?

mxue12138 commented 3 weeks ago
    const res = await axios.get(url, {
      responseType: 'blob',
      signal: this.controller.signal
    })
    const blob = res.data
    this.body = blob.stream()
    this.clip = new MP4Clip(this.body)

av-cliper 是读取内存中的视频数据,需要用代码手动获取视频数据,手动传入数据,我正好写过类似的需求,我用 axios 分段请求视频 url,然后根据 axios 的分段进度写了个进度条,需要注意的是视频的开头视频必须要获取才能正常解析,中间部分可以先不获取,但是和视频编码好像也有关系,你等开发者回复吧

zhw2590582 commented 3 weeks ago

@mxue12138 这也是一个办法,不过网络的下载进度,只能算是近似于缓冲进度,如10秒的视频下载了一半不等于前5秒都能播

mxue12138 commented 3 weeks ago

@mxue12138 这也是一个办法,不过网络的下载进度,只能算是近似于缓冲进度,如10秒的视频下载了一半不等于前5秒都能播

是的,我明白你的意思,不过现在的话,av-cliper 是没有加载远程视频的逻辑的,只能自己手动加载视频,,,你想要的伪代码应该是用axios加载一段视频就append进去一段,然后 av-cliper 能返回视频的可播放时长,加载一段解析一段加载一段解析一段,我也没找到这方面的方法哈哈哈哈哈

hughfenghen commented 3 weeks ago

av-cliper 设计用于创建/编辑视频,默认需要把文件下载完成,没有天然支持动态加载播放。

MP4Clip 支持使用 文件(OPFSFileWrap)来初始化,本身目的是为了支持按需读磁盘,降低内存占用。

只要实现 OPFSFileWrap 的 reader 接口,也许能实现按需加载。

zhw2590582 commented 3 weeks ago

明白了,多谢