2012-01-16 3 views
0

iPod 라이브러리의 WAV 또는 MP3 파일 형식을 경주하는 iPod 라이브러리의 음악 원시 데이터에 AVAssetReaderTrackOutput을 사용하고 있습니다. 그러나, 내가 M4A 파일을 읽으면 나는 모든 0 또는 쓰레기와 함께 데이터를 얻을 것이다 ... 내가 읽고 M4A 파일은 재생할 수 있고 나는 확실히 암호화되지 않는다 ... iOS 암호화 또는 출력 0 일 것 같다. M4A 파일을 읽는 중입니다. 누구든지이 문제를 해결하는 방법에 대한 제안이 있습니까?iPod 라이브러리의 .m4a 원시 데이터 읽기

참고 : AVAssetExportSession을 사용하여 m4a 파일에서 m4a 파일로 내보내는 경우 올바른 원시 데이터가 표시되지만 먼저 디스크 (예 : Apps 문서 폴더)에 저장 한 다음 읽어야합니다. 나는 그것을 직접 읽을 수있는 방법을 찾아야하기 때문에 그것을 스트리밍 할 수 있기를 원합니다. 여기

내 코드와 나는 "M4A 제외하고"올바른 MP3 또는 WAV 원시 데이터를 얻을 : "원시 음악 데이터가"당신은 원시 PCM 오디오를 의미하여, 당신은 초기화있는 NSDictionary에 전달해야한다고 가정

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; 

답변

0

적절한 매개 변수를 사용하여 AVAssetReaderTrackOutput에 추가하면 iOS가 .m4a 파일 내부의 AAC 비트 스트림을 디코딩합니다.

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]; 
관련 문제