Merge pull request #3216 from Duell10111/tvos-custom-playback-exerpience-fork
feat: allow customization of tvOS playback expierence
This commit is contained in:
@@ -14,6 +14,7 @@ class RCTVideo: UIView, RCTVideoPlayerViewControllerDelegate, RCTPlayerObserverH
|
||||
private var _source:VideoSource?
|
||||
private var _playerBufferEmpty:Bool = true
|
||||
private var _playerLayer:AVPlayerLayer?
|
||||
private var _chapters:[Chapter]?
|
||||
|
||||
private var _playerViewController:RCTVideoPlayerViewController?
|
||||
private var _videoURL:NSURL?
|
||||
@@ -369,7 +370,7 @@ class RCTVideo: UIView, RCTVideoPlayerViewControllerDelegate, RCTPlayerObserverH
|
||||
|
||||
func playerItemPrepareText(asset:AVAsset!, assetOptions:NSDictionary?) -> AVPlayerItem {
|
||||
if (_textTracks == nil) || _textTracks?.count==0 {
|
||||
return AVPlayerItem(asset: asset)
|
||||
return self.playerItemPropegateMetadata(AVPlayerItem(asset: asset))
|
||||
}
|
||||
|
||||
// AVPlayer can't airplay AVMutableCompositions
|
||||
@@ -384,7 +385,35 @@ class RCTVideo: UIView, RCTVideoPlayerViewControllerDelegate, RCTPlayerObserverH
|
||||
setTextTracks(validTextTracks)
|
||||
}
|
||||
|
||||
return AVPlayerItem(asset: mixComposition)
|
||||
return self.playerItemPropegateMetadata(AVPlayerItem(asset: mixComposition))
|
||||
}
|
||||
|
||||
func playerItemPropegateMetadata(_ playerItem: AVPlayerItem!) -> AVPlayerItem {
|
||||
var mapping: [AVMetadataIdentifier: Any] = [:]
|
||||
|
||||
if let title = _source?.title {
|
||||
mapping[.commonIdentifierTitle] = title
|
||||
}
|
||||
|
||||
if let subtitle = _source?.subtitle {
|
||||
mapping[.iTunesMetadataTrackSubTitle] = subtitle
|
||||
}
|
||||
|
||||
if let description = _source?.description {
|
||||
mapping[.commonIdentifierDescription] = description
|
||||
}
|
||||
|
||||
if #available(iOS 12.2, *), !mapping.isEmpty {
|
||||
playerItem.externalMetadata = RCTVideoUtils.createMetadataItems(for: mapping)
|
||||
}
|
||||
|
||||
#if os(tvOS)
|
||||
if let chapters = _chapters {
|
||||
playerItem.navigationMarkerGroups = RCTVideoTVUtils.makeNavigationMarkerGroups(chapters)
|
||||
}
|
||||
#endif
|
||||
|
||||
return playerItem
|
||||
}
|
||||
|
||||
// MARK: - Prop setters
|
||||
@@ -674,6 +703,15 @@ class RCTVideo: UIView, RCTVideoPlayerViewControllerDelegate, RCTPlayerObserverH
|
||||
// in case textTracks was set after selectedTextTrack
|
||||
if (_selectedTextTrackCriteria != nil) {setSelectedTextTrack(_selectedTextTrackCriteria)}
|
||||
}
|
||||
|
||||
@objc
|
||||
func setChapters(_ chapters:[NSDictionary]?) {
|
||||
setChapters(chapters?.map { Chapter($0) })
|
||||
}
|
||||
|
||||
func setChapters(_ chapters:[Chapter]?) {
|
||||
_chapters = chapters
|
||||
}
|
||||
|
||||
@objc
|
||||
func setFullscreen(_ fullscreen:Bool) {
|
||||
|
||||
Reference in New Issue
Block a user