12

オンライン ラジオ ストリーミング (icecast)、できれば .ogg 形式を提供するアプリを作成する必要があります。だから私は次の質問があります:

  1. .ogg形式のオーディオ ストリームを再生するにはどうすればよいですか? サポートされているクラスはありますか? 何も見つからないのでCFNetworkCoreAudioAudioToolboxなどを使ったビット単位の操作をたくさんしないと無理だと思います(cocos2d はばかげているので見ません)。
  2. 今のところ mp3 ストリームを再生しています (.ogg の可能性はありません)。AVPlayerMattGallagher および 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です。わかりません) 助けていただければ幸いです!

4

3 に答える 3

6

Icecast と Shoutcast は互いに互換性があります。違いは、HTTP GET 要求に応答する方法にあります。HTTP GET 要求を Icecast サーバーに送信すると、HTTP 200 OK 応答が返されます。応答ヘッダーには、icy-br、icy-mettaint、icy-name、icy-genre、icy-url キーの値が含まれます。

HTTP GET リクエストを Shoutcast サーバーに送信すると、それは ICY 200 OK レスポンスで応答します。この場合、応答ヘッダーでメタデータを使用できないため、応答データを解析する必要があります。

最も重要なメタデータ キーは、icy-mettaint キーです。この値は、メタデータがストリームで送信される頻度を示します。このメタデータの解析の詳細については、この Web サイトを参照してください: Shoutcast Metadata Protocol

ogg ストリームを再生するには、オープン ソースの FFmpeg ライブラリを使用する必要があります。このライブラリは iOS プラットフォーム用にコンパイルでき、ogg ストリームの接続とデコードに使用できます。

于 2012-04-10T12:52:21.600 に答える
3

ogg 形式のオーディオ ストリームを再生するには、コーデックを指定する必要があります。iOS には ogg 形式のネイティブ サポートがありません

于 2012-07-11T17:43:51.623 に答える
3

最初に行うことは、リクエストヘッダーを設定してメタデータを「注文」することだと思います:

CFHTTPMessageSetHeaderFieldValue(message, CFSTR("Icy-MetaData"), CFSTR("1"));

私の場合、この行を Matt Galaghers の Audio Streamer に追加しました。その結果、メタデータはストリーム データに含まれていたため、ストリームの再生中に実際にメタデータを聞くことができました。次のステップは、メタデータを除外して解釈することでした。これを実現するために必要な情報はすべてここに記載されています。

幸運を!

于 2013-03-15T11:11:17.187 に答える