|
|
@@ -33,19 +33,19 @@
|
|
|
AVURLAsset *songAsset = [AVURLAsset URLAssetWithURL:url options:nil];
|
|
|
NSError *assetError = nil;
|
|
|
AVAssetReader *assetReader = [AVAssetReader assetReaderWithAsset:songAsset
|
|
|
- error:&assetError];
|
|
|
+ error:&assetError];
|
|
|
if (assetError) {
|
|
|
NSLog (@"error: %@", assetError);
|
|
|
return nil;
|
|
|
}
|
|
|
|
|
|
AVAssetWriter *assetWriter = [AVAssetWriter assetWriterWithURL:exportURL
|
|
|
- fileType:AVFileTypeCoreAudioFormat
|
|
|
- error:&assetError];
|
|
|
+ fileType:AVFileTypeCoreAudioFormat
|
|
|
+ error:&assetError];
|
|
|
|
|
|
AVAssetReaderOutput *assetReaderOutput = [AVAssetReaderAudioMixOutput
|
|
|
- assetReaderAudioMixOutputWithAudioTracks:songAsset.tracks
|
|
|
- audioSettings: nil];
|
|
|
+ assetReaderAudioMixOutputWithAudioTracks:songAsset.tracks
|
|
|
+ audioSettings: nil];
|
|
|
|
|
|
[assetReader addOutput: assetReaderOutput];
|
|
|
|
|
|
@@ -67,7 +67,7 @@
|
|
|
[NSNumber numberWithBool:NO], AVLinearPCMIsBigEndianKey,
|
|
|
nil];
|
|
|
AVAssetWriterInput *assetWriterInput = [AVAssetWriterInput assetWriterInputWithMediaType:AVMediaTypeAudio
|
|
|
- outputSettings:outputSettings];
|
|
|
+ outputSettings:outputSettings];
|
|
|
if ([assetWriter canAddInput:assetWriterInput]) {
|
|
|
[assetWriter addInput:assetWriterInput];
|
|
|
} else {
|
|
|
@@ -84,7 +84,13 @@
|
|
|
CMTime startTime = CMTimeMake (0, soundTrack.naturalTimeScale);
|
|
|
[assetWriter startSessionAtSourceTime: startTime];
|
|
|
|
|
|
+ while (assetWriterInput.readyForMoreMediaData == FALSE) {
|
|
|
+ NSDate *maxDate = [NSDate dateWithTimeIntervalSinceNow:0.1];
|
|
|
+ [[NSRunLoop currentRunLoop] runUntilDate:maxDate];
|
|
|
+ NSLog(@"等待几秒试试");
|
|
|
+ }
|
|
|
__block UInt64 convertedByteCount = 0;
|
|
|
+ BOOL isFinish = false;
|
|
|
|
|
|
while (assetWriterInput.readyForMoreMediaData) {
|
|
|
CMSampleBufferRef nextBuffer = [assetReaderOutput copyNextSampleBuffer];
|
|
|
@@ -92,17 +98,28 @@
|
|
|
// append buffer
|
|
|
[assetWriterInput appendSampleBuffer: nextBuffer];
|
|
|
convertedByteCount += CMSampleBufferGetTotalSampleSize (nextBuffer);
|
|
|
- } else {
|
|
|
+
|
|
|
+ }else{
|
|
|
// done!
|
|
|
[assetWriterInput markAsFinished];
|
|
|
[assetWriter finishWritingWithCompletionHandler:^{
|
|
|
}];
|
|
|
[assetReader cancelReading];
|
|
|
+ isFinish = true;
|
|
|
+
|
|
|
return [NSData dataWithContentsOfURL:exportURL];
|
|
|
- break;
|
|
|
}
|
|
|
}
|
|
|
+ // done!
|
|
|
+ if (!isFinish) {
|
|
|
+ [assetWriterInput markAsFinished];
|
|
|
+ [assetWriter finishWritingWithCompletionHandler:^{
|
|
|
+ }];
|
|
|
+ [assetReader cancelReading];
|
|
|
+
|
|
|
+ }
|
|
|
return [NSData dataWithContentsOfURL:exportURL];
|
|
|
}
|
|
|
|
|
|
@end
|
|
|
+
|