Expo AV视频组件——视频的循环部分



我可以使用Expo AV的视频组件循环播放视频的最后X秒吗?例如,假设我有一个15秒的视频。我希望它能完全发挥出来,但然后从5秒开始循环。

我想我可以通过把视频分成两个视频,然后只循环第二个视频来达到同样的效果。然而,我尝试了一下,在播放第一个和第二个视频之间出现了延迟。如果你有想法,请告诉我!

为了实现这一点,您将只使用一个视频组件,并通过给视频组件一个回调函数来覆盖默认循环,从而使用playFromPositionAsync创建一个人工循环。

  1. 创建将播放的视频的引用

    let video : Video | null; //add type if using typescript
    
  2. 创建视频组件并提供播放功能。

    <Video 
    ref={(r) => {video = r}} //set the video reference  
    source={{uri: uri}}
    isLooping={false} 
    useNativeControls={false} //to not use native play pause... buttons
    shouldPlay //if you want your video to play automatically the first time
    progressUpdateIntervalMillis={100} //the playback update function below will fire every 100ms
    onPlaybackStatusUpdate={_onPlaybackStatusUpdate} />
    
  3. 定义回放功能

    const _onPlaybackStatusUpdate = (status: AVPlaybackStatus)=>{
    if (status.isLoaded){ //video is loaded without error
    if (status.didJustFinish){ //fired only once when video ends
    video?.playFromPositionAsync(10000, { toleranceMillisBefore: 0, toleranceMillisAfter: 0 }); //start at 10sec with 0 tolerance (starts exactly at 10sec)
    }
    }
    }
    

这里发生的情况是,每当视频结束时,您都会从10秒开始播放视频。注意,didJustFinish只触发一次,但您应该经常更新以检查播放是否真的结束了,因此progressUpdateIntervalMillis。如果没有这一点,结束事件在视频的开头将是错误的,循环将不会开始。

相关内容

  • 没有找到相关文章

最新更新