Commit 438aa794 authored by Laurin Quast's avatar Laurin Quast
Browse files

Add cache property; Make playerItemForSource in 'RCTVideoManager.m' async

parent 6b2c1046
Loading
Loading
Loading
Loading
+1 −0
Changes for Video.js: 1 added line, 0 removed lines.
Original line number Diff line number Diff line
@@ -247,6 +247,7 @@ export default class Video extends Component {
Video.propTypes = {
  /* Native only */
  src: PropTypes.object,
  cache: PropTypes.bool,
  seek: PropTypes.number,
  fullscreen: PropTypes.bool,
  onVideoLoadStart: PropTypes.func,
+21 −6
Changes for ios/RCTVideo.m: 21 added lines, 6 removed lines.
Original line number Diff line number Diff line
@@ -266,11 +266,23 @@ static NSString *const timedMetadata = @"timedMetadata";

#pragma mark - Player and source

- (void)setCache:(BOOL *)cache
{
  // @TODO: Implement
}

- (void)setSrc:(NSDictionary *)source
{
  [self removePlayerTimeObserver];
  [self removePlayerItemObservers];
  _playerItem = [self playerItemForSource:source];
  [self playerItemForSource:source withCallback:^(AVPlayerItem * playerItem) {
    [self didSetPlayerItemWithSource:source playerItem:playerItem];
  }];
}

- (void) didSetPlayerItemWithSource:(NSDictionary *)source playerItem:(AVPlayerItem *) playerItem
{
  _playerItem = playerItem;
  [self addPlayerItemObservers];
  
  [_player pause];
@@ -312,7 +324,7 @@ static NSString *const timedMetadata = @"timedMetadata";
  });
}

- (AVPlayerItem*)playerItemForSource:(NSDictionary *)source
- (void)playerItemForSource:(NSDictionary *)source withCallback:(void(^)(AVPlayerItem *))handler
{
  bool isNetwork = [RCTConvert BOOL:[source objectForKey:@"isNetwork"]];
  bool isAsset = [RCTConvert BOOL:[source objectForKey:@"isAsset"]];
@@ -324,16 +336,19 @@ static NSString *const timedMetadata = @"timedMetadata";
  [[NSURL alloc] initFileURLWithPath:[[NSBundle mainBundle] pathForResource:uri ofType:type]];
  
  if (isNetwork) {
    // @TODO: Check if item is cached an if so use the cached asset
    NSArray *cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies];
    AVURLAsset *asset = [AVURLAsset URLAssetWithURL:url options:@{AVURLAssetHTTPCookiesKey : cookies}];
    return [AVPlayerItem playerItemWithAsset:asset];
    handler([AVPlayerItem playerItemWithAsset:asset]);
    return;
  }
  else if (isAsset) {
    AVURLAsset *asset = [AVURLAsset URLAssetWithURL:url options:nil];
    return [AVPlayerItem playerItemWithAsset:asset];
    handler([AVPlayerItem playerItemWithAsset:asset]);
    return;
  }

  return [AVPlayerItem playerItemWithURL:url];
  handler([AVPlayerItem playerItemWithURL:url]);
  return;
}

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
+1 −0
Changes for ios/RCTVideoManager.m: 1 added line, 0 removed lines.
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ RCT_EXPORT_MODULE();
}

RCT_EXPORT_VIEW_PROPERTY(src, NSDictionary);
RCT_EXPORT_VIEW_PROPERTY(cache, BOOL);
RCT_EXPORT_VIEW_PROPERTY(resizeMode, NSString);
RCT_EXPORT_VIEW_PROPERTY(repeat, BOOL);
RCT_EXPORT_VIEW_PROPERTY(paused, BOOL);