SwiftUI中使用YouTubePlayerKit实现视频回退n秒功能
实现YouTubePlayerKit视频回退指定秒数
要实现点击按钮将视频回退指定秒数的功能,核心是通过getCurrentTime()异步获取当前播放进度,计算目标时间后调用seek(to:allowSeekAhead:)完成跳转。具体实现如下:
关键步骤
- 定义回退时长常量,按需调整数值;
- 在按钮点击事件中异步获取当前播放时间;
- 处理获取结果:成功则计算目标时间(当前时间-回退秒数,确保不小于0),调用
seek跳转;失败则处理错误。
修改后的完整代码
import SwiftUI import YouTubePlayerKit struct ContentView: View { // 设定回退秒数,可自行修改 let backSeconds: Double = 10 let youTubePlayer = YouTubePlayer( source: .url("https://www.youtube.com/watch?v=qL-ry_tz6V0"), configuration: .init( autoPlay: true ) ) @State private var jumpTo: Double = 27 var body: some View { ZStack { YouTubePlayerView(self.youTubePlayer) { state in switch state { case .idle: ProgressView() case .ready: EmptyView() case .error(let error): Text(verbatim: "YouTube player couldn't be loaded: \(error.localizedDescription)") } } HStack { Button("PLAY") { youTubePlayer.play() } Button("PAUSE") { youTubePlayer.pause() } Button("STOP") { youTubePlayer.stop() } Button("SEEK") { youTubePlayer.seek(to: jumpTo, allowSeekAhead: true) } // 新增回退按钮 Button("BACKWARD \(Int(backSeconds))s") { youTubePlayer.getCurrentTime { result in switch result { case .success(let currentTime): // 确保目标时间不小于0,避免跳转异常 let targetTime = max(currentTime - backSeconds, 0) // 跳转到目标位置并继续播放 youTubePlayer.seek(to: targetTime, allowSeekAhead: true) youTubePlayer.play() case .failure(let error): print("获取当前播放时间失败: \(error)") } } } } .offset(y: 250) .padding() .background(Color.black.opacity(0.5)) .foregroundColor(.white) } } } struct ContentView_Previews: PreviewProvider { static var previews: some View { ContentView() } }
注意事项
getCurrentTime是异步方法,必须在回调闭包内处理结果,无法同步获取值;- 用
max(_:_:)限制目标时间最小值为0,防止出现负数导致跳转错误; - 跳转后调用
play()可让视频从目标位置继续播放,若需保持暂停状态可移除该调用; - 错误处理可根据需求扩展,比如替换打印日志为UI提示。
内容的提问来源于stack exchange,提问作者Uzr66
相关产品推荐
相关产品推荐

