Skip to content

Commit

Permalink
Updated STKHttpDataSource to support dynamically generated URLs with …
Browse files Browse the repository at this point in the history
…each 'open' or 'seek')
  • Loading branch information
tumtumtum committed Jan 20, 2014
1 parent 93e6f4b commit 9b952de
Show file tree
Hide file tree
Showing 8 changed files with 71 additions and 34 deletions.
4 changes: 4 additions & 0 deletions ExampleApp/ExampleApp.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
A1115967188D6AEE00641365 /* AudioPlayerView.m in Sources */ = {isa = PBXBuildFile; fileRef = A1115966188D6AEE00641365 /* AudioPlayerView.m */; };
A111596C188D6C8100641365 /* sample.m4a in Resources */ = {isa = PBXBuildFile; fileRef = A111596B188D6C8100641365 /* sample.m4a */; };
A111596F188D6DB100641365 /* SampleQueueId.m in Sources */ = {isa = PBXBuildFile; fileRef = A111596E188D6DB100641365 /* SampleQueueId.m */; };
A1EBEE64188DE34500681B04 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A1EBEE63188DE34500681B04 /* SystemConfiguration.framework */; };
/* End PBXBuildFile section */

/* Begin PBXContainerItemProxy section */
Expand Down Expand Up @@ -58,13 +59,15 @@
A111596B188D6C8100641365 /* sample.m4a */ = {isa = PBXFileReference; lastKnownFileType = file; name = sample.m4a; path = Resources/sample.m4a; sourceTree = "<group>"; };
A111596D188D6DB100641365 /* SampleQueueId.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SampleQueueId.h; sourceTree = "<group>"; };
A111596E188D6DB100641365 /* SampleQueueId.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SampleQueueId.m; sourceTree = "<group>"; };
A1EBEE63188DE34500681B04 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; };
/* End PBXFileReference section */

/* Begin PBXFrameworksBuildPhase section */
A111592E188D686000641365 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
A1EBEE64188DE34500681B04 /* SystemConfiguration.framework in Frameworks */,
A1115964188D691500641365 /* libStreamingKit.a in Frameworks */,
A1115937188D686000641365 /* CoreGraphics.framework in Frameworks */,
A1115939188D686000641365 /* UIKit.framework in Frameworks */,
Expand Down Expand Up @@ -107,6 +110,7 @@
A1115933188D686000641365 /* Frameworks */ = {
isa = PBXGroup;
children = (
A1EBEE63188DE34500681B04 /* SystemConfiguration.framework */,
A1115963188D691500641365 /* libStreamingKit.a */,
A1115934188D686000641365 /* Foundation.framework */,
A1115936188D686000641365 /* CoreGraphics.framework */,
Expand Down
5 changes: 4 additions & 1 deletion ExampleApp/ExampleApp/AppDelegate.m
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
#import "AppDelegate.h"
#import "STKAudioPlayer.h"
#import "AudioPlayerView.h"
#import "STKAutoRecoveringHttpDataSource.h"
#import "SampleQueueId.h"
#import <AVFoundation/AVFoundation.h>

Expand Down Expand Up @@ -48,7 +49,9 @@ -(void) audioPlayerViewPlayFromHTTPSelected:(AudioPlayerView*)audioPlayerView
{
NSURL* url = [NSURL URLWithString:@"http://fs.bloom.fm/oss/audiosamples/sample.mp3"];

[audioPlayer setDataSource:[audioPlayer dataSourceFromURL:url] withQueueItemId:[[SampleQueueId alloc] initWithUrl:url andCount:0]];
STKAutoRecoveringHttpDataSource* dataSource = [[STKAutoRecoveringHttpDataSource alloc] initWithHttpDataSource:(STKHttpDataSource*)[audioPlayer dataSourceFromURL:url]];

[audioPlayer setDataSource:dataSource withQueueItemId:[[SampleQueueId alloc] initWithUrl:url andCount:0]];
}

-(void) audioPlayerViewPlayFromLocalFileSelected:(AudioPlayerView*)audioPlayerView
Expand Down
25 changes: 15 additions & 10 deletions StreamingKit/StreamingKit/STKAudioPlayer.m
Original file line number Diff line number Diff line change
Expand Up @@ -316,9 +316,9 @@ -(void) setInternalState:(AudioPlayerInternalState)value
if ([self.delegate respondsToSelector:@selector(audioPlayer:internalStateChanged:)])
{
dispatch_async(dispatch_get_main_queue(), ^
{
[self.delegate audioPlayer:self internalStateChanged:internalState];
});
{
[self.delegate audioPlayer:self internalStateChanged:internalState];
});
}

AudioPlayerState newState;
Expand Down Expand Up @@ -531,7 +531,12 @@ -(void) clearQueue

while (bufferingQueue.count > 0)
{
[array addObject:[[bufferingQueue dequeue] queueItemId]];
id queueItemId = [[bufferingQueue dequeue] queueItemId];

if (queueItemId != nil)
{
[array addObject:queueItemId];
}
}

for (QueueEntry* entry in upcomingQueue)
Expand All @@ -542,12 +547,12 @@ -(void) clearQueue
[upcomingQueue removeAllObjects];

dispatch_async(dispatch_get_main_queue(), ^
{
if ([self.delegate respondsToSelector:@selector(audioPlayer:didCancelQueuedItems:)])
{
[self.delegate audioPlayer:self didCancelQueuedItems:array];
}
});
{
if ([self.delegate respondsToSelector:@selector(audioPlayer:didCancelQueuedItems:)])
{
[self.delegate audioPlayer:self didCancelQueuedItems:array];
}
});
}
pthread_mutex_unlock(&playerMutex);
}
Expand Down
7 changes: 7 additions & 0 deletions StreamingKit/StreamingKit/STKAutoRecoveringHttpDataSource.m
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,11 @@ -(STKHttpDataSource*) innerHttpDataSource
return (STKHttpDataSource*)self.innerDataSource;
}

