Получить аудиопоток с URI и воспроизвести его на iPhone - PullRequest
11 голосов
/ 28 июля 2011

Я хотел бы получить аудиопоток с URL и воспроизвести его на iPhone. К сожалению, есть только C # пример того, как воспроизводить этот поток, но мне нужна реализация Objective C в платформах iPhone. Я пытался самостоятельно использовать различные аудио рамки, но все это было безуспешно. Это то, что в C #:

response = httpWebRequest.GetResponse();
            using (Stream stream = response.GetResponseStream())
            {
                using (SoundPlayer player = new SoundPlayer(stream))
                {
                    player.PlaySync();
                }
            }

Что я должен сделать в цели C, чтобы получить потоковое аудио с этого URL? В этом URL у меня нет mp3-файла или чего-то еще, я просто получаю поток. Возможно, мне нужно каким-то образом загрузить этот поток в аудиофайл iPhone, а затем воспроизвести его, чтобы избавиться от лагов.

Я пробовал это:

 AVPlayer *player = [AVPlayer playerWithURL:url];
 [player play];

А это:

* * 1010

Ни сработало. Я проверил свой URL, он хорошо работает в браузере.

Это код, который работал:

NSData *_objectData = [NSData dataWithContentsOfURL:url];
    NSError *error;

    AVAudioPlayer *audioPlayer = [[AVAudioPlayer alloc] initWithData:_objectData error:&error];
    audioPlayer.numberOfLoops = 0;
    audioPlayer.volume = 1.0f;
    [audioPlayer prepareToPlay];

    if (audioPlayer == nil)
        NSLog(@"%@", [error description]);
    else
        [audioPlayer play];

Ответы [ 4 ]

14 голосов
/ 22 ноября 2013

Эй, я столкнулся с этой проблемой потокового аудио для радиоприложения.Я искал ответы, и они не работали.AVAudioPlayer - это не тот класс, который будет использоваться здесь.Загрузка содержимого URL с использованием объекта NSData также не является решением, так как он загружает содержимое, а затем код выполняется.Это похоже на загрузку mp3 и последующее его воспроизведение на проигрывателе локально.

[NSData dataWithContentsOfURL:[NSURL URLWithString:resourcePath]]; //Downloads the contents of the url and in case of radio the url's content is unlimited. The program gets frozen on executing this.

Вместо этого используйте класс AVPlayer.

Этот код работал в моем радиоприложении

AVPlayer *objAVPlayer = [[AVPlayer alloc] initWithURL:url];
[objAVPlayer play];

Этот код не загружает содержимое по URL, но воспроизводит поток по мере его поступления.

14 голосов
/ 28 июля 2011
NSString* resourcePath = url; //your url
NSData *_objectData = [NSData dataWithContentsOfURL:[NSURL URLWithString:resourcePath]];
NSError *error;

app.audioPlayer = [[AVAudioPlayer alloc] initWithData:_objectData error:&error];
app.audioPlayer.numberOfLoops = 0;
app.audioPlayer.volume = 1.0f;
[app.audioPlayer prepareToPlay];

if (app.audioPlayer == nil)
    NSLog(@"%@", [error description]);
else
    [app.audioPlayer play];
8 голосов
/ 28 июля 2011

Посмотрите на класс AVPlayer , являющийся частью инфраструктуры AVFoundation ... это класс target-c (iOS), который вы используете для потоковой передачи звука.

0 голосов
/ 20 ноября 2013
MPMoviePlayerController *player;
player = [[MPMoviePlayerController alloc] init] ;
player.view.frame = CGRectMake(0, 0, 0, 0);
player.movieSourceType = MPMovieSourceTypeStreaming;
player.view.hidden = YES;
[self.view addSubview: [wikiMusicPlayer view]];

NSString *address = Your URL;
address = [address stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

NSURL *url = [NSURL URLWithString:address];
[wikiMusicPlayer setContentURL:url];
[wikiMusicPlayer prepareToPlay];
[wikiMusicPlayer setShouldAutoplay: NO];
[wikiMusicPlayer play];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...