Я использую QTKit для постепенной загрузки и воспроизведения MP3 с URL.Согласно этой документации , это код, который я должен использовать для достижения этой цели:
NSURL *mp3URL = [NSURL URLWithString:@"http://foo.com/bar.mp3"];
NSError *error = nil;
QTMovie *sound = [[QTMovie alloc] initWithURL:mp3URL error:&error];
[sound play];
Это работает и выполняет именно то, что я хочу - URL-адрес MP3 загружается и начинает воспроизводитьсянемедленно.Однако, если URL не имеет расширения пути «.mp3», происходит сбой:
NSURL *mp3URL = [NSURL URLWithString:@"http://foo.com/bar"];
NSError *error = nil;
QTMovie *sound = [[QTMovie alloc] initWithURL:mp3URL error:&error];
[sound play];
Не выдается ошибка, исключение не возникает;длительность звука просто установлена на ноль, и ничего не воспроизводится.
Единственный способ, который я нашел, чтобы обойти это, - принудительно вызвать тип, загрузив данные вручную и используя QTDataReference:
NSURL *mp3URL = [NSURL URLWithString:@"http://foo.com/bar"];
NSData *mp3Data = [NSData dataWithContentsOfURL:mp3URL];
QTDataReference *dataReference =
[QTDataReference dataReferenceWithReferenceToData:mp3Data
name:@"bar.mp3"
MIMEType:nil];
NSError *error = nil;
QTMovie *sound = [[QTMovie alloc] initWithDataReference:dataReference error:&error];
[sound play];
Однако это вынуждает меня полностью загрузить ВСЕ файлы MP3 синхронно, прежде чем я смогу начать их воспроизведение, что, очевидно, нежелательно.Есть ли способ обойти это?
Спасибо.
Редактировать
На самом деле, кажется, что расширение пути не имеет к этому никакого отношения;Content-Type просто не устанавливается в заголовке HTTP.Несмотря на это, последний код работает, а первый - нет.Кто-нибудь знает способ исправить это, не имея доступа к серверу?
Редактировать 2
Кто-нибудь?Я нигде не могу найти информацию об этом , и Google разочарованно теперь показывает эту страницу как лучший результат для большинства моих запросов ...