当然!下面是关于 AVPlayer 在 iOS 中播放在线视频和本地文件(例如数据库存储路径的媒体文件)的详细讲解和示范代码,帮你快速上手。
AVPlayer 播放在线视频和本地文件(含数据库路径管理)设置教程
一、AVPlayer 简介
- AVPlayer 是苹果提供的音视频播放类,支持本地文件和网络流媒体。
- 支持 HLS、MP4、MOV 等格式。
- 适合用于 iOS/macOS 开发。
二、播放在线视频
import AVKit
import AVFoundation
// 在线视频URL
let videoURL = URL(string: "https://example.com/path/to/video.mp4")!
// 创建AVPlayer
let player = AVPlayer(url: videoURL)
// 创建播放器视图控制器
let playerViewController = AVPlayerViewController()
playerViewController.player = player
// 显示播放器视图控制器
present(playerViewController, animated: true) {
player.play()
}
三、播放本地文件(数据库存储路径)
假设你在数据库中保存了本地文件路径(或文件名),你需要:
- 从数据库获取文件路径(完整路径或相对路径)
- 将路径转换为 URL
- 通过 AVPlayer 播放
// 例如:从数据库获得文件名
let fileName = "localVideo.mp4"
// 获取本地沙盒 Documents 目录路径
let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first!
// 拼接完整文件路径
let filePath = (documentsPath as NSString).appendingPathComponent(fileName)
// 转成URL
let fileURL = URL(fileURLWithPath: filePath)
// 创建AVPlayer播放本地文件
let player = AVPlayer(url: fileURL)
let playerViewController = AVPlayerViewController()
playerViewController.player = player
present(playerViewController, animated: true) {
player.play()
}
四、数据库存储示例(简要)
通常你会用 SQLite、CoreData、Realm 等存储文件路径或视频信息。
示例:SQLite 存储文件名
CREATE TABLE videos (
id INTEGER PRIMARY KEY,
fileName TEXT
);
查询示例(伪代码):
func fetchVideoFileName(id: Int) -> String? {
// 执行查询
// 返回对应 fileName
return "localVideo.mp4" // 假设返回这个
}
五、注意事项
- 播放本地文件,路径一定要正确且文件存在。
- 在线视频需保证网络稳定,支持 HTTP/HTTPS。
- 需在 Info.plist 添加权限:
- 网络请求需配置
NSAppTransportSecurity
允许访问非 HTTPS (如需要)
- 网络请求需配置
- AVPlayer 默认不会自动显示控制条,使用 AVPlayerViewController 可自动包含控制条。
六、完整示例整合(假设数据库返回文件名)
import UIKit
import AVKit
class VideoPlayerViewController: UIViewController {
var player: AVPlayer?
var playerViewController: AVPlayerViewController?
override func viewDidLoad() {
super.viewDidLoad()
// 假设从数据库获取文件名
let fileName = fetchVideoFileName(id: 1) ?? ""
if fileName.starts(with: "http") {
playOnlineVideo(urlString: fileName)
} else {
playLocalVideo(fileName: fileName)
}
}
func fetchVideoFileName(id: Int) -> String? {
// 这里写数据库查询代码,返回路径或URL字符串
return "localVideo.mp4" // 或返回网络视频地址
}
func playOnlineVideo(urlString: String) {
guard let url = URL(string: urlString) else { return }
player = AVPlayer(url: url)
playerViewController = AVPlayerViewController()
playerViewController?.player = player
present(playerViewController!, animated: true) {
self.player?.play()
}
}
func playLocalVideo(fileName: String) {
let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first!
let filePath = (documentsPath as NSString).appendingPathComponent(fileName)
let fileURL = URL(fileURLWithPath: filePath)
player = AVPlayer(url: fileURL)
playerViewController = AVPlayerViewController()
playerViewController?.player = player
present(playerViewController!, animated: true) {
self.player?.play()
}
}
}
发表回复