在网络上播放 Vimeo 视频会显示像这样的隐藏字幕控件。
如何使用 Vimeo/PlayerKit 在 iOS 上显示类似的控件?
我看了很多次,但根本没有找到有关播放器套件的文档。
由于没有其他人提出答案,这就是我所做的。Vimeo/PlayerKit 中文本轨道的文档可在文件 Player.swift 和 RegularPlayer.swift 中找到。
由此我构建了一个 UIButton 子类 CloseCaptionButton,我在视频播放时将其显示在视频上,并允许用户切换音轨。
// A UIAlertAction subclass to pass language code to selected action.
class TaggedAlertAction: UIAlertAction {
var languageCode: String?
public convenience init(title: String?, languageCode: String?, style: UIAlertAction.Style, handler: ((UIAlertAction) -> Void)? = nil) {
self.init(title: title, style: style, handler: handler)
self.languageCode = languageCode
}
}
class CloseCaptionButton: UIButton {
var languages: [PlayerKit.TextTrackMetadata]?
func handleTapFrom(vc: UIViewController, videoPlayer: RegularPlayer) {
guard let languages = languages else { return print("NIL LANGUAGES, Couldn't open language picker") }
let alert = UIAlertController(title: "Pick Captions Language", message: nil, preferredStyle: .actionSheet)
// Create an action item in alert for each language.
languages.forEach({ (textTrack) in
let languageCode = textTrack.language
let name = textTrack.title
alert.addAction(TaggedAlertAction(title: name, languageCode: languageCode, style: .default) { action in
let identifier = (action as! TaggedAlertAction).languageCode
self.selectTrackFor(identifier, videoPlayer: videoPlayer)
})
})
// Last action item allows user to turn off captions (or cancel).
alert.addAction(UIAlertAction(title: "Turn Off Captions", style: .default) { _ in
videoPlayer.select(nil)
})
alert.popoverPresentationController?.sourceView = vc.view
vc.present(alert, animated: true)
}
func selectTrackFor(_ languageCode: String?, videoPlayer: RegularPlayer) {
guard let languageCode = languageCode else { return print("NIL IDENTIFIER") }
let matches = videoPlayer.availableTextTracks.filter({ (track) -> Bool in
return track.language == languageCode
})
guard let match = matches.first else {
return print("No match for language: \(languageCode)")
}
videoPlayer.select(match)
}
// Configure with player.availableTextTracks
func configure(_ tracks: [PlayerKit.TextTrackMetadata]) {
languages = Languages(trackMetadata: tracks)
}
}
// How to use
closeCaptionButton.configure(videoPlayer.availableTextTracks)
@IBAction func ccButtonTapped(_ sender: Any) {
closeCaptionButton.handleTapFrom(vc: self, videoPlayer: videoPlayer)
}
请享受!