4

存在estimatedOutputFileLength属性AVAssetExportSession始终返回0的问题(并在模拟器上返回-9223372036854775808)。

我已经尝试了一切以使其正常工作,尝试不同outputFileType的 s,shouldOptimizeForNetworkUse打开和关闭,指定(或不指定)outputURL...尽管如此,似乎没有任何效果,我开始认为这可能是一个错误在 SDK 中。

这是我的代码:

AVAssetExportSession *exportSession = [[AVAssetExportSession alloc] initWithAsset:asset presetName:AVAssetExportPresetMediumQuality]; // doesn't matter which preset is used
//exportSession.shouldOptimizeForNetworkUse = YES;
exportSession.outputFileType = AVFileTypeQuickTimeMovie;
NSLog(@"bytes = %lld", exportSession.estimatedOutputFileLength);

我只是不明白为什么这不起作用!(iOS 6、iPhone 5)

4

2 回答 2

8

您可以通过在 exportSession 上设置适当的 timeRange 来解决此问题:

exportSession.timeRange = CMTimeRangeMake(kCMTimeZero, asset.duration);

似乎在 iOS 中,估计文件长度时 AVAssetExportSessionInternal.timeRange 没有得到合理的结果。

于 2013-10-08T02:26:16.667 回答
1

您需要包括时间范围。

您打算导出多少文件。没有它,它将返回 0,

AVAssetExportSession *exporter = [[AVAssetExportSession alloc] initWithAsset: songAsset presetName: AVAssetExportPresetAppleM4A];
exporter.outputFileType = AVFileTypeAppleM4A;

CMTime full = CMTimeMultiplyByFloat64(exporter.asset.duration, 1);
exporter.timeRange = CMTimeRangeMake(kCMTimeZero, full);
long long size = exporter.estimatedOutputFileLength;
fileInfo.fileSize = size;
于 2014-10-28T11:08:59.850 回答