iOS GameCenter, AVAsset и потоковое аудио - PullRequest
1 голос
/ 08 декабря 2011

Я получаю песню из библиотеки iTunes устройства и помещаю ее в AVAsset:

- (void)mediaPicker: (MPMediaPickerController *)mediaPicker didPickMediaItems:(MPMediaItemCollection *)mediaItemCollection
{
    NSArray *arr = mediaItemCollection.items;

    MPMediaItem *song = [arr objectAtIndex:0];

    AVAsset *songAsset = [AVAsset assetWithURL:[song valueForProperty:MPMediaItemPropertyAssetURL]];
}

Тогда у меня есть метод Game Center для получения данных:

- (void)match:(GKMatch *)match didReceiveData:(NSData *)data fromPlayer:(NSString *)playerID

У меня много проблем с выяснением, как отправить этот AVAsset через GameCenter и затем воспроизвести его на принимающем устройстве.

Я прочитал: http://developer.apple.com/library/ios/#documentation/MusicAudio/Reference/AudioStreamReference/Reference/reference.html#//apple_ref/doc/uid/TP40006162

http://developer.apple.com/library/ios/#documentation/AudioVideo/Conceptual/MultimediaPG/UsingAudio/UsingAudio.html#//apple_ref/doc/uid/TP40009767-CH2-SW5

http://developer.apple.com/library/mac/#documentation/AVFoundation/Reference/AVAudioPlayerClassReference/Reference/Reference.html

http://developer.apple.com/library/mac/#documentation/MusicAudio/Conceptual/AudioQueueProgrammingGuide/Introduction/Introduction.html

Я просто потерян. Информационная перегрузка.

Я реализовал код аудио потока «Какао с любовью», но не могу понять, как взять NSData, который я получаю через GameCenter, и вставить его в свой код. http://cocoawithlove.com/2008/09/streaming-and-playing-live-mp3-stream.html

Может кто-нибудь помочь мне разобраться? Спасибо!

1 Ответ

2 голосов
/ 12 декабря 2011

Насколько я знаю, AVAsset - не настоящая песня.Поэтому, если вы хотите отправить фактические данные выбранной песни, вам нужно попробовать что-то вроде этого:

- (void)mediaPicker: (MPMediaPickerController *)mediaPicker didPickMediaItems:(MPMediaItemCollection *)mediaItemCollection
{
    NSArray *arr = mediaItemCollection.items;
    MPMediaItem *song = [arr objectAtIndex:0];
    NSData *songData = [NSData dataWithContentsOfURL:[song valueForProperty:MPMediaItemPropertyAssetURL]];
    // Send the songData variable trough GameCenter
}

На другом устройстве теперь вам нужно записать NSData, который вы получаете, на диск и затем создатьAVAsset с его новым URL.Вот так:

- (void)match:(GKMatch *)match didReceiveData:(NSData *)data fromPlayer:(NSString *)playerID
{
    NSString *url = NSTemporaryDirectory();
    [url stringByAppendingPathComponent:<#audio_file_name#>];

    // Make sure there is no other file with the same name first
    if ([[NSFileManager defaultManager] fileExistsAtPath:url]) {
        [[NSFileManager defaultManager] removeItemAtPath:url error:nil];
    }

    [data writeToFile:url atomically:NO];

    AVURLAsset *urlAsset = [AVURLAsset URLAssetWithURL:[NSURL fileURLWithPath:url] options:nil];

    // Do whatever you want with your new asset
}

Дайте мне знать, если это работает!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...