avplayer 视频播放
时间: 2025-05-03 08:41:08 浏览: 45
### 关于 `AVPlayer` 视频播放
#### 基本概念与初始化
`AVPlayer` 是 Apple 提供的一个类,属于 AVFoundation 框架的一部分。此框架允许开发者在应用中集成多媒体功能,包括音频和视频的播放。对于视频播放而言,通常会结合 `AVPlayerViewController` 来提供用户界面。
为了启动一个基本的视频播放器,在 Swift 中可以按照如下方式操作:
```swift
import AVKit
let videoURL = Bundle.main.url(forResource: "exampleVideo", withExtension: "mp4")!
let playerViewController = AVPlayerViewController()
playerViewController.player = AVPlayer(url: videoURL)
// 显示播放控制器并开始播放
present(playerViewController, animated: true) {
playerViewController.player?.play()
}
```
这段代码展示了如何加载本地资源文件作为视频源,并通过 `AVPlayerViewController` 展现给用户[^1]。
#### 控制播放行为
当不再需要继续播放时,可以通过调用特定的方法来释放资源。例如,要停止播放并且清理关联的对象,应该这样做:
```swift
playerViewController.dismiss(animated: true)
playerViewController.player?.pause()
if let playerItem = playerViewController.player?.currentItem {
playerItem.asset.cancelLoading()
}
playerViewController.player = nil
```
这里不仅暂停了播放还取消了任何正在进行的数据加载过程,并最终将玩家对象置为空以确保其被正确回收[^2]。
#### 结合 SwiftUI 的状态管理
如果是在 SwiftUI 环境下工作,则可能希望利用响应式的编程模型来进行视图更新。下面的例子说明了怎样定义一些属性并通过它们控制媒体回放的状态变化:
```swift
struct ContentView: View {
@State private var avSession: AVAudioSession?
@State private var controller: AVPlayerViewController?
@State private var currentPlayInfo: AVMediaDescription?
init() {
_avSession = State(initialValue: try? AVAudioSession.sharedInstance())
_controller = State(initialValue: AVPlayerViewController())
setupPlayer()
}
func setupPlayer() {
guard let url = URL(string: "https://your-video-url.com/video.mp4") else { return }
self.controller?.player = AVPlayer(url: url)
NotificationCenter.default.addObserver(self,
selector: #selector(playbackStateChanged),
name: .AVPlayerItemDidPlayToEndTime,
object: nil)
}
@objc func playbackStateChanged(notification: Notification) {
// 更新 play info 或者处理其他事件
}
var body: some View {
VStack {
Button(action: startPlayback) {
Text("Start Playback")
}
}.onAppear(perform: prepareForPlayback)
}
func prepareForPlayback() {
// 准备播放前的操作
}
func startPlayback() {
if let vc = controller {
UIApplication.shared.windows.first?.rootViewController?.present(vc, animated: true) {
vc.player?.play()
}
}
}
}
```
上述代码片段显示了一个完整的 SwiftUI 组件结构,其中包含了对 `AVPlayer` 和相关组件的配置以及交互逻辑[^3]。
阅读全文
相关推荐



















