From c0e959f143897186f1e9e97f96b21aee519e64a6 Mon Sep 17 00:00:00 2001 From: Adam Szabo Date: Fri, 16 Dec 2022 11:24:41 +0000 Subject: [PATCH 1/4] Fix: Request a byte=0-1 range in order to receive a possible 206 status code meaning it supports seekability --- StreamingKit/StreamingKit/STKHTTPDataSource.m | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/StreamingKit/StreamingKit/STKHTTPDataSource.m b/StreamingKit/StreamingKit/STKHTTPDataSource.m index 67d1bd6..0e77ef6 100644 --- a/StreamingKit/StreamingKit/STKHTTPDataSource.m +++ b/StreamingKit/StreamingKit/STKHTTPDataSource.m @@ -312,7 +312,7 @@ -(BOOL) parseHttpHeader { self->supportsSeek = YES; } - + if (self.httpStatusCode == 200) { if (seekStart == 0) @@ -339,6 +339,8 @@ -(BOOL) parseHttpHeader { fileLength = [[components objectAtIndex:1] integerValue]; } + + self->supportsSeek = YES; } else if (self.httpStatusCode == 416) { @@ -503,7 +505,7 @@ -(void) open -(void) openForSeek:(BOOL)forSeek { - + @synchronized (self) { int localRequestSerialNumber; @@ -529,8 +531,10 @@ -(void) openForSeek:(BOOL)forSeek if (seekStart > 0 && supportsSeek) { CFHTTPMessageSetHeaderFieldValue(message, CFSTR("Range"), (__bridge CFStringRef)[NSString stringWithFormat:@"bytes=%lld-", seekStart]); - + discontinuous = YES; + } else { + CFHTTPMessageSetHeaderFieldValue(message, CFSTR("Range"), (__bridge CFStringRef)[NSString stringWithFormat:@"bytes=0-1"]); } for (NSString* key in self->requestHeaders) From 1e14f37c41e62a7fa58cdd7dad715a49964fb6e3 Mon Sep 17 00:00:00 2001 From: Adam Szabo Date: Fri, 16 Dec 2022 11:26:30 +0000 Subject: [PATCH 2/4] Bumps version number to 2.4.25 --- StreamingKit.podspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/StreamingKit.podspec b/StreamingKit.podspec index 78a0f3f..53d6799 100644 --- a/StreamingKit.podspec +++ b/StreamingKit.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = "StreamingKit" - s.version = "2.4.24" + s.version = "2.4.25" s.summary = "A fast and extensible audio streamer for iOS and OSX with support for gapless playback and custom (non-HTTP) sources." s.homepage = "https://github.com/tumtumtum/StreamingKit/" s.license = 'MIT' From 7d246aa5b17417c90cc67ba0e8053a303869f738 Mon Sep 17 00:00:00 2001 From: Adam Szabo Date: Fri, 16 Dec 2022 11:49:36 +0000 Subject: [PATCH 3/4] Fix: Audio is not seekable if Accept-Ranges is none --- StreamingKit/StreamingKit/STKHTTPDataSource.m | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/StreamingKit/StreamingKit/STKHTTPDataSource.m b/StreamingKit/StreamingKit/STKHTTPDataSource.m index 0e77ef6..c4aedc7 100644 --- a/StreamingKit/StreamingKit/STKHTTPDataSource.m +++ b/StreamingKit/StreamingKit/STKHTTPDataSource.m @@ -307,8 +307,9 @@ -(BOOL) parseHttpHeader self->iceHeaderData = nil; } - - if (([httpHeaders objectForKey:@"Accept-Ranges"] ?: [httpHeaders objectForKey:@"accept-ranges"]) != nil) + + NSString* range = ([httpHeaders objectForKey:@"Accept-Ranges"] ?: [httpHeaders objectForKey:@"accept-ranges"]); + if (range != nil && ![[range lowercaseString] isEqualToString: @"none"]) { self->supportsSeek = YES; } @@ -340,6 +341,8 @@ -(BOOL) parseHttpHeader fileLength = [[components objectAtIndex:1] integerValue]; } + NSLog(@"🧵 supports seek through 206"); + self->supportsSeek = YES; } else if (self.httpStatusCode == 416) From 78cca9bd076dbc08c969f0c16e84f3cc05c9c27f Mon Sep 17 00:00:00 2001 From: Adam Szabo Date: Fri, 16 Dec 2022 12:04:31 +0000 Subject: [PATCH 4/4] Fix: Only send bytes=0-1 range for the initial request --- StreamingKit/StreamingKit/STKHTTPDataSource.m | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/StreamingKit/StreamingKit/STKHTTPDataSource.m b/StreamingKit/StreamingKit/STKHTTPDataSource.m index c4aedc7..0a57471 100644 --- a/StreamingKit/StreamingKit/STKHTTPDataSource.m +++ b/StreamingKit/StreamingKit/STKHTTPDataSource.m @@ -341,8 +341,6 @@ -(BOOL) parseHttpHeader fileLength = [[components objectAtIndex:1] integerValue]; } - NSLog(@"🧵 supports seek through 206"); - self->supportsSeek = YES; } else if (self.httpStatusCode == 416) @@ -536,7 +534,7 @@ -(void) openForSeek:(BOOL)forSeek CFHTTPMessageSetHeaderFieldValue(message, CFSTR("Range"), (__bridge CFStringRef)[NSString stringWithFormat:@"bytes=%lld-", seekStart]); discontinuous = YES; - } else { + } else if (seekStart == 0) { CFHTTPMessageSetHeaderFieldValue(message, CFSTR("Range"), (__bridge CFStringRef)[NSString stringWithFormat:@"bytes=0-1"]); }