10

httpと固定サイズのmp3ファイルを使用して、iPhone用のプログレッシブダウンロードオーディオプレーヤーを実装しようとしています。

AudioStreamer プロジェクトを見つけましたが、非常に複雑で、エンドレス ストリームに最適です。

オーディオ ファイルの合計の長さを確認できるようにする必要があり、ファイルをシークできるようにする必要もあります。AudioStreamer からのハッキングされた逸脱を見つけましたが、うまく機能していないようです。http://www.saygoodnight.com/?p=14

私の目標を達成するためのより簡単な方法があるかどうか、またはそこにいくつかのより良い作業サンプルがあるかどうか疑問に思っていますか? Bass ライブラリは見つかりましたが、それに関するドキュメントはあまりありません。

/Br ヨハネス

4

4 に答える 4

8

残念ながら、iPhone でオーディオ ストリームを再生するのは簡単なことではありません。これが私が始めた記事です: MP3ストリームのストリーミングと再生

これは OSX プロジェクトですが、そのほとんどは iPhone でも動作します。それの完全な再生時間を取得することに関しては、それが CBR ファイルである場合、おそらく http ヘッダーの content-length プロパティに基づいてそれを把握する必要があります。それ以外の場合は、それを決定する前にファイル全体をダウンロードする必要があると思います.

于 2010-03-29T21:44:20.443 に答える
5

MP3ファイルのみを再生する必要がある場合、なぜ独自のダウンローダー/プレーヤーを作成するのですか?iOSにはいくつかのオプションが組み込まれており、それぞれがプログレッシブダウンロードとMP3再生をサポートしています。

  • MPMoviePlayerController
  • AVPlayer
  • Safari<audio>プレーヤー

MPMoviePlayerController個人的にとのプログレッシブダウンロード機能に問題があったAVPlayerので、おそらくこれもあなたの問題です。これらのプレーヤーは、mp3を複数回要求し、サーバーがhttp範囲オフセットを介したプログレッシブダウンロードをサポートしているかどうかを確認することで、賢くしようとしていることがわかりました。ただし、サーバーが範囲オフセットをサポートしていない場合、ファイルは複数回ダウンロードされ、帯域幅を消費します(!)。

私の最新のプロジェクトでは、html<audio>タグが埋め込まれたUIWebViewを埋め込みました。Safariプレーヤーは、AVPlayerやMPMoviePlayerControllerよりも動作が優れているようですが、独自の注意点もあります。1つは、自動再生を機能させることはPITAでした。

于 2011-02-25T18:42:43.447 に答える
4

iPhone Cool Projects には、オーディオのストリーミングに関する非常に優れた章があります。 http://apress.com/book/view/9781430223573 AudioStreamer (CFNetwork の代わりに NSURLConnection を使用) よりも単純なアプローチを示しており、プログレッシブ ダウンロードに適していて、マルチスレッド コードはありません。

そして、あなたが使用できるオーディオファイルのサイズを見つけるため[response expectedContentLength]

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 
于 2011-02-16T13:33:06.037 に答える
1

これはかなり古い投稿であることは承知していますが、オープンソースの堅固なライブラリを提案したかったのです。これは、上記の @pzearfoss が推奨する Matt Gallagher のオリジナルの投稿に基づいています。現在のバージョンでは、AudioQueue クラスではなく AudioUnits を使用するようになったため、再生前に任意の操作 (フィルタリングなど) を行うために生の PCM サンプルにアクセスできます。また、最小限の労力で無料でプログレッシブ ダウンロード機能を提供します。ライブラリは積極的に更新されているようで、これは大きなプラスです!

@tumtumtum による StreamingKit

于 2014-06-04T13:33:51.680 に答える