Чтение необработанных данных .m4a из библиотеки iPod - PullRequest
0 голосов
/ 16 января 2012

Я использую AVAssetReaderTrackOutput для воспроизведения музыкальных необработанных данных из библиотеки iPod, гоночный формат WAV или MP3 из библиотеки iPod работает нормально.Однако, если я читаю файл M4A, я получу данные со всеми нулями или мусором ... Файл M4A, который я читаю, воспроизводится, и я уверен, что он не зашифрован ... Кажется, что iOS шифруется или выдает 0, когда вычитаем файл M4A.Кто-нибудь есть какие-либо предложения о том, как решить эту проблему?

ПРИМЕЧАНИЕ. Если я использую AVAssetExportSession для экспорта из файла m4a в файл m4a, то я получаю правильные необработанные данные, но это означает, что я должен сначала сохранить их на диск(например, в папке с документами Apps), а затем читаемЯ хотел бы иметь возможность передавать его в потоковом режиме, поэтому мне нужно найти способ прочитать его напрямую.

Вот мой код, и я получаю правильные данные в формате mp3 или wav «кроме m4a»:

NSURL *assetURL = [MediaItem valueForProperty:MPMediaItemPropertyAssetURL];
AVURLAsset *songAsset = [AVURLAsset URLAssetWithURL:assetURL options:nil];

AVAssetTrack* songTrack = [songAsset.tracks objectAtIndex:0];

AVAssetReaderOutput *assetReaderOutput = [AVAssetReaderTrackOutput assetReaderTrackOutputWithTrack:[songAsset.tracks objectAtIndex:0] outputSettings:nil];

NSError *assetError = nil;
AVAssetReader *assetReader = [AVAssetReader assetReaderWithAsset:songAsset
                                                       error:&assetError];


[assetReader addOutput: assetReaderOutput];                

//Retain
self.mStreamAssetReader = assetReader;
self.mStreamAssetReaderOutput = assetReaderOutput;

1 Ответ

0 голосов
/ 16 января 2012

Предполагая, что под «необработанными музыкальными данными» вы подразумеваете необработанный звук PCM, вы должны передать инициализированный NSDictionary в AVAssetReaderTrackOutput с соответствующими параметрами, чтобы iOS декодировала поток битов AAC внутри файла .m4a для вас.

NSDictionary *settings = [NSDictionary dictionaryWithObjectsAndKeys:
    [NSNumber numberWithInt:kAudioFormatLinearPCM], AVFormatIDKey,
    [NSNumber numberWithFloat:48000.0], AVSampleRateKey,
    [NSNumber numberWithInt:16], AVLinearPCMBitDepthKey,
    [NSNumber numberWithBool:NO], AVLinearPCMIsNonInterleaved,
    [NSNumber numberWithBool:NO], AVLinearPCMIsFloatKey,
    [NSNumber numberWithBool:NO], AVLinearPCMIsBigEndianKey,
    nil];

AVAssetReaderOutput *assetReaderOutput =
    [AVAssetReaderTrackOutput assetReaderTrackOutputWithTrack:[songAsset.tracks objectAtIndex:0]
                                               outputSettings:settings];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...