Skip to main content

在 Web Worker 上解析

使用 parseMedia() 进行解析会阻塞 JavaScript 的主线程,如果你正在浏览器中显示用户界面,或者在 Web 服务器上处理请求,这是不希望发生的情况。

🌐 Parsing using parseMedia() will block the main thread of JavaScript, which is undesirable if you are displaying a UI in the browser, or are serving requests on a web server.

你可以使用 parseMediaOnWebWorker()Worker 上运行解析,而不是在主线程上运行。

🌐 You can run the parse on a Worker instead of on the main thread using parseMediaOnWebWorker().

该 API 负责在主线程和 Web Worker 之间交换消息,因此 parseMediaOnWebWorker() 可以用作 parseMedia() 的直接替代。

🌐 The API takes care of exchanging messages between the main thread and the Web Worker, so that parseMediaOnWebWorker() can be used as a drop-in replacement for parseMedia().

示例

🌐 Example

Parsing a video on a Web Worker
import {parseMediaOnWebWorker} from '@remotion/media-parser/worker'; const result = await parseMediaOnWebWorker({ src: 'https://remotion.media/video.mp4', fields: { durationInSeconds: true, dimensions: true, }, }); console.log(result.durationInSeconds); // 10 console.log(result.dimensions); // {width: 1920, height: 1080}

在服务器上使用工作线程进行解析

🌐 Parsing on the server using a worker

Bun 也实现了 Worker 对象。
要使用它,你可以使用 parseMediaOnServerWorker() API。

Parsing a video on a Web Worker on Bun
import {parseMediaOnServerWorker} from '@remotion/media-parser/server-worker'; const result = await parseMediaOnServerWorker({ src: '/tmp/video.mp4', fields: { durationInSeconds: true, dimensions: true, }, }); console.log(result.durationInSeconds); // 10 console.log(result.dimensions); // {width: 1920, height: 1080}

parseMediaOnWebWorker() 的不同之处在于,它还支持从本地文件路径读取。

🌐 The difference to parseMediaOnWebWorker() is that it also supports from reading local file paths.

API 差异

🌐 API Differences

parseMediaOnWebWorkerparseMediaOnServerWorker() API 不接受 reader 字段。

🌐 The parseMediaOnWebWorker and parseMediaOnServerWorker() APIs don't accept the reader field.

它分别被硬编码为 webReaderuniversalReader

🌐 It is hardcoded to webReader and universalReader respectively.

另请参阅

🌐 See also