私は非常に奇妙で奇妙な問題に直面しており、他の誰かがこの問題を抱えているのか疑問に思っていました。私は携帯音楽ライブラリからの生データをMPMediaItemから取得し、HTTP経由で他の場所で再生するために送信しています。私の問題が発生している場所は、タイプ.m4aのファイルから生データを取得しているときに欠けているようです。例えば、私がiTunesからチェックする元のファイルが7.4MBの場合、私のコードから得られるものは、サイズ7.3MBです。私はいくつかの研究を行い、.m4aファイルは実際にカプセル化されていることがわかりました。私はファイルのカプセル化を生の音楽データだけにしていないと思いますので、認識できません。ここで私はMPMediaItem.m4a iPodライブラリの生データが再生されない
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