我正在编写一个使用AVFoundation处理视频的应用程序.
我的应用程序的行为很简单:我从相机胶卷拍摄视频,然后创建一个带有一些音轨的AVMutableComposition.使用混合合成我初始化AVAssetExportSession,将视频文件存储在我的应用程序的文档目录中.
在此之前,一切都没问题:我的视频已存储,我可以在另一个控制器中播放.如果我将刚刚存储在我的文档文件夹中的视频进行一些编辑(与第一次AVmutableComposition,AVAssetExportSession相同)再次没问题.
但是我第三次执行此过程来编辑视频,AVAssetExportSession状态变为"Fail"并出现此错误:
"Domain=AVFoundationErrorDomain Code=-11820 "Cannot Complete Export" UserInfo=0x1a9260 {NSLocalizedRecoverySuggestion=Try exporting again., NSLocalizedDescription=Cannot Complete Export}"
我读过这是一个无法导出会话的一般错误.这是什么意思?为什么我第三次进行编辑过程?这可能是内存管理错误吗?一个bug?这是我的AVAssetExportSession的代码:
_assetExport = [[AVAssetExportSession alloc] initWithAsset:mixComposition presetName:AVAssetExportPresetHighestQuality];
_assetExport.shouldOptimizeForNetworkUse = YES;
///data odierna
NSDateFormatter *format = [[NSDateFormatter alloc] init];
[format setDateFormat:@"ddMMyyyyHHmmss"];
NSDate *now = [[NSDate alloc] init];
NSString *dateString = [format stringFromDate:now];
[now release];
[format release];
NSString* ext = @".MOV";
NSString* videoName=[NSString stringWithFormat:@"%@%@", dateString, ext];
///data odierna
NSString *exportPath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:videoName];
if ([[NSFileManager defaultManager] fileExistsAtPath:exportPath])
{
[[NSFileManager defaultManager] removeItemAtPath:exportPath error:nil];
} …Run Code Online (Sandbox Code Playgroud) 应用历史记录:我正在尝试发送已存在的应用更新.此版本是第一个实施In App Purchase代码的版本.我测试了app和inapp,所有工作都在沙盒环境中.Naturraly我无法测试官方环境,直到inapp被批准,但我确定我使用验证收件人的PHP脚本工作,因为我仍然使用它已经在商店中的其他应用程序.
首先提交:我已经发送同时审查inapp和应用程序,似乎一切正常,但我的应用程序被拒绝,因为无法购买inapp.同时我的inapp被拒绝了,在iTunes中我发现了这个:

在inapp的细节:

单击语言详细信息:
此时我搜索了我的itunes应用程序设置,我找到了一个关于语言的设置,在"应用程序信息"部分中,默认语言被设置为inapp的不同语言.我已经更改了此设置,现在app和inapp都使用了相同的语言.我删除了inapp,我创建了另一个同名,标识符ecc.inapp状态更改为等待审核,然后我重新提交应用程序的相同包.
第二次提交:我的应用程序和我的应用程序再次被拒绝.错误,拒绝的原因是相同的,我在inapp部分有相同的行为.决议中心的信息如下:
"2.2
我们发现,在运行iOS 6.0.1的iPhone 5上,在Wi-Fi和蜂窝网络上查看时,您的应用会出现一个或多个错误,这不符合App Store审核指南.
具体来说,我们注意到在尝试购买In App AddOn时会显示错误消息.
有关详细信息,请参阅随附的屏幕截图."
我认为此消息是里程碑,我的应用程序显示的错误消息是我在收到SKPaymentTransactionStateFailed或我无法验证收件人时触发的警报.所有这些功能在沙箱中都能正常工作.
我的inapp有什么问题?任何人都有类似的东西吗?
我的应用被拒绝,因为它必须遵循iOS数据存储指南.我已经在stackoverflow上阅读了一些答案,我已经阅读了一些博客......我知道我的问题,在第一次应用程序启动时我复制1个sqlite数据库并解压缩文档文件夹中的一些图像.问题是icloud自动填充文件目录中的任何文件.我不需要在我的应用程序中使用icloud,但我的文件必须保留在文档文件夹中,因为它们是我的应用程序的基础数据,必须是persit(缓存文件夹或临时文件夹不是正确的解决方案).所以我读到了一个标志,我可以逐个文件设置以禁止备份:
[URL setResourceValue:[NSNumber numberWithBool:YES] forKey:NSURLIsExcludedFromBackupKey error:nil];
我还读过这个方法只适用于高于5.0.1的ios,在另一个中它将被简单地忽略(我已经将我的ios部署目标设置为4.3)...如果我使用这种方法我的应用程序将再次被拒绝因为较旧的ios设备备份不受管理?如果是,有一个cross-iosversion方法来设置NSURLIsExcludedFromBackupKey?
编辑我很抱歉icloud不存在于ios 5.0之前,所以我认为问题只涉及版本5.0和5.0.1之间的差异,我错了?
我的应用程序被拒绝,因为似乎7 MB存储在文档文件夹中,它们会自动发送到icloud.所以我已经通过这种方法循环将写入文档文件夹的所有文件:
- (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL {
const char* filePath = [[URL path] fileSystemRepresentation];
const char* attrName = "com.apple.MobileBackup";
if (&NSURLIsExcludedFromBackupKey == nil) {
// iOS 5.0.1 and lower
u_int8_t attrValue = 1;
int result = setxattr(filePath, attrName, &attrValue, sizeof(attrValue), 0, 0);
return result == 0;
}
else {
// First try and remove the extended attribute if it is present
int result = getxattr(filePath, attrName, NULL, sizeof(u_int8_t), 0, 0);
if (result != -1) {
// The attribute exists, we need …Run Code Online (Sandbox Code Playgroud) 我正在编写一个使用AVFoundation和CMTime的应用程序.我已经记录了CMTime使用创建的实例的值CMTimeMake().此值似乎四舍五入到最接近的整数.我需要一个CMTime具有精确值的实例,而不需要舍入.
我在CMTime参考文献中看到了舍入常量:
enum {
kCMTimeRoundingMethod_RoundHalfAwayFromZero = 1,
kCMTimeRoundingMethod_RoundTowardZero = 2,
kCMTimeRoundingMethod_RoundAwayFromZero = 3,
kCMTimeRoundingMethod_QuickTime = 4,
kCMTimeRoundingMethod_RoundTowardPositiveInfinity = 5,
kCMTimeRoundingMethod_RoundTowardNegativeInfinity = 6,
kCMTimeRoundingMethod_Default = kCMTimeRoundingMethod_RoundHalfAwayFromZero
};
Run Code Online (Sandbox Code Playgroud)
没有任何关于如何控制这些策略应用于CMTime实例的示例?或者,如果这不是正确的方法,我如何从CMTime实例中提取精确值?
编辑:
我找到并测试过了CMTIME_HAS_BEEN_ROUNDED().我将我的CMTime实例传递给了这个函数并返回No(表示该值尚未舍入).那为什么我会失去精确度呢?
在我的应用我插入了视频轨道的编辑音轨和结果(第一,然后由AVMutableComposition由保存在一个文件中exportAsynchronouslyWithCompletionHandler).我用过AVFoundation.是否有另一个框架可用于达到相同的结果?