let header = ["User-Agent":"KSPlayer"]
let options = KSOptions()
options.avOptions = ["AVURLAssetHTTPHeaderFieldsKey":header]
let definition = KSPlayerResourceDefinition(url: URL(string: "http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4")!,
definition: "高清",
options: options)
let asset = KSPlayerResource(name: "Video Name",
definitions: [definition])
playerView.set(resource: asset)
监听状态变化
//Listen to when the play time changes
playerView.playTimeDidChange = { (currentTime: TimeInterval, totalTime: TimeInterval) in
print("playTimeDidChange currentTime: \(currentTime) totalTime: \(totalTime)")
}
///协议方式
public protocol PlayerControllerDelegate: class {
func playerController(state: KSPlayerState)
func playerController(currentTime: TimeInterval, totalTime: TimeInterval)
func playerController(finish error: Error?)
func playerController(maskShow: Bool)
func playerController(action: PlayerButtonType)
// bufferedCount: 0代表首次加载
func playerController(bufferedCount: Int, consumeTime: TimeInterval)
}
六、进阶用法
继承 PlayerView 自定义播放逻辑和UI。
设置KSOptions 里面的属性
open class KSOptions {
// public static let shared = KSOptions()
/// 最低缓存视频时间
@Published public var preferredForwardBufferDuration = KSOptions.preferredForwardBufferDuration
/// 最大缓存视频时间
public var maxBufferDuration = KSOptions.maxBufferDuration
/// 是否开启秒开
public var isSecondOpen = KSOptions.isSecondOpen
/// 开启精确seek
public var isAccurateSeek = KSOptions.isAccurateSeek
/// Applies to short videos only
public var isLoopPlay = KSOptions.isLoopPlay
/// 是否自动播放,默认false
public var isAutoPlay = KSOptions.isAutoPlay
/// seek完是否自动播放
public var isSeekedAutoPlay = KSOptions.isSeekedAutoPlay
/*
AVSEEK_FLAG_BACKWARD: 1
AVSEEK_FLAG_BYTE: 2
AVSEEK_FLAG_ANY: 4
AVSEEK_FLAG_FRAME: 8
*/
public var seekFlags = Int32(1)
// ffmpeg only cache http
public var cache = false
public var outputURL: URL?
public var display = DisplayEnum.plane
public var audioDelay = 0.0 // s
public var subtitleDelay = 0.0 // s
public var videoDisable = false
public var audioFilters: String?
public var videoFilters: String?
public var subtitleDisable = false
public var videoAdaptable = true
public var syncDecodeAudio = false
public var syncDecodeVideo = false
public var avOptions = [String: Any]()
public var formatContextOptions = [String: Any]()
public var hardwareDecode = true
public var decoderOptions = [String: Any]()
public var probesize: Int64?
public var maxAnalyzeDuration: Int64?
public var lowres = UInt8(0)
public var autoSelectEmbedSubtitle = true
public var asynchronousDecompression = false
public var autoDeInterlace = false
}
KSPlayer
一、介绍
KSPlayer是一款基于 AVPlayer, FFmpeg 纯Swift的音视频播放器,支持所有视频格式和全景视频,支持苹果全平台。实现高可用,高性能的音视频播放能力。它包含UI控件模块、字幕模块、播放器内核模块。这些模块都是解耦的,可以通过pod按需接入。
原理详解
二、功能
三、要求
四、安装
CocoaPods
确保使用最新版本 **cocoapods 1.10.1+, 可以使用命令
brew install cocoapods
来安装Swift Package Manager
Demo
进Demo目录打开Demo.xcworkspace。
五、使用
初始化
设置普通视频
多清晰度,带封面视频
设置 HTTP header
监听状态变化
六、进阶用法
继承 PlayerView 自定义播放逻辑和UI。
设置KSOptions 里面的属性
七、效果:
八、参考:
本项目参考了 ZFPlayer、**SGPlayer**