gpt4 book ai didi

ios - AVExportSession 适用于模拟器、iPad 2 但不适用于 iPad 4

转载 作者:行者123 更新时间:2023-11-29 13:01:16 26 4
gpt4 key购买 nike

更新:奇怪的是,这段代码在 iPad 2 上运行良好,但在 iPad 4th Gen 上运行良好。

更新 #2:如果我将 presetName:AVAssetExportPresetHighestQuality 更改为 presetName:AVAssetExportPresetPassThrough,视频会成功导出,但我无法在设备中播放。如果我通过 xCode 的管理器将应用程序包拉到我的计算机上,我就可以播放它。同样,这个问题只出现在 iPad 4 上,不会出现在 iPad 2、64 位模拟器、视网膜模拟器或 1x 模拟器上。

我正在使用 AVExportSession 混合一些音频和视频。它在模拟器和 iPad 2 上运行得非常愉快,但在第 4 代 iPad 上运行不佳。导出 session 出现 -11820 错误 (AVErrorExportFailed),但这就是有用的程度我可以从过程中得到的信息。源文件存在,其他一切工作顺利,但不是 AVExportSession

你能帮我让它在设备上也能正常工作吗?

对于该方法的冗长表示歉意。

-(NSURL*)bindAudioAndVideo:(NSString*)audioFileName videoFileName:(NSString*)videoFileName
{

//documents folder
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsFolder = [[NSString alloc] initWithString:[paths objectAtIndex:0]]; //Get the docs directory

AVMutableComposition* mixComposition = [AVMutableComposition composition];

NSString* audio_inputFileName = audioFileName;
NSString* audio_inputFilePath = [documentsFolder stringByAppendingPathComponent:audio_inputFileName];
NSURL* audio_inputFileUrl = [NSURL fileURLWithPath:audio_inputFilePath];

NSString* video_inputFileName = videoFileName;
NSString* video_inputFilePath = [documentsFolder stringByAppendingPathComponent:video_inputFileName];
NSURL* video_inputFileUrl = [NSURL fileURLWithPath:video_inputFilePath];

NSString* outputFileName = @"outputFile.mp4";
NSString* outputFilePath = [documentsFolder stringByAppendingPathComponent:outputFileName];
NSURL* outputFileUrl = [NSURL fileURLWithPath:outputFilePath];

//Check files actually exist before beginning (they do)

AVMutableComposition* mixComposition = [AVMutableComposition composition];
CMTime nextClipStartTime = kCMTimeZero;

AVURLAsset* videoAsset = [[AVURLAsset alloc]initWithURL:video_inputFileUrl options:nil];
CMTimeRange video_timeRange = CMTimeRangeMake(kCMTimeZero,videoAsset.duration);
AVMutableCompositionTrack *a_compositionVideoTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid];
[a_compositionVideoTrack insertTimeRange:video_timeRange ofTrack:[[videoAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0] atTime:nextClipStartTime error:nil];


AVURLAsset* audioAsset = [[AVURLAsset alloc]initWithURL:audio_inputFileUrl options:nil];
CMTimeRange audio_timeRange = CMTimeRangeMake(kCMTimeZero, audioAsset.duration);
AVMutableCompositionTrack *b_compositionAudioTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid];
[b_compositionAudioTrack insertTimeRange:audio_timeRange ofTrack:[[audioAsset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0] atTime:nextClipStartTime error:nil];



AVAssetExportSession* _assetExport = [[AVAssetExportSession alloc] initWithAsset:mixComposition presetName:AVAssetExportPresetHighestQuality];
_assetExport.outputFileType = @"com.apple.quicktime-movie";
_assetExport.outputURL = outputFileUrl;

[_assetExport exportAsynchronouslyWithCompletionHandler:
^(void ) {
[self addSkipBackupAttributeToItemAtURL:outputFileUrl];
NSLog(@"Completed. Tidy time.");

switch ([_assetExport status]) {
case AVAssetExportSessionStatusCompleted:
NSLog(@"Export Completed");
break;
case AVAssetExportSessionStatusFailed:
NSLog(@"Export failed: %@", [[_assetExport error] localizedDescription]);
NSLog (@"FAIL %@",_assetExport.error); //-11820! I AM A USELESS ERROR CODE
NSLog (@"supportedFileTypes: %@", _assetExport.supportedFileTypes);
break;
case AVAssetExportSessionStatusCancelled:
NSLog(@"Export cancelled");
break;
default:
break;
}


NSTimer *refreshTimer = [NSTimer timerWithTimeInterval:0.1 target:self selector:@selector(exportCompleteRefreshView) userInfo:Nil repeats:NO];

//Throw back to main thread unuless you want really long delays for no reason.
[[NSRunLoop mainRunLoop] addTimer:refreshTimer forMode:NSRunLoopCommonModes];
}
];



return outputFileUrl;
}

最佳答案

如果问题与视网膜 iPad 有关 - 它与设备分辨率有关,由于某种原因模拟器没有模拟。

由于我是在设备上制作视频,所以我在视网膜设备上制作了 2048x1536 视频(在非视网膜设备上制作了 1024x768 视频)。显然,对于 AVExportSession 来说,像素太多,无法处理,或者 iPad 无法正常播放,所以它只是在播放或导出时向我抛出各种模糊的错误消息。以点分辨率而不是像素分辨率记录似乎解决了这个问题。

模拟器似乎是一个转移注意力的问题,因为它拥有相对无限的健康 Mac 资源,而不是 A6。

关于ios - AVExportSession 适用于模拟器、iPad 2 但不适用于 iPad 4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19713331/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com