[
](http://stackoverflow.com/questions/ask?tags=mobile player+ios+swift+video player)
一个强大且完全可定制的iOS媒体播放器。
目录
功能
- 品牌化
- 灵活的皮肤定制。添加水印、添加/删除/移动/调整界面元素尺寸、改变外观等更多操作。
- 轻松设置AB测试。您可以管理多个播放器皮肤和配置。播放器视图控制器可以从本地JSON文件或远程JSON数据加载配置数据。您还可以通过程序初始化和传递配置对象,以便提供更大的灵活性。
- 互动
- 带内嵌分享按钮。
- 标准分享行为可以轻松修改。
- 将任何视图控制器显示为预播放或尾幕内容。
- 强大的覆盖层系统。将任何视图控制器作为覆盖层添加到视频中。使它们始终可见、在指定的播放时间间隔或播放暂停时显示。
- 100%有文档。
未来计划
- 定义完善的广泛的
NSNotification
。 - 音量按钮和音量滑动条元素。
- 支持AirPlay。
- 插件支持。
- 为各个平台预捆绑的各类分析插件。
- 支持VAST。
- 货币化。
安装
CocoaPods
在您的Podfile
中添加以下行。
pod "MobilePlayer"
Carthage
将以下行添加到您的Cartfile中。
github "mobileplayer/mobileplayer-ios"
使用方法
import MobilePlayer
let playerVC = MobilePlayerViewController(contentURL: videoURL)
playerVC.title = "Vanilla Player - \(videoTitle)"
playerVC.activityItems = [videoURL] // Check the documentation for more information.
presentMoviePlayerViewControllerAnimated(playerVC)
自定义
使用本地配置文件初始化
let bundle = NSBundle.mainBundle()
let config = MobilePlayerConfig(fileURL: bundle.URLForResource(
"WatermarkedPlayer",
withExtension: "json")!)
let playerVC = MobilePlayerViewController(
contentURL: videoURL,
config: config)
playerVC.title = "Watermarked Player - \(videoTitle)"
playerVC.activityItems = [videoURL]
present(playerVC, animated: true, completion: nil)
使用远程配置数据初始化
guard let configURL = NSURL(string: "https://goo.gl/c73ANK") else { return }
let playerVC = MobilePlayerViewController(
contentURL: videoURL,
config: MobilePlayerConfig(fileURL: configURL))
playerVC.title = "Watermarked Player - \(videoTitle)"
playerVC.activityItems = [videoURL]
present(playerVC, animated: true, completion: nil)
配置数据
{
"watermark": {
"image": "MovielalaLogo"
}
}
没有配置文件URL
let playerVC = MobilePlayerViewController(
contentURL: videoURL,
config: MobilePlayerConfig(
dictionary: ["watermark": ["image": "MovielalaLogo"]]))
playerVC.title = "Watermarked Player - \(videoTitle)"
playerVC.activityItems = [videoURL]
present(playerVC, animated: true, completion: nil)
皮肤化
{
"watermark": {
"image": "MovielalaLogo",
"position": "topRight"
},
"topBar": {
"backgroundColor": ["#a60500b0", "#a60500a0"],
"elements": [
{
"type": "button",
"identifier": "close"
},
{
"type": "slider",
"identifier": "playback",
"trackHeight": 6,
"trackCornerRadius": 3,
"minimumTrackTintColor": "#eee",
"availableTrackTintColor": "#9e9b9a",
"maximumTrackTintColor": "#cccccc",
"thumbTintColor": "#f9f9f9",
"thumbBorderWidth": 1,
"thumbBorderColor": "#fff",
"marginRight": 4
}
]
},
"bottomBar": {
"backgroundColor": ["#a60500a0", "#a60500b0"],
"elements": [
{
"type": "label",
"text": "Now Watching",
"font": "Baskerville",
"size": 12,
"marginLeft": 8,
"marginRight": 8
},
{
"type": "label",
"identifier": "title",
"size": 14
},
{
"type": "button",
"identifier": "action"
},
{
"type": "toggleButton",
"identifier": "play"
}
]
}
}
对于所有可用的identifier
,请查看文档或此处。单个配置中不应重复使用相同的identifier
值。
显示覆盖层
let playerVC = MobilePlayerViewController(contentURL: videoURL)
playerVC.title = videoTitle
playerVC.activityItems = [videoURL]
present(playerVC, animated: true, completion: nil)
ProductStore.getProduct("1", success: { product in
guard let product = product else { return }
playerVC.showOverlayViewController(
BuyOverlayViewController(product: product))
})
显示定时覆盖
let playerVC = MobilePlayerViewController(contentURL: videoURL)
playerVC.title = videoTitle
playerVC.activityItems = [videoURL]
present(playerVC, animated: true, completion: nil)
ProductStore.getProductPlacementsForVideo(
videoID,
success: { productPlacements in
guard let productPlacements = productPlacements else { return }
for placement in productPlacements {
ProductStore.getProduct(placement.productID, success: { product in
guard let product = product else { return }
playerVC.showOverlayViewController(
BuyOverlayViewController(product: product),
startingAtTime: placement.startTime,
forDuration: placement.duration)
})
}
})
前置广告
let playerVC = MobilePlayerViewController(
contentURL: videoURL,
prerollViewController: PrerollOverlayViewController())
playerVC.title = videoTitle
playerVC.activityItems = [videoURL]
present(playerVC, animated: true, completion: nil)
暂停覆盖层
let playerVC = MobilePlayerViewController(
contentURL: videoURL,
pauseOverlayViewController: PauseOverlayViewController())
playerVC.title = videoTitle
playerVC.activityItems = [videoURL]
present(playerVC, animated: true, completion: nil)
后置广告
let playerVC = MobilePlayerViewController(
contentURL: videoURL,
postrollViewController: PostrollOverlayViewController())
playerVC.title = videoTitle
playerVC.activityItems = [videoURL]
present(playerVC, animated: true, completion: nil)
示例
在克隆仓库后,运行 MobilePlayerExamples
目标,可以查看多个用例的示例。
文档
该库的完整文档可在此 找到。
许可证
MobilePlayer开源版本的用法受Creative Commons许可证管理。只要是非商业用途,您就可以使用、修改、复制和分发这个版本,并提供归属,并在类似许可证下分享。请查阅此处。