HTTPライブストリーミング方式を使用してライブストリームを再生する場合、現在のメタデータ(タイトルやアーティストなど)を読み取ることはできますか?これはiPhoneラジオアプリのためのものです。iPhone SDKのHTTPライブストリーミングを使用してメタデータを読み取ることは可能です
答えて
しかし、それは簡単ではありません。 Matt Gallagherは、ストリーミングオーディオについてnice post on his blogです。件名で彼を引用する:
最も簡単なメタデータソースは、HTTPヘッダーから です。 eventTypeを:: 方法、CFReadStreamRefから kCFStreamPropertyHTTPResponseHeader プロパティをコピーするCFReadStreamCopyProperty を使用し、 あなたは 応答のうち、 コピーにヘッダフィールドを CFHTTPMessageCopyAllHeaderFieldsを使用することができます handleReadFromStreamインサイド。多くのストリーミングオーディオ サーバーの場合、ストリーム名は のいずれかのフィールドです。
メタデータのかなり難しい原因はID3タグです。 ID3v1は常にファイル末尾の です(ストリーミング時には は役に立たない)。 ID3v2は開始時に にありますので、 にアクセスできる可能性があります。
私はID3タグを読み取ることがありませんが、私は、あなたがどこかにファイル の最初の 数百キロバイトをキャッシュする場合、それはロードとそのキャッシュAudioFileOpenWithCallbacksと と が、その後AudioFileGetPropertyでkAudioFilePropertyID3Tag を読むことを開いた疑いあなたは がID3のデータを読むことができるかもしれません( がある場合)。私が言ったように:私は を実際に行ったことがないので、私は が動作することを確かに知っていません。
この質問はまだ著者のために実際であるが、それは誰かを助けるかもしれないかもしれません。 2日間の痛みの後、私はそれが非常に簡単であることを調査しました。
AVPlayerItem* playerItem = [AVPlayerItem playerItemWithURL:[NSURL URLWithString:<here your http stream url>]];
[playerItem addObserver:self forKeyPath:@"timedMetadata" options:NSKeyValueObservingOptionNew context:nil];
AVPlayer* player = [[AVPlayer playerWithPlayerItem:playerItem] retain];
[player play];
、その後:
- (void) observeValueForKeyPath:(NSString*)keyPath ofObject:(id)object
change:(NSDictionary*)change context:(void*)context {
if ([keyPath isEqualToString:@"timedMetadata"])
{
AVPlayerItem* playerItem = object;
for (AVMetadataItem* metadata in playerItem.timedMetadata)
{
NSLog(@"\nkey: %@\nkeySpace: %@\ncommonKey: %@\nvalue: %@", [metadata.key description], metadata.keySpace, metadata.commonKey, metadata.stringValue);
}
}
}
それだここで私のために動作するコードです。私は実際のストリーミングオーディオの重要な機能であるストリームのアクセス "タイトル"のために、AppleがAVPlayerItemのためのドキュメントでこのサンプルを提供しなかった理由を知らない。 「AV Foundation Frameworkリファレンス」では、必要な場所では「timedMetadata」について説明していません。 Mattのサンプルはすべてのストリームでは機能しません(ただしAVPlayerは動作します)。 SWIFT 2.0取得メタデータ情報の音楽ストリーミングで
これが正解としてマークされたのはなぜか分かりませんが、本当にマークする必要があります。ラジオアプリの連続ストリームでは、現在のオーディオファイルが再生された後でメタデータを取得し、新しいオーディオファイルが再生されると、何ができるのでしょうか? – user717452
上記のコードは、 'timedMetadata'値が変更されたときに呼び出されます。したがって、(インターネットラジオのような)ウェブストリームを再生するとき、 'observeValueForKeyPath:ofObject:change:context:'が変更時にトリガされます。 – rckoenes
上記はなぜ正しい答えとして選ばれるべきなのかはわかりませんが、それは私には大いに役立ちます。どうもありがとうございました。 –
:あなたはこの作業を取得した場合は
override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) {
//Atualiza Nome Musica
if keyPath == "timedMetadata" {
if let meta = PlayerItem.timedMetadata {
print("Novo Metadata \(meta)")
for metadata in meta {
if let nomemusica = metadata.valueForKey("value") as? String{
LB_NomeMusica.text = nomemusica
if NSClassFromString("MPNowPlayingInfoCenter") != nil {
let image:UIImage = UIImage(named: "logo.gif")!
let albumArt = MPMediaItemArtwork(image: image)
var songInfo: [String:AnyObject] = [
MPMediaItemPropertyTitle: nomemusica,
MPMediaItemPropertyArtist: "Ao Vivo",
MPMediaItemPropertyArtwork: albumArt
]
MPNowPlayingInfoCenter.defaultCenter().nowPlayingInfo = songInfo
}
}
}
}
}
}
- 1. iPhone SDKを使用してRFIDを読み取る方法
- 2. iphone sdkのライブストリーミング?
- 3. FacebookのSDKでライブストリーミングが可能
- 4. IphoneのContact DataBase構造体を知ることは可能ですか? (iphone sdk)
- 5. Exiftoolを使用してHdfsイメージ/ビデオファイルのメタデータを取得することは可能ですか
- 6. ipad、iphone、safariのHttpライブストリーミング
- 7. IPカメラMpMoviePlayerControllerを使用したライブストリーミングは可能ですか?
- 8. iPhone用zxingを使用して1Dバーコードを読み取る
- 9. MPMoviePlayerControllerとHTTPライブストリーミング
- 10. Django tastypie、クエリのメタデータのみを返すことが可能
- 11. iPhone SDKのバブルのようなSMSを得ることは可能ですか?
- 12. HTTPライブストリーミング用のH264を使用してエンコードしようとしています
- 13. パスワードコードのみを使用して認証することは可能ですか?
- 14. Labviewを使用してテキストファイルのメタデータを読み書きすることはできますか?
- 15. Facebook AdvertsでFB SDKのカスタムイベントを使用することは可能ですか?
- 16. httpを使用してxmlファイルを読み取る
- 17. googlecodeを使用してすべてのjavascriptを動的に読み込むことは可能ですか
- 18. 可能な最新のデータポイントを読み込み、ドルイドの残りを捨てることは可能ですか?
- 19. データフレームで使用可能なファイルパスを読み込み、sparkを使用してこれらのファイルの内容を読み取る
- 20. RadeonカードでDisplayPortからデータを読み取ることは可能ですか(OpenCLを使用)?
- 21. リアルタイムでメモリ値を読み取ることは可能ですか?
- 22. のHttpライブストリーミングは、Apache
- 23. Perl HTTP :: Asyncモジュールを使用してヘッダーを読み取ることはできますか?
- 24. 入力ストリームを使用してhttpポスト値を読み取ることはできますか?
- 25. openFileInputを使って3gpファイルを読み込むことは可能ですか?
- 26. すぐに資格ファイルを読み取ることは可能ですか
- 27. SDKを使用してローカルのiPhone番号を取得する
- 28. indexOfを使用してセレクタを取得することは可能ですか?
- 29. Redlaser sdkを使ってバーコードを読み取る
- 30. HTTP APIを使用してBigQueryクエリのメタデータを取得するには
は、私に知らせて:
は、このメソッドを追加します。 – Moshe
ええ、iTunesで.m3uファイルがストリーミングされているときに、曲とアーティスト情報が自動的に更新されます。あなたが言ったように、おそらくID3v2が各トラックの始めに流されます。多分、それはメタデータを待っているイベントリスナーの問題です。私は見守っていきます。 – miketucker
@mike yep。Mattのコードを見てください。最新バージョンはGitHubにあります。素晴らしいヒントを提供するはずです。 – Moshe