SCPlayerSwift 0.0.4

SCPlayerSwift 0.0.4

KyleWhale 维护。



 
依赖项
Alamofire>= 0
SnapKit~> 5.0.0
NVActivityIndicatorView~> 4.7.0
Zip>= 0
LQGConstant>= 0
 

BMPlayer

Swift 2.2-5.0 Carthage compatible Version License Platform Weibo FOSSA Status

一个基于 AVPlayer 的 iOS 视频播放器,支持横向和纵向屏幕。支持调整音量、亮度并通过滑动查找,支持字幕。

中文说明

特性

  • 支持横纵向播放模式
  • 支持播放在线 URL 和本地文件
  • 通过屏幕左侧垂直滑动调整亮度
  • 通过屏幕右侧垂直滑动调整音量
  • 水平滑动前进和后退
  • 支持多分辨率视频
  • 自定义播放速率
  • 添加 Http header 和其他选项到 AVURLAsset
  • 易于自定义
  • 支持显示本地和在线字幕
  • Swift 5

要求

  • iOS 10.0+
  • Xcode 10.0+
  • Swift 4+

支持项目

您可以通过访问我们的赞助页面来支持项目。只需点击一次

Sponsor banner
此广告由 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

演示

gif

参考文献

本项目大量参考了该项目的 Objective-C 版本 ZFPlayer,感谢 ZFPlayer 作者的帮助。

联系方式:

贡献者

欢迎使用分支并提交pull请求。

许可证

BMPlayer遵循MIT许可证。更多详细信息,请参阅LICENSE文件。

FOSSA Status