25

これについては相反する報告を聞いています。私がやろうとしているのは、URL から mp3 ファイルをストリーミングすることです。私は何時間もの調査を行ってきましたが、これを行う方法や、どの種類のオーディオ プレーヤーを使用すればよいかについての適切なガイドが見つかりません。

AVPlayer は mp3 をストリーミングできると言う友人もいますが、Apple のドキュメントにはできないと書かれています。Matt Gallagher のオーディオ ストリーマー (http://www.cocoawithlove.com/2008/09/streaming-and-playing-live-mp3-stream.html) を流用しましたが、そのコードはかなり前に作成されたものであり、私はこれに十分慣れていないため、自動リリースや保持などを処理するのは困難です。

ストリーミングしようとしているオーディオは、libsyn サーバーからのかなり大きな mp3 ファイルで、URL は次の形式です。

http://traffic.libsyn.com/podcastname/episode.mp3

私がする必要があるのは、それをつかんで再生を開始することだけで、一時停止とスクラブが可能です。まず最初に、AVPlayer は mp3 をストリーミングできますか? もしそうなら、誰かが私に指摘できるガイドやコードを持っていますか? そうでない場合、オーディオをストリーミングできるオーディオ プレーヤー クラスはありますか?

URL で初期化された AVPlayerItem を作成してから AVPlayer に追加しようとしましたが、大量の Error Loading... および Symbol Not Found... エラーが発生します。これに関する情報をいただければ幸いです、ありがとうございます!

4

5 に答える 5

66

これを試して

 -(void)playselectedsong{

        AVPlayer *player = [[AVPlayer alloc]initWithURL:[NSURL URLWithString:urlString]];
        self.songPlayer = player;
        [[NSNotificationCenter defaultCenter] addObserver:self
                                                 selector:@selector(playerItemDidReachEnd:)
                                                     name:AVPlayerItemDidPlayToEndTimeNotification
                                                   object:[songPlayer currentItem]];
        [self.songPlayer addObserver:self forKeyPath:@"status" options:0 context:nil];
        [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(updateProgress:) userInfo:nil repeats:YES];



    }
    - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {

        if (object == songPlayer && [keyPath isEqualToString:@"status"]) {
            if (songPlayer.status == AVPlayerStatusFailed) {
                NSLog(@"AVPlayer Failed");

            } else if (songPlayer.status == AVPlayerStatusReadyToPlay) {
                NSLog(@"AVPlayerStatusReadyToPlay");
                [self.songPlayer play];


            } else if (songPlayer.status == AVPlayerItemStatusUnknown) {
                NSLog(@"AVPlayer Unknown");

            }
        }
    }

    - (void)playerItemDidReachEnd:(NSNotification *)notification {

     //  code here to play next sound file

    }
于 2012-10-31T11:32:08.617 に答える
2

大いに役立った Sumit Mundra の回答に加えて、この手法は実際にはリモート サーバーから MP3 ファイルをストリーミングしないことがわかりました。これを実装すると、再生前にファイルが同期的にダウンロードされ、UI がブロックされました。私が見つけた MP3 を適切にストリーミングする方法は、M3U ファイルを指定することでした。これは、元の MP3 へのリンクを含む .m3u 拡張子を持つ単なるテキスト ファイルです。代わりに Sumit のコードをそのファイルに向けると、すぐに再生を開始するストリームが得られます。

これは私がその情報を見つけた場所です: http://www.soundabout.net/streammp3.htm

于 2013-11-05T14:29:58.100 に答える
0

Matt Gallagher の AudioStreamer は 2 か月前に更新されましたhttps://github.com/mattgallagher/AudioStreamer/commits/master

しかし、探しているものについては、サンプル コード StichedStreamPlayer http://developer.apple.com/library/ios/#samplecode/StitchedStreamPlayer/Introduction/Intro.html#//apple_ref/doc/uid/DTS40010092を確認してください。

これは AVPlayer オブジェクトを使用し、メソッド (IBAction)loadMovieButtonPressed:(id)sender を見ると、AVPlayer オブジェクトの設定方法をたどることができるはずです。

于 2012-11-01T21:55:46.870 に答える