BMPlayer
一个基于 AVPlayer 的 iOS 视频播放器,支持横向和纵向屏幕。支持调整音量、亮度并通过滑动查找,支持字幕。
特性
- 支持横纵向播放模式
- 支持播放在线 URL 和本地文件
- 通过屏幕左侧垂直滑动调整亮度
- 通过屏幕右侧垂直滑动调整音量
- 水平滑动前进和后退
- 支持多分辨率视频
- 自定义播放速率
- 添加 Http header 和其他选项到 AVURLAsset
- 易于自定义
- 支持显示本地和在线字幕
- Swift 5
要求
- iOS 10.0+
- Xcode 10.0+
- Swift 4+
支持项目
您可以通过访问我们的赞助页面来支持项目。只需点击一次
此广告由 GitAds 提供
安装
CocoaPods
Swift | podfile |
---|---|
Swift 5.0 | pod 'BMPlayer', '~> 1.3.0' |
Swift 4.2 | pod 'BMPlayer', '~> 1.2.0' |
Swift 4.0 | pod 'BMPlayer', '~> 1.0.0' |
Swift 3.0 | pod 'BMPlayer', '~> 0.9.1' |
Swift 2.2 | pod 'BMPlayer', '~> 0.3.3' |
要测试使用 VIMediaCache 的实验性缓存支持,使用
pod 'BMPlayer/CacheSupport', :git => 'https://github.com/BrikerMan/BMPlayer.git'
Swift 包管理器
'https://github.com/BrikerMan/BMPlayer.git'
Carthage
在您的 Cartfile 中添加 BMPlayer
。
github "BrikerMan/BMPlayer"
运行 carthage 来构建框架并将构建的 BMPlayer.framework 拖到您的 Xcode 项目中。
演示
在运行演示之前,在 Example
文件夹中运行 pod install
。
用法(支持 IB 和代码)
设置状态栏颜色
请在 info.plist 中添加 View controller-based status bar appearance
字段并将其更改为 NO
IB 使用
将 IB 直接拖动到 UIView 上,16:9 比例(优先级为 750,低于 1000 行),代码部分只需实现。更详细的信息请参见演示。
import BMPlayer
player.playWithURL(URL(string: url)!)
player.backBlock = { [unowned self] (isFullScreen) in
if isFullScreen == true { return }
let _ = self.navigationController?.popViewController(animated: true)
}
通过 SnapKit 代码实现 SnapKit
import BMPlayer
player = BMPlayer()
view.addSubview(player)
player.snp.makeConstraints { (make) in
make.top.equalTo(self.view).offset(20)
make.left.right.equalTo(self.view)
// Note here, the aspect ratio 16:9 priority is lower than 1000 on the line, because the 4S iPhone aspect ratio is not 16:9
make.height.equalTo(player.snp.width).multipliedBy(9.0/16.0).priority(750)
}
// Back button event
player.backBlock = { [unowned self] (isFullScreen) in
if isFullScreen == true { return }
let _ = self.navigationController?.popViewController(animated: true)
}
设置视频 URL
let asset = BMPlayerResource(url: URL(string: "http://baobab.wdjcdn.com/14525705791193.mp4")!,
name: "风格互换:原来你我相爱")
player.setVideo(resource: asset)
带有封面的多分辨率视频
let res0 = BMPlayerResourceDefinition(url: URL(string: "http://baobab.wdjcdn.com/1457162012752491010143.mp4")!,
definition: "高清")
let res1 = BMPlayerResourceDefinition(url: URL(string: "http://baobab.wdjcdn.com/1457162012752491010143.mp4")!,
definition: "标清")
let asset = BMPlayerResource(name: "周末号外丨中国第一高楼",
definitions: [res0, res1],
cover: URL(string: "http://img.wdjimg.com/image/video/447f973848167ee5e44b67c8d4df9839_0_0.jpeg"))
player.setVideo(resource: asset)
为请求添加 HTTP header
let header = ["User-Agent":"BMPlayer"]
let options = ["AVURLAssetHTTPHeaderFieldsKey":header]
let definition = BMPlayerResourceDefinition(url: URL(string: "http://baobab.wdjcdn.com/1457162012752491010143.mp4")!,
definition: "高清",
options: options)
let asset = BMPlayerResource(name: "Video Name",
definitions: [definition])
监听播放器状态变化
更多详情请查阅示例项目
块
//Listen to when the player is playing or stopped
player?.playStateDidChange = { (isPlaying: Bool) in
print("playStateDidChange \(isPlaying)")
}
//Listen to when the play time changes
player?.playTimeDidChange = { (currentTime: TimeInterval, totalTime: TimeInterval) in
print("playTimeDidChange currentTime: \(currentTime) totalTime: \(totalTime)")
}
委托
protocol BMPlayerDelegate {
func bmPlayer(player: BMPlayer ,playerStateDidChange state: BMPlayerState) { }
func bmPlayer(player: BMPlayer ,loadedTimeDidChange loadedDuration: TimeInterval, totalDuration: TimeInterval) { }
func bmPlayer(player: BMPlayer ,playTimeDidChange currentTime : TimeInterval, totalTime: TimeInterval) { }
func bmPlayer(player: BMPlayer ,playerIsPlaying playing: Bool) { }
}
自定义播放器
在播放器 alloc 之前需要更改
// should print log, default false
BMPlayerConf.allowLog = false
// should auto play, default true
BMPlayerConf.shouldAutoPlay = true
// main tint color, default whiteColor
BMPlayerConf.tintColor = UIColor.whiteColor()
// options to show header view (which include the back button, title and definition change button) , default .Always,options: .Always, .HorizantalOnly and .None
BMPlayerConf.topBarShowInCase = .Always
// loader type, see detail:https://github.com/ninjaprox/NVActivityIndicatorView
BMPlayerConf.loaderType = NVActivityIndicatorType.BallRotateChase
// enable setting the brightness by touch gesture in the player
BMPlayerConf.enableBrightnessGestures = true
// enable setting the volume by touch gesture in the player
BMPlayerConf.enableVolumeGestures = true
// enable setting the playtime by touch gesture in the player
BMPlayerConf.enablePlaytimeGestures = true
高级自定义
- 从
BMPlayerControlView
派生以创建您自己的控制 UI,请检查示例。 - 使用您自己的播放器控制视图与
BMPlayerLayer
。
演示
参考文献
本项目大量参考了该项目的 Objective-C 版本 ZFPlayer,感谢 ZFPlayer 作者的帮助。
联系方式:
- 博客: https://eliyar.biz
- Email: [email protected]
贡献者
欢迎使用分支并提交pull请求。
许可证
BMPlayer遵循MIT许可证。更多详细信息,请参阅LICENSE文件。