オンライン ラジオ ストリーミング (icecast)、できれば .ogg 形式を提供するアプリを作成する必要があります。だから私は次の質問があります:
- .ogg形式のオーディオ ストリームを再生するにはどうすればよいですか? サポートされているクラスはありますか? 何も見つからないので
CFNetwork
、CoreAudio
、AudioToolbox
などを使ったビット単位の操作をたくさんしないと無理だと思います(cocos2d はばかげているので見ません)。 - 今のところ mp3 ストリームを再生しています (.ogg の可能性はありません)。
AVPlayer
MattGallagher および DigitalDJ による,MPMovieMediaController
, AudioSreaming libを使用しようとしましたが、これらのソリューションのいずれもメタデータ アクセスを提供できません。
AVPlayer の場合:
-(void)playButtonPressed:(id)sender
{
NSURL *grindURL = [NSURL URLWithString:@"http://radio.goha.ru:8000/grind.fm"];
grindFMPlayer = [[AVPlayer alloc] initWithURL:grindURL];
[grindFMPlayer.currentItem addObserver:self forKeyPath:@"status" options:0 context:nil];
AVPlayerItem *item = grindFMPlayer.currentItem;
[grindFMPlayer play];
}
-(void)stopButtonPressed:(id)sender
{
AVURLAsset *ass = grindFMPlayer.currentItem.asset;
NSArray *arr = [ass commonMetadata];
NSArray *it_meta = [grindFMPlayer.currentItem timedMetadata];
[grindFMPlayer pause];
}
arrおよびit_meta カウントは常に0で、song\artist\any メタデータはありません。
についても同じでMPMovieMediaController
、metadataUpdate は呼び出されませんでした
streamAudioPlayer = [[MPMoviePlayerController alloc]
initWithContentURL:[NSURL URLWithString:@"http://radio.goha.ru:8000/grind.fm"];
streamAudioPlayer.movieSourceType = MPMovieSourceTypeStreaming;
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(MetadataUpdate:) name:MPMoviePlayerTimedMetadataUpdatedNotification object:nil];
[streamAudioPlayer play];
および停止ボタンメソッドでは:
timedMeta = [streamAudioPlayer timedMetadata];
if ([streamAudioPlayer timedMetadata]!=nil && [[streamAudioPlayer timedMetadata] count] > 0)
{
NSLog(@"metadata count = %d", [[streamAudioPlayer timedMetadata] count]);
for (MPTimedMetadata *metadata in [streamAudioPlayer timedMetadata])
{
NSLog(@"description %@", metadata.allMetadata);
if ([[metadata.allMetadata valueForKey:@"key"] isEqualToString:@"title"])
{
NSString *text = [metadata.allMetadata valueForKey:@"value"];
NSString* filename = text;
}
}
}
[streamAudioPlayer timedMetadata]
常にゼロ。
私はもう試した
シャウトキャストとアイスキャストの 2 つのプロジェクト - http://www.mikejablonski.org/2009/04/17/reading-shoutcast-metadata-from-a-stream/
ただし、現在再生中のトラック情報を取得することはまだ運がありません。これは、SHOUTcast アプリでのみ取得されます。
1日 Metadata = 'StreamTitle='
、
2番目 metadata = ''
と(つまり、 httpbitrate = '128000'
ヘッダー応答またはこのようなものからのバイトを処理する必要があると思いますか?しかし、wtf、それはshoutcastメタデータですが、私のラジオストリームはicecastです。わかりません)
助けていただければ幸いです!