因此,我面临一个非常令人厌恶和奇怪的问题,并想知道是否有其他人来处理这个问题。 我从手机音乐图书馆获得MPMediaItem的原始数据,然后通过吉卜赛人协会将其送往其他地方。 在我提出问题时,我是从一卷零4a号档案中收集原始数据,看来是遗漏的。 例如,如果我从旁听的原始档案是7.4mb,那么从我的法典中发现的病情是7.3mb。 我做了一些研究,发现一个m4a文档实际上是一种cap,我认为,我没有仅仅依靠原始音乐数据,因此无法辨认。 我的守则给我提供了MPMediaItem的原始音乐数据。
NSError * error = nil;
MPMediaQuery *query = [MPMediaQuery albumsQuery];
NSArray * songs = query.items;
MPMediaItem * song = [songs objectAtIndex:socket_data_index];
AVURLAsset *songAsset = [AVURLAsset URLAssetWithURL:[song valueForProperty:MPMediaItemPropertyAssetURL] options:nil];
AVAssetReader * reader = [[AVAssetReader alloc] initWithAsset:songAsset error:&error];
AVAssetTrack * songTrack = [songAsset.tracks objectAtIndex:0];
AVAssetReaderTrackOutput * output = [[AVAssetReaderTrackOutput alloc] initWithTrack:songTrack outputSettings:nil];
[reader addOutput:output];
[output release];
[reader startReading];
while (reader.status == AVAssetReaderStatusReading)
{
AVAssetReaderTrackOutput * trackOutput = (AVAssetReaderTrackOutput *)[reader.outputs objectAtIndex:0];
CMSampleBufferRef sampleBufferRef = [trackOutput copyNextSampleBuffer];
if (sampleBufferRef)
{
CMBlockBufferRef blockBufferRef = CMSampleBufferGetDataBuffer(sampleBufferRef);
size_t length = CMBlockBufferGetDataLength(blockBufferRef);
NSMutableData * data = [[NSMutableData alloc] initWithLength:length];
CMBlockBufferCopyDataBytes(blockBufferRef, 0, length, data.mutableBytes);
[data_to_return appendData:data];
[data release];
CMSampleBufferInvalidate(sampleBufferRef);
CFRelease(sampleBufferRef);
}
}
if (reader.status == AVAssetReaderStatusFailed || reader.status == AVAssetReaderStatusUnknown)
{
// Something went wrong. Handle it.
}
if (reader.status == AVAssetReaderStatusCompleted)
{
return [[[HTTPDataResponse alloc] initWithData:data_to_return] autorelease];
}
[reader release];
我确实并且将获得有关电话图书馆的p.mp3文档的正确数据,但就m4a而言,似乎有些部分缺失。
再次感谢你们花时间帮助我。