在 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 Workerimport {parseMediaOnWebWorker } from '@remotion/media-parser/worker'; constresult = awaitparseMediaOnWebWorker ({src : 'https://remotion.media/video.mp4',fields : {durationInSeconds : true,dimensions : true, }, });console .log (result .durationInSeconds ); // 10console .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 Bunimport {parseMediaOnServerWorker } from '@remotion/media-parser/server-worker'; constresult = awaitparseMediaOnServerWorker ({src : '/tmp/video.mp4',fields : {durationInSeconds : true,dimensions : true, }, });console .log (result .durationInSeconds ); // 10console .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
parseMediaOnWebWorker 和 parseMediaOnServerWorker() API 不接受 reader 字段。
🌐 The parseMediaOnWebWorker and parseMediaOnServerWorker() APIs don't accept the reader field.
它分别被硬编码为 webReader 和 universalReader。
🌐 It is hardcoded to webReader and universalReader respectively.
另请参阅
🌐 See also