From ebc8584b97ea4b2b3ab66d59edb6928147a63420 Mon Sep 17 00:00:00 2001 From: Ryan Heise Date: Sat, 1 Aug 2020 02:07:09 +1000 Subject: [PATCH] Reuse audio source in setClip on iOS --- darwin/Classes/AudioPlayer.m | 28 ++++++++++++++++++++++++++-- darwin/Classes/ClippingAudioSource.m | 4 ++++ ios/Classes/ClippingAudioSource.h | 2 ++ 3 files changed, 32 insertions(+), 2 deletions(-) diff --git a/darwin/Classes/AudioPlayer.m b/darwin/Classes/AudioPlayer.m index dc43d04..fca125d 100644 --- a/darwin/Classes/AudioPlayer.m +++ b/darwin/Classes/AudioPlayer.m @@ -479,7 +479,26 @@ } } // Decode audio source - _audioSource = [self decodeAudioSource:source]; + if (_audioSource && [@"clipping" isEqualToString:source[@"type"]]) { + // Check if we're clipping an audio source that was previously loaded. + UriAudioSource *child = nil; + if ([_audioSource isKindOfClass:[ClippingAudioSource class]]) { + ClippingAudioSource *clipper = (ClippingAudioSource *)_audioSource; + child = clipper.audioSource; + } else if ([_audioSource isKindOfClass:[UriAudioSource class]]) { + child = (UriAudioSource *)_audioSource; + } + if (child) { + _audioSource = [[ClippingAudioSource alloc] initWithId:source[@"id"] + audioSource:child + start:source[@"start"] + end:source[@"end"]]; + } else { + _audioSource = [self decodeAudioSource:source]; + } + } else { + _audioSource = [self decodeAudioSource:source]; + } _indexedAudioSources = [[NSMutableArray alloc] init]; [_audioSource buildSequence:_indexedAudioSources treeIndex:0]; for (int i = 0; i < [_indexedAudioSources count]; i++) { @@ -523,7 +542,12 @@ [_indexedAudioSources[i] attach:_player]; } - // We send result after the playerItem is ready in observeValueForKeyPath. + if (_player.currentItem.status == AVPlayerItemStatusReadyToPlay) { + _connectionResult(@([self getDuration])); + _connectionResult = nil; + } else { + // We send result after the playerItem is ready in observeValueForKeyPath. + } } - (void)updateOrder { diff --git a/darwin/Classes/ClippingAudioSource.m b/darwin/Classes/ClippingAudioSource.m index 24e006a..8f7eb33 100644 --- a/darwin/Classes/ClippingAudioSource.m +++ b/darwin/Classes/ClippingAudioSource.m @@ -19,6 +19,10 @@ return self; } +- (UriAudioSource *)audioSource { + return _audioSource; +} + - (void)findById:(NSString *)sourceId matches:(NSMutableArray *)matches { [super findById:sourceId matches:matches]; [_audioSource findById:sourceId matches:matches]; diff --git a/ios/Classes/ClippingAudioSource.h b/ios/Classes/ClippingAudioSource.h index 6873bdc..127019e 100644 --- a/ios/Classes/ClippingAudioSource.h +++ b/ios/Classes/ClippingAudioSource.h @@ -4,6 +4,8 @@ @interface ClippingAudioSource : IndexedAudioSource +@property (readonly, nonatomic) UriAudioSource* audioSource; + - (instancetype)initWithId:(NSString *)sid audioSource:(UriAudioSource *)audioSource start:(NSNumber *)start end:(NSNumber *)end; @end