MobilePlayer 1.3.0

MobilePlayer 1.3.0

测试已测试
语言语言 SwiftSwift
许可 NOASSERTION
发布最后发布2019年4月
SPM支持SPM

Baris SencanToygar Dundaralp维护。



  • Barış Şencan和Cem Olcay

logo

MobilePlayer CocoaPods

codebeat badge CocoaPods Carthage compatible Dependencies Ready [StackOverflow](http://stackoverflow.com/questions/ask?tags=mobile player+ios+swift+video player) Join the chat at https://gitter.im/mobileplayer/mobileplayer-ios

一个强大且完全可定制的iOS媒体播放器。

introduction

目录

  1. 功能
  2. 安装
  3. 使用
  4. 自定义
  1. 示例
  2. 文档
  3. 许可

功能

  • 品牌化
    • 灵活的皮肤定制。添加水印、添加/删除/移动/调整界面元素尺寸、改变外观等更多操作。
    • 轻松设置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)

example-plain

自定义

使用本地配置文件初始化

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)

结果 example-customization

皮肤化

{
  "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值。

结果 example-skinning

示例设计 example-design-skinning

显示覆盖层

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))
})

example-overlay

显示定时覆盖

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)
      })
    }
})

example-timed-overlays

前置广告

let playerVC = MobilePlayerViewController(
  contentURL: videoURL,
  prerollViewController: PrerollOverlayViewController())
playerVC.title = videoTitle
playerVC.activityItems = [videoURL]
present(playerVC, animated: true, completion: nil)

example-preroll

暂停覆盖层

let playerVC = MobilePlayerViewController(
  contentURL: videoURL,
  pauseOverlayViewController: PauseOverlayViewController())
playerVC.title = videoTitle
playerVC.activityItems = [videoURL]
present(playerVC, animated: true, completion: nil)

结果 example-pause-overlay

示例设计 example-design-pause-overlay

后置广告

let playerVC = MobilePlayerViewController(
  contentURL: videoURL,
  postrollViewController: PostrollOverlayViewController())
playerVC.title = videoTitle
playerVC.activityItems = [videoURL]
present(playerVC, animated: true, completion: nil)

结果 example-postroll

示例设计 example-design-postroll

示例

在克隆仓库后,运行 MobilePlayerExamples 目标,可以查看多个用例的示例。examples

文档

该库的完整文档可在此 找到

许可证

MobilePlayer开源版本的用法受Creative Commons许可证管理。只要是非商业用途,您就可以使用、修改、复制和分发这个版本,并提供归属,并在类似许可证下分享。请查阅此处