-(id) initWithDataSource:(STKDataSource *)innerDataSource
{
return [self initWithHttpDataSource:(STKHttpDataSource*)innerDataSource];
}

-(id) initWithHttpDataSource:(STKHttpDataSource*)innerDataSourceIn
{
if (self = [super initWithDataSource:innerDataSourceIn])
Expand Down Expand Up @@ -143,6 +148,8 @@ -(BOOL) hasGotNetworkConnection

-(void) dealloc
{
NSLog(@"STKAutoRecoveringHttpDataSource dealloc");

self.innerDataSource.delegate = nil;

[self stopNotifier];
Expand Down
14 changes: 4 additions & 10 deletions StreamingKit/StreamingKit/STKHttpDataSource.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,21 +34,15 @@

#import "STKCoreFoundationDataSource.h"

typedef NSURL*(^URLProvider)();

@interface STKHttpDataSource : STKCoreFoundationDataSource
{
@private
int seekStart;
int relativePosition;
long long fileLength;
int discontinuous;
NSDictionary* httpHeaders;
AudioFileTypeID audioFileTypeHint;
}

@property (readwrite, retain) NSURL* url;
@property (readonly, retain) NSURL* url;
@property (readwrite) UInt32 httpStatusCode;

+(AudioFileTypeID) audioFileTypeHintFromMimeType:(NSString*)fileExtension;
-(id) initWithURL:(NSURL*)url;
-(id) initWithURLProvider:(URLProvider)urlProvider;

@end
36 changes: 32 additions & 4 deletions StreamingKit/StreamingKit/STKHttpDataSource.m
Original file line number Diff line number Diff line change
Expand Up @@ -36,30 +36,56 @@ This product includes software developed by Thong Nguyen ([email protected])
#import "STKLocalFileDataSource.h"

@interface STKHttpDataSource()
{
@private
int seekStart;
int relativePosition;
long long fileLength;
int discontinuous;
NSURL* currentUrl;
URLProvider urlProvider;
NSDictionary* httpHeaders;
AudioFileTypeID audioFileTypeHint;
}
-(void) open;

@end

@implementation STKHttpDataSource
@synthesize url;

-(id) initWithURL:(NSURL*)urlIn
{
return [self initWithURLProvider:^NSURL* { return urlIn; }];
}

-(id) initWithURLProvider:(URLProvider)urlProviderIn
{
if (self = [super init])
{
seekStart = 0;
relativePosition = 0;
fileLength = -1;

self.url = urlIn;
self->urlProvider = urlProviderIn;

[self open];

audioFileTypeHint = [STKLocalFileDataSource audioFileTypeHintFromFileExtension:urlIn.pathExtension];
audioFileTypeHint = [STKLocalFileDataSource audioFileTypeHintFromFileExtension:self->currentUrl.pathExtension];
}

return self;
}

-(void) dealloc
{
NSLog(@"STKHttpDataSource dealloc");
}

-(NSURL*) url
{
return self->currentUrl;
}

+(AudioFileTypeID) audioFileTypeHintFromMimeType:(NSString*)mimeType
{
static dispatch_once_t onceToken;
Expand Down Expand Up @@ -192,6 +218,8 @@ -(int) readIntoBuffer:(UInt8*)buffer withSize:(int)size

-(void) open
{
self->currentUrl = urlProvider();

CFHTTPMessageRef message = CFHTTPMessageCreateRequest(NULL, (CFStringRef)@"GET", (__bridge CFURLRef)self.url, kCFHTTPVersion1_1);

if (seekStart > 0)
Expand Down Expand Up @@ -225,7 +253,7 @@ -(void) open

// SSL support

if ([url.scheme caseInsensitiveCompare:@"https"] == NSOrderedSame)
if ([self->currentUrl.scheme caseInsensitiveCompare:@"https"] == NSOrderedSame)
{
NSDictionary* sslSettings = [NSDictionary dictionaryWithObjectsAndKeys:
(NSString*)kCFStreamSocketSecurityLevelNegotiatedSSL, kCFStreamSSLLevel,
Expand Down
8 changes: 0 additions & 8 deletions StreamingKit/StreamingKit/STKLocalFileDataSource.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,17 +35,9 @@
#import "STKCoreFoundationDataSource.h"

@interface STKLocalFileDataSource : STKCoreFoundationDataSource
{
@private
long long position;
long long length;
AudioFileTypeID audioFileTypeHint;
}

+(AudioFileTypeID) audioFileTypeHintFromFileExtension:(NSString*)fileExtension;

@property (readonly, copy) NSString* filePath;

-(id) initWithFilePath:(NSString*)filePath;

@end
6 changes: 5 additions & 1 deletion StreamingKit/StreamingKit/STKLocalFileDataSource.m
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,12 @@ This product includes software developed by Thong Nguyen ([email protected])
#import "STKLocalFileDataSource.h"

@interface STKLocalFileDataSource()
{
long long position;
long long length;
AudioFileTypeID audioFileTypeHint;
}
@property (readwrite, copy) NSString* filePath;

-(void) open;
@end

Expand Down

0 comments on commit 9b952de

Please sign in to comment.