因此,我面對的是一個非常奇怪,奇怪的問題,並想知道是否有人遇到這個問題。我從手機音樂庫抓取MPMediaItem的原始數據,然後通過HTTP將其發送到別處播放。當我從一個類型爲.m4a的文件中抓取原始數據時,我的問題就出現了,它似乎缺少一些部分。例如,如果我從itunes中檢查的原始文件是7.4mb,那麼從我的代碼中得到的內容大小爲7.3mb。我已經做了一些研究,發現.m4a文件實際上是一個封裝,我認爲我沒有獲得原始音樂數據的封裝,因此它不可識別。這裏是我的代碼,讓我的原始音樂數據從MPMediaItem.m4a的原始數據不打
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];
我做,會得到對於那些在手機圖書館,但是當涉及到.M4A這似乎是.mp3文件的正確性缺少一些部分。再次
感謝你的時間來幫助我。
這是我最終沒有,不知道是否有避免寫入磁盤的方式。 – Krzemienski
@melle,我實現了你的解決方案,它包含了標題信息,但是當我使用AmazonS3Client上傳到s3時,我遇到了一個數據只是不上載的問題。有任何想法嗎?原始標題中是否有可阻止其上傳的內容? – user592419
對不起,我不知道Amazons客戶端可能會出現什麼問題。您應該將導出會話中的文件與同步到iOS設備的原始文件進行比較。 – melle