vnve icon indicating copy to clipboard operation
vnve copied to clipboard

能否支持视频子元素渲染?

Open yunsii opened this issue 1 year ago • 14 comments

我把 pixi.js 升到了 v8 之后想支持一下视频的渲染,参考了 Img 实现了 Video 类。视频在预览的时候能正常加载和播放,但是导出之后视频相当不流畅,看起来 5 秒的场景下只渲染了几帧的视频内容。

仔细看了下音频的导出实现,难道视频也要像音频一样切片处理,找了一通资料好像没有太好的思路,不知道大佬能否指点一二?

yunsii avatar May 24 '24 02:05 yunsii

我把 pixi.js 升到了 v8 之后想支持一下视频的渲染,参考了 Img 实现了 Video 类。视频在预览的时候能正常加载和播放,但是导出之后视频相当不流畅,看起来 5 秒的场景下只渲染了几帧的视频内容。

仔细看了下音频的导出实现,难道视频也要像音频一样切片处理,找了一通资料好像没有太好的思路,不知道大佬能否指点一二?

hhh,之前挺多人想要视频播放的功能的,一直没时间开发,欢迎提个PR看看~ 思路上不需要像音频一样做切片,但需要实现一个类似Soundtick方法,运行到对应时间点的时候,需要把视频seek到对应的时间点,保证视频帧渲染到的画布上就行

ForeverSc avatar May 24 '24 04:05 ForeverSc

我实现了 tick 方法,但是是让视频不断的暂停来做的,效果一样很垃圾,seek 到具体时间点就可以了吗?我先试试。

yunsii avatar May 24 '24 05:05 yunsii

https://stackoverflow.com/a/10461709/8335317 就是通过 currentTime 来 seek 的呀,那应该怎么保证视频帧渲染到画布上呢?

yunsii avatar May 24 '24 05:05 yunsii

通过 currentTime 来 seek 并且每次 tick 我通过延迟一秒来保证视频帧渲染到画布上,目前来看是比之前没有任何延迟好多了,但是视频好像没有原视频那么流畅,不过差不多够用了,另外强行延迟一秒也不优雅 😂

yunsii avatar May 24 '24 06:05 yunsii

通过 currentTime 来 seek 并且每次 tick 我通过延迟一秒来保证视频帧渲染到画布上,目前来看是比之前没有任何延迟好多了,但是视频好像没有原视频那么流畅,不过差不多够用了,另外强行延迟一秒也不优雅 😂

可以监听video标签的seeked事件,来判断currentTime是否生效,稍为优雅一点😂。但不流畅的原因是插入的视频帧率应该并不是30,但目前导出视频的帧率是写死的30,好的方案是需要先使用mp4box.js之类的先seek,找到对应帧数据,使用webcodecs对视频做解码, 再渲染上对应的视频帧,同时还需要考虑帧率一致的问题

ForeverSc avatar May 24 '24 08:05 ForeverSc

不流畅的原因是插入的视频帧率应该并不是30,但目前导出视频的帧率是写死的30,好的方案是需要先使用mp4box.js之类的先seek,找到对应帧数据,使用webcodecs对视频做解码, 再渲染上对应的视频帧,同时还需要考虑帧率一致的问题

这个问题就有点复杂了,现在看起来效果还行的,我先试试 seeked 事件 👀

yunsii avatar May 24 '24 09:05 yunsii

可以监听video标签的seeked事件,来判断currentTime是否生效

效果拔群,丝滑多了。另外说下升级 pixi.js v8 的话 @pixi-essentials/transformer 还不支持 😂

yunsii avatar May 24 '24 09:05 yunsii

可以监听video标签的seeked事件,来判断currentTime是否生效

效果拔群,丝滑多了。另外说下升级 pixi.js v8 的话 @pixi-essentials/transformer 还不支持 😂

👍 ,v8生态应该还需要挺久才能跟上,之前就是考虑到transfomer的升级成本太高了😆。Video的部分有空可以提个PR哈~

ForeverSc avatar May 24 '24 10:05 ForeverSc

https://github.com/ShukantPal/pixi-essentials/pull/106 我看是有相关的 PR 的,但是至今都没进展,我现在的 Video 是基于 v8 开发的,目前我看好像只有 v8 能拿到 video element 实例来做 seek,v7 也可以吗?可以的话我可以 PR 一下。

yunsii avatar May 24 '24 11:05 yunsii

ShukantPal/pixi-essentials#106 我看是有相关的 PR 的,但是至今都没进展,我现在的 Video 是基于 v8 开发的,目前我看好像只有 v8 能拿到 video element 实例来做 seek,v7 也可以吗?可以的话我可以 PR 一下。

还没研究过,可以提出来看看,应该有办法兼容

ForeverSc avatar May 24 '24 12:05 ForeverSc

OK,这两天我有空看看 👀

yunsii avatar May 24 '24 12:05 yunsii

尝试了一下,video 实例是能拿到的,看来还是之前大意了。另外在编辑器里的状态同步好像有点费劲啊,UI 这块应该需要好好重构下 🫠

yunsii avatar May 25 '24 01:05 yunsii

尝试了一下,video 实例是能拿到的,看来还是之前大意了。另外在编辑器里的状态同步好像有点费劲啊,UI 这块应该需要好好重构下 🫠

是的,状态同步比较复杂,最开始想简单了,没做系统设计,最近也在想先做个整体重构再继续迭代功能,不过还没时间整哈哈~

ForeverSc avatar May 25 '24 02:05 ForeverSc

还在折腾中,端午前有希望 😂 主要还是状态同步费劲

yunsii avatar May 27 '24 03:05 yunsii