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
誰?これに関する情報がどこにも見つからず、Google は苛立たしいことに、ほとんどのクエリでこのページを上位の結果として表示するようになりました...