我正在使用 QTKit 从 URL 逐步下载和播放 MP3。根据此文档,这是我应该用来完成此操作的代码:
NSURL *mp3URL = [NSURL URLWithString:@"http://foo.com/bar.mp3"];
NSError *error = nil;
QTMovie *sound = [[QTMovie alloc] initWithURL:mp3URL error:&error];
[sound play];
这行得通,并且完全符合我的要求 - MP3 URL 被延迟下载并立即开始播放。但是,如果 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
任何人?我在任何地方都找不到这方面的信息,而且谷歌现在令人沮丧地将此页面显示为我大多数查询的顶部结果......