FWPlayer 1.0.13

FWPlayer 1.0.13

Hui Wang 维护。



FWPlayer 1.0.13

  • 作者:Hui Wang
  • Hui Wang

FWPlayer

Swift5 Version Carthage compatible License Platform

FWPlayer

基于 AVPlayer 的一个适用于 iOS 的视频播放器 SDK。

特性

  • 支持横竖屏播放
  • 支持自动旋转屏幕播放
  • 支持全屏和迷你播放器播放
  • 支持拖动迷你播放器位置
  • 支持网络和本地视频播放
  • 支持全屏锁定
  • 支持下载时播放(媒体缓存)
  • 支持在屏幕左侧垂直滑动调整亮度
  • 支持在屏幕右侧垂直滑动调整音量
  • 支持手势快速前进和后退
  • 支持拖动滑块快速前进和后退
  • 支持直接跳转到时间线上的一个点进行播放
  • 支持多种视频格式
  • 支持 UITableView 播放
  • 支持 UICollectionView 播放
  • 支持 UIScrollView 播放
  • 支持后台播放
  • 支持静音模式播放声音
  • 支持变速播放(0.5x, 1.0x, 1.25x, 1.5x, 2.0x)
  • 支持自定义播放器视图
  • 支持广告视图
  • 支持向 AVURLAsset 添加 Http 头和其他选项
  • 由于 iOS 12 中已弃用 OpenGL ES,因此不支持 FFmpeg。

要求

  • iOS 9+
  • Xcode 10.2.1+

安装

您可以以多种方式安装FWPlayer SDK

  1. CocoaPods
  2. Carthage
  3. 手动安装

CocoaPods

CocoaPods 是安装FWPlayer的一个简单方法。

  1. 将以下项添加到您的 Podfile
platform :ios, '9.0'

target 'Your App' do
    pod 'FWPlayer'
end
  1. 然后,执行以下命令
$ pod install
  1. 切换到 构建阶段 并通过点击编辑器左上角的 + 添加一个 新运行脚本阶段。添加以下命令以解决 App Store 提交问题
bash "${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}/FWPlayerCore.framework/strip-frameworks.sh"

Carthage

由于FWPlayer SDK是作为二进制文件散发的,您需要在您的 Cartfile 中使用自定义 binary 规则。

  1. 将以下内容添加到您的 Cartfile
binary "https://raw.githubusercontent.com/FoksWang/FWPlayer/master/Carthage/FWPlayer.json" ~> 1.0.7
  1. 通过运行以下命令获取框架
$ carthage update --platform iOS

手动安装

  1. 将FWPlayer框架添加到您的目标的 嵌入式二进制文件
FWPlayerCore.framework
  1. 确保您链接以下 链接框架和库
FWPlayerCore.framework

使用

正常样式

Objective-C

FWAVPlayerManager *playerManager = [[FWAVPlayerManager alloc] init];
self.player = [FWPlayerController playerWithPlayerManager:playerManager containerView:self.containerView];
self.player.controlView = self.controlView;

Swift

private var player: FWPlayerController?

private lazy var containerView: UIImageView = {
	let imageView = UIImageView()
	imageView.setImageWithURLString(coverImageUrl, placeholder: UIImage(named: "placeholder"))
	return imageView
}()

private lazy var controlView: FWPlayerControlView =  {
	let view = FWPlayerControlView()
	view.fastViewAnimated = true
	view.autoHiddenTimeInterval = 5.0
	view.autoFadeTimeInterval = 0.5
	view.prepareShowLoading = true
	view.prepareShowControlView = true
	return view
}()

let playerManager = FWAVPlayerManager()
playerManager.isEnableMediaCache = false

// Setup player
self.player = FWPlayerController(playerManager: playerManager, containerView: self.containerView)
self.player?.controlView = self.controlView

// Setup continue playing in the background
self.player?.pauseWhenAppResignActive = true

self.player?.orientationWillChange = { [weak self] (player, isFullScreen) in
	self?.setNeedsStatusBarAppearanceUpdate()
}

// Finished playing
self.player?.playerDidToEnd = { [weak self] (asset) in
	guard let strongSelf = self else {
		return
	}
	strongSelf.player?.currentPlayerManager.replay!()
	strongSelf.player?.playTheNext()
	if strongSelf.player?.isLastAssetURL == false {
		strongSelf.controlView.showTitle("Video Title", coverURLString: strongSelf.kVideoCover, fullScreenMode: .landscape)
	} else {
		strongSelf.player?.stop()
	}
}

self.player?.assetURLs = self.assetURLs

要播放下一个或上一个视频,只需设置

Objective-C

self.player.assetURLs = self.assetURLs;

Swift

self.player!.assetURLs = self.assetURLs
  • 要播放下一个视频,请调用方法 playTheNext
  • 要播放上一个视频,请调用方法 playThePrevious
  • 要播放资产列表中的视频,请调用方法 playTheIndex:index

例如,播放下一个视频

Objective-C

if (!self.player.isLastAssetURL) {
    [self.player playTheNext];
    [self.controlView showTitle:@"Video title" coverURLString:kVideoCover fullScreenMode:FWFullScreenModeAutomatic];
} else {
    NSLog(@"No more videos");
}

Swift

if self.player!.isLastAssetURL == false {
    self.player!.playTheNext()
    self.controlView.showTitle("Video title", coverURLString: kVideoCover, fullScreenMode: .automatic)
} else {
    print("No more videos")
}

列表样式

Objective-C

FWAVPlayerManager *playerManager = [[FWAVPlayerManager alloc] init];
self.player = [FWPlayerController playerWithScrollView:self.tableView playerManager:playerManager containerViewTag:tag];
self.player.controlView = self.controlView;

Swift

let playerManager = FWAVPlayerManager()
self.player = FWPlayerController(scrollView: tableView, playerManager: playerManager, containerViewTag: tag)
self.player!.controlView = self.controlView
  • 您的自定义播放器管理器必须符合 FWPlayerMediaPlayback 协议。
  • 您的自定义控制视图必须符合 FWPlayerMediaControl 协议。

如果视频旋转,必须在 ViewController 中实现

Objective-C

- (BOOL)shouldAutorotate {
    return player.shouldAutorotate;
}

Swift

override var shouldAutorotate: Bool {
  return self.player?.shouldAutorotate ?? false
}

在下载时使用回放(媒体缓存)

回放时下载(媒体缓存) 函数不支持 m3u8,通常用于 MP4。

  1. 设置 isEnableMediaCache

Objective-C

playerManager.isEnableMediaCache = YES;

Swift

playerManager.isEnableMediaCache = true
  1. 在您的 Info.plist 中设置 NSAppTransportSecurity
<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

演示

屏幕截图

        

视频

FWPlayer demo

参考文献

作者

(Foks)王辉, [email protected]

许可证

FWPlayer根据MIT许可证提供。有关更多信息,请参阅LICENSE文件。