WebVideoCreator icon indicating copy to clipboard operation
WebVideoCreator copied to clipboard

嵌入视频太长导致错误

Open MixBadGun opened this issue 1 year ago • 9 comments

貌似被嵌入的视频长度过长会导致渲染报错。

[2024-01-10 16:45:48.677][error][Browser<150,42>] Browser Browser@1 close error: Error: Resource not currently part of l    at Pool.destroy (D:\ScheduledProgram\OtmInkRanking_Camellia\camellia-backend\node_modules\generic-pool\lib\Pool.js:)    at ResourcePool.destoryBrowser (file:///D:/ScheduledProgram/OtmInkRanking_Camellia/camellia-backend/node_modules/we)    at file:///D:/ScheduledProgram/OtmInkRanking_Camellia/camellia-backend/node_modules/web-video-creator/core/Browser.1

MixBadGun avatar Jan 10 '24 08:01 MixBadGun

请提供视频url供调查🔎 @MixBadGun

Vinlic avatar Jan 10 '24 15:01 Vinlic

实际上不是指定的url。 我使用的由于有前端框架,所以用的是canvas嵌入。在传入2分钟视频时候,一切正常。但在传入4分钟的视频时,会出现错误。

MixBadGun avatar Jan 10 '24 15:01 MixBadGun

可以提供最小的复现代码吗,我不太确定发生了什么,看上去似乎是浏览器实例被意外关闭了 🤔 @MixBadGun

Vinlic avatar Jan 11 '24 01:01 Vinlic

在渲染的时候,我传入了 data 这个变量:

const data = ...
const video = wvc.createSingleVideo({
    url: data.url,
    width: 1920,
    height: 1080,
    fps: 60,
    duration: data.full_time * 1000,
    outputPath: data.output_src,
    frameQuality: 100,
    // 码率
    audioBitrate: "320k",
    videoBitrate: "10000k",
    // GPU 加速
    browserUseGPU: true,
    browserFrameRateLimit: false,
    // Cli 的进度条
    showProgress: true,
    pagePrepareFn: async page => {
        const _page = page.target;
        await _page.evaluate(function(data){
            inject_wvc(data);
        },data)
    }
});

其中 data.video_src 的值是 http://localhost:1234/video/1234.mp4,这将传给:

<canvas :src="data.video_src" ref="videoRef" muted video-capture></canvas>

我在嵌入长度过长的视频的时,渲染遇到了错误。

MixBadGun avatar Jan 12 '24 10:01 MixBadGun

尝试将browserFrameRateLimit选项去除是否能够解决这个问题? @MixBadGun

Vinlic avatar Jan 12 '24 11:01 Vinlic

还是存在问题,不知道会不会和实际渲染长度过长也有关?

MixBadGun avatar Jan 12 '24 11:01 MixBadGun

这有些奇怪,可能是视频解码过程中引发了问题,您可以在 wvc.config({...})中开启browserDebug,ffmpegDebug。 还有打开控制台和视频预处理日志: const video = wvc.createSingleVideo({ ..., // 输出页面控制台打印的日志 consoleLog: true, // 输出内嵌视频预处理日志 videoPreprocessLog: true }); 也许能输出有分析价值的日志,您可以把日志内容放在单独文件发在这里。 @MixBadGun

Vinlic avatar Jan 12 '24 14:01 Vinlic

DevTools listening on ws://127.0.0.1:13385/devtools/browser/de769b05-eed9-4406-885f-35c325a9c94d
[2024-01-14 19:45:34.538][debug][util<455,16>] ffmpeg -f image2pipe -r 60 -hide_banner -i pipe:0 -y -b:v 10000k -vcodec h264_qsv -filter:v scale=w=1920:h=1080 -profile:v main -preset medium -pix_fmt yuv420p -movflags +faststart -f mp4 D:\ScheduledProgram\OtmInkRanking_Camellia\camellia-backend\tmp\synthesizer\video_11dufb43i8lrdfji2j.mp4
[2024-01-14 19:45:38.804][log][SingleVideo<169,61>] [video_preprocess] http://localhost:7213/./videoc/990676596.mp4
[0114/194542.271:ERROR:http_connection.cc(37)] Too large read data is pending: capacity=104857600, max_buffer_size=104857600, read=104857600
[2024-01-14 19:45:42.321][error][Browser<150,42>] Browser Browser@1 close error: Error: Resource not currently part of this pool
    at Pool.destroy (D:\ScheduledProgram\OtmInkRanking_Camellia\camellia-backend\node_modules\generic-pool\lib\Pool.js:548:9)
    at ResourcePool.destoryBrowser (file:///D:/ScheduledProgram/OtmInkRanking_Camellia/camellia-backend/node_modules/web-video-creator/core/ResourcePool.js:190:33)
    at file:///D:/ScheduledProgram/OtmInkRanking_Camellia/camellia-backend/node_modules/web-video-creator/core/Browser.js:255:31

貌似是数据太大了(?

MixBadGun avatar Jan 14 '24 11:01 MixBadGun

也许是视频在本地重新编码后回传浏览器时数据量太大,我有空时将对此进行改造尝试使用分片传输。 @MixBadGun

Vinlic avatar Jan 15 '24 10:01 Vinlic