预加载资源
默认情况下,视频、音频或图像等资源只会在它们进入视频时才会被加载。当使用Remotion Player时,您可能希望预先加载这些资源,以便它们一旦进入视频就立即播放。
支持两种预加载方式:
- 通过
@remotion/preloadAPI向浏览器发出信号,要求加载资源 - 预先获取资源,然后使用
prefetch()在本地播放
使用 @remotion/preload 预加载视频
通过预加载,在页面上放置一个 <link type='preload'> 标签,向浏览器发出信号,表明它可以开始加载媒体。
对于视频,请使用 preloadVideo() API,对于音 频,请使用 preloadAudio(),对于图像,请使用 preloadImage()。在组件外部或在 useEffect() 中执行预加载。
tsximport {preloadAudio ,preloadVideo } from '@remotion/preload';constunpreloadVideo =preloadVideo ('https://example.com/video.mp4');constunpreloadAudio =preloadAudio ('https://www.soundhelix.com/examples/mp3/SoundHelix-Song-1.mp3',);// Later, you can optionally clean up the preloadunpreloadVideo ();unpreloadAudio ();
tsximport {preloadAudio ,preloadVideo } from '@remotion/preload';constunpreloadVideo =preloadVideo ('https://example.com/video.mp4');constunpreloadAudio =preloadAudio ('https://www.soundhelix.com/examples/mp3/SoundHelix-Song-1.mp3',);// Later, you can optionally clean up the preloadunpreloadVideo ();unpreloadAudio ();
使用 prefetch() 预取
在 v3.2.23 中可用
通过预取,完整的媒体将被下载并使用 URL.createObjectURL() 转换为 Blob URL。
如果将原始 URL 传递给 <Audio>、<Video>、<OffthreadVideo> 或 <Img> 标签,并且资源已经被预取,这些组件将使用 Blob URL。
tsximport {prefetch } from 'remotion';const {free ,waitUntilDone } =prefetch ('https://example.com/video.mp4');waitUntilDone ().then (() => {console .log ('Video has finished loading');});// Call free() if you want to un-prefetch and free up the memory:free ();
tsximport {prefetch } from 'remotion';const {free ,waitUntilDone } =prefetch ('https://example.com/video.mp4');waitUntilDone ().then (() => {console .log ('Video has finished loading');});// Call free() if you want to un-prefetch and free up the memory:free ();
@remotion/preload vs. prefetch()
prefetch() 是一种更可靠的方式,可以确保媒体在需要显示时已准备就绪,但需要完全下载资源。
@remotion/preload 更适合处理大型资源,因为您无需等待其下载完成。
html<table><tr><th></th><th><div><code>preloadAudio()</code><br /><code>preloadVideo()</code></div></th><th><div><code>prefetch()</code></div></th></tr><tr><td>Works with</td><td>所有音频和视频API、图像和字体</td><td><a href="/docs/audio"><code>{'<Audio/>'}</code></a>,{' '}<a href="/docs/video"><code>{'<Video/>'}</code></a>,{' '}<a href="/docs/img"><code>{'<Img/>'}</code></a>,{' '}<a href="/docs/offthreadvideo"><code>{'<OffthreadVideo/>'}</code></a></td></tr><tr><td>Mechanism</td><td>插入一个<code>{"<link type='preload'>"}</code>标签</td><td>获取资源并将其转换为URL blob或Base 64 URL</td></tr><tr><td>Readiness</td><td style={{color: 'green'}}>当资源部分加载时准备就绪</td><td style={{color: 'red'}}>必须完全获取资源</td></tr><tr><td>Reliability</td><td style={{color: 'red'}}>没有保证,只是向浏览器发送信号</td><td style={{color: 'green'}}>保证准备就绪,可以跟踪加载进度</td></tr><tr><td>Callback</td><tdstyle={{color: 'red',}}>无法确定是否准备就绪</td><tdstyle={{color: 'green',}}>当Promise解析时准备就绪</td></tr><tr><td>Package</td><td>@remotion/preload</td><td>remotion</td></tr><tr><td>Handles HTTP redirects</td><td>必须使用{' '}<a href="/docs/preload/resolve-redirect"><code>resolveRedirect()</code></a></td><td>自动处理</td></tr><tr><td><a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS">CORS</a></td><td>如果使用{' '}<a href="/docs/preload/resolve-redirect"><code>resolveRedirect()</code></a>{' '},资源必须支持CORS</td><td>资源必须支持CORS</td></tr><tr><td>Available from</td><td>v3.0.14</td><td>v3.2.23</td></tr></table>
html<table><tr><th></th><th><div><code>preloadAudio()</code><br /><code>preloadVideo()</code></div></th><th><div><code>prefetch()</code></div></th></tr><tr><td>Works with</td><td>所有音频和视频API、图像和字体</td><td><a href="/docs/audio"><code>{'<Audio/>'}</code></a>,{' '}<a href="/docs/video"><code>{'<Video/>'}</code></a>,{' '}<a href="/docs/img"><code>{'<Img/>'}</code></a>,{' '}<a href="/docs/offthreadvideo"><code>{'<OffthreadVideo/>'}</code></a></td></tr><tr><td>Mechanism</td><td>插入一个<code>{"<link type='preload'>"}</code>标签</td><td>获取资源并将其转换为URL blob或Base 64 URL</td></tr><tr><td>Readiness</td><td style={{color: 'green'}}>当资源部分加载时准备就绪</td><td style={{color: 'red'}}>必须完全获取资源</td></tr><tr><td>Reliability</td><td style={{color: 'red'}}>没有保证,只是向浏览器发送信号</td><td style={{color: 'green'}}>保证准备就绪,可以跟踪加载进度</td></tr><tr><td>Callback</td><tdstyle={{color: 'red',}}>无法确定是否准备就绪</td><tdstyle={{color: 'green',}}>当Promise解析时准备就绪</td></tr><tr><td>Package</td><td>@remotion/preload</td><td>remotion</td></tr><tr><td>Handles HTTP redirects</td><td>必须使用{' '}<a href="/docs/preload/resolve-redirect"><code>resolveRedirect()</code></a></td><td>自动处理</td></tr><tr><td><a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS">CORS</a></td><td>如果使用{' '}<a href="/docs/preload/resolve-redirect"><code>resolveRedirect()</code></a>{' '},资源必须支持CORS</td><td>资源必须支持CORS</td></tr><tr><td>Available from</td><td>v3.0.14</td><td>v3.2.23</td></tr></table>
预加载 GIFs
您可以使用preloadGif() 预加载和预解析 GIFs。