2.1 KiB
2.1 KiB
SharedUI/Media
媒体通用视图与组件。
WakeVideoPlayer
一个遵循项目 Theme 风格的 SwiftUI 视频播放组件,基于 AVKit 封装。
支持:
- 播放 / 暂停
- 进度条拖动(支持拖动中不打断播放进度回调)
- 静音切换
- 全屏播放(
fullScreenCover) - 自动隐藏控件(播放中 2.5s 无操作自动隐藏)
- 自动播放与循环播放
- 自定义填充模式(
videoGravity)
用法示例
import SwiftUI
struct DemoVideoCard: View {
var body: some View {
WakeVideoPlayer(
url: URL(string: "https://devstreaming-cdn.apple.com/videos/wwdc/2020/10653/4/17B5F5F3-4D9E-4BAE-8E8F-2C3C7A01F3F2/cmaf.m3u8")!,
autoPlay: false,
isLooping: true,
showsControls: true,
allowFullscreen: true,
muteInitially: false,
videoGravity: .resizeAspectFill
)
.frame(height: 220)
.clipShape(RoundedRectangle(cornerRadius: Theme.CornerRadius.large, style: .continuous))
.shadow(color: Theme.Shadows.cardShadow.color, radius: Theme.Shadows.cardShadow.radius, x: Theme.Shadows.cardShadow.x, y: Theme.Shadows.cardShadow.y)
.padding()
}
}
初始化参数
url: URL必填。视频资源地址,支持网络或本地文件 URL。autoPlay: Bool = true首次出现是否自动播放。isLooping: Bool = false是否循环播放。showsControls: Bool = true是否显示自定义控制层。allowFullscreen: Bool = true是否允许进入全屏播放。muteInitially: Bool = false初始是否静音。videoGravity: AVLayerVideoGravity = .resizeAspectFill视频填充模式,如.resizeAspect/.resizeAspectFill。
注意事项
- 如果是新加入的文件,确保在 Xcode 中将
WakeVideoPlayer.swift添加到对应 Target,否则无法被编译。 - 远程流地址需确保允许跨域与 HTTPS,示例使用 Apple 公共 HLS 资源。
- 如果需要画中画(PiP)、双击快退/快进、手势亮度/音量等高级功能,可在此基础上扩展。