Tag: avasset

状态为AVKeyValueStatusFailed时,重新加载AVAsset中的密钥

我正在做以下事情: 使用给定的URL创build一个新的AVAsset 。 该URL指向远程Web服务器上的video。 尝试通过调用loadValuesAsynchronouslyForKeys:completionHandler:来加载tracks属性loadValuesAsynchronouslyForKeys:completionHandler: 初始请求失败,因为没有互联网连接 我注意到通过调用statusOfValueForKey:error:失败的请求statusOfValueForKey:error: 然后等待连接重新出现(使用一些可达性代码)。 一旦这样做,我再次调用loadValuesAsynchronouslyForKeys:completionHandler: 这是问题出现的地方。 我会想象, AVAsset继续并尝试重新加载的轨道属性,因为它以前失败。 但是,这似乎并没有发生。 statusOfValueForKey:error:仍然会返回AVKeyValueStatusFailed ,尽pipe可用的互联网连接可用且video可播放。 有没有办法重置这个给定的属性的状态,并尝试另一个负载? 有没有其他的方法来解决这个问题?

AVAssetExportSession给我一个输出video的右侧和底部的绿色边框

代码如下: AVAssetExportSession *exporter = [[AVAssetExportSession alloc] initWithAsset:mixComposition presetName:AVAssetExportPresetHighestQuality]; exporter.outputURL = outputUrl; exporter.outputFileType = AVFileTypeQuickTimeMovie; exporter.videoComposition = mainComposition; exporter.shouldOptimizeForNetworkUse = YES; [exporter exportAsynchronouslyWithCompletionHandler:^{ //completion }]; 我尝试了不同的质量设置。 无论我尝试渲染什么video,我都会在video的右侧沿着底部获取一个1-2像素的边框。 什么可能导致这个,我该如何解决? 编辑:我没有在任何地方使用任何种类的绿色,所以这必须以某种方式来自框架。

AVAsset“tracksWithMediaType”返回一个空数组

这是我用来将video合并到一起的方法的开始 -(void) mergeVideosAndAudio:(AVAsset *)audioAsset{ //Load Video Assets NSError *error; NSArray *dirFiles; if ((dirFiles = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:[self documentsDirectory] error:&error]) == nil) { // handle the error }; // find all the temp files NSArray *movFiles = [dirFiles filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"self BEGINSWITH 'temp'"]]; NSLog(@"The are %i temp files",movFiles.count); //Create assets array NSMutableArray *assets = [[NSMutableArray alloc]init]; for […]

AVPlayer / AVPlayerItem如何通知我的应用程序有关不可达的networking故障?

我正在使用AVPlayer在iOS应用程序中实现自定义video播放器。 要从networking播放video,我分配一个播放器: [[AVPlayer alloc] initWithURL:_URL]; 创build资产: AVURLAsset *asset = [AVURLAsset URLAssetWithURL:self.URL options:@{AVURLAssetPreferPreciseDurationAndTimingKey : @(YES)}]; asynchronous加载playable密钥: NSArray *keys = @[@"playable"]; [asset loadValuesAsynchronouslyForKeys:keys completionHandler:^{ dispatch_async(dispatch_get_main_queue(), ^{ for (NSString *key in keys) { NSError *error; AVKeyValueStatus status = [asset statusOfValueForKey:key error:&error]; if (status == AVKeyValueStatusFailed) { NSLog(@"Failed to load asset key %@ error %@", key, [error localizedDescription]); [self […]

使用AVAssetReader按时间值获取特定的帧

我已经检查了这个http://www.7twenty7.com/blog/2010/11/video-processing-with-av-foundation来逐帧获取video。 但我真正的要求是在特定的时间得到一个框架。 我知道应该可以通过AVAssetReader ,不知道是否有任何直接的方法在AVAssetReader 。 请给我任何指导,如何在特定时间得到框架。 我检查了AVAssetImageGenerator但这不是我真正想要的。 最后我find了答案,你必须使用timeRange属性。 这是唯一的方法。

如何从ios开发中的mp3文件中提取元数据

我正在使用云存储的ios音乐播放器。 我需要提取标题,艺术家,艺术品等音乐信息。 我有一个叫playit的动作,播放和暂停mp3文件。 它也应该填充一些与mp3文件相关的元数据的UILables和UIImage。 问题是我无法从超过不同的25个mp3文件中提取元数据。 这是我的代码: 文件的URL是正确的,因为audio播放器能够find并播放它,但我不知道为什么avmetadataitem无法获得元数据。 – (IBAction)playIt:(id)sender { AVAudioPlayer *audioPlayer; AVAsset *assest; NSString * applicationPath = [[NSBundle mainBundle] resourcePath]; NSString *secondParentPath = [applicationPath stringByDeletingLastPathComponent]; NSString *soundFilePath = [[secondParentPath stringByAppendingPathComponent:@"fisal1407"] stringByAppendingPathComponent:[musicFiles objectForKey:@"show_id"] ]; NSURL *fileURL = [NSURL URLWithString:[soundFilePath stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]]; assest = [AVURLAsset URLAssetWithURL:fileURL options:nil]; NSArray *metadata = [assest commonMetadata]; for (NSString *format in […]

将CIFilter应用于video文件并保存

有没有快速,轻量级的方式来将CIFilter应用于video? 在提到之前,我已经看过GPUImage–它看起来像是非常强大的魔法代码,但是对于我正在尝试做的事情来说,这确实是过度杀伤力。 本质上,我想 拍一个video文件,比如保存在/tmp/myVideoFile.mp4 将CIFilter应用于此video文件 将video文件保存到不同(或相同)的位置,例如/tmp/anotherVideoFile.mp4 我已经能够将CIFilter应用于使用AVPlayerItemVideoOutput let player = AVPlayer(playerItem: AVPlayerItem(asset: video)) let output = AVPlayerItemVideoOutput(pixelBufferAttributes: nil) player.currentItem?.addOutput(self.output) player.play() let displayLink = CADisplayLink(target: self, selector: #selector(self.displayLinkDidRefresh(_:))) displayLink.addToRunLoop(NSRunLoop.mainRunLoop(), forMode: NSRunLoopCommonModes) func displayLinkDidRefresh(link: CADisplayLink){ let itemTime = output.itemTimeForHostTime(CACurrentMediaTime()) if output.hasNewPixelBufferForItemTime(itemTime){ if let pixelBuffer = output.copyPixelBufferForItemTime(itemTime, itemTimeForDisplay: nil){ let image = CIImage(CVPixelBuffer: pixelBuffer) // apply filters to […]

从Live Photo中提取video部分

有没有人想出如何从现场照片提取video部分? 我正在开发一个应用程序,将Live Photos转换为GIF,第一步是从Live Photo获取video文件。 这似乎应该是可能的,因为如果你插入手机到Mac,你可以看到单独的图像和video文件。 我在提取过程中遇到了一堵砖墙,而且我尝试了很多方法来完成,而且都失败了。 我做的第一件事是通过执行以下操作获取我认为是Live Photovideo部分的PHAsset: if let livePhoto = info["UIImagePickerControllerLivePhoto"] as? PHLivePhoto { let assetResources = PHAssetResource.assetResourcesForLivePhoto(livePhoto) for assetRes in assetResources { if (assetRes.type == .PairedVideo) { let assets = PHAsset.fetchAssetsWithLocalIdentifiers([assetRes.assetLocalIdentifier], options: nil) if let asset = assets.firstObject as? PHAsset { 将PHAsset转换为AVAsset我试过了: asset.requestContentEditingInputWithOptions(nil, completionHandler: { (contentEditingInput, info) -> Void in if let […]

需要在mpmovieplayercontroller swift中显示video的图像

我已经在我的同事档案中提出了这个疑问,但还没有解决scheme。 请帮我解决这个问题。 我已经打了4个多小时。 到目前为止我做了: 我使用从画廊中selectvideo,并使用mpmovieplayercontroller在屏幕上显示。 在这里,我一个一个select2个video。 如果我select第一个video,并显示,当我移动加载第二个video,我的第一个video屏幕是black 。 但我需要在该播放器中显示video图像。 如何做到这一点,请帮助我 我的代码: import UIKit import AVFoundation import MobileCoreServices import AssetsLibrary import MediaPlayer import CoreMedia class ViewController: UIViewController,UIGestureRecognizerDelegate { var Asset1: AVAsset? var Asset2: AVAsset? var Asset3: AVAsset? var audioAsset: AVAsset? var loadingAssetOne = false // swt duplicate image for thumbnail image for audio @IBOutlet weak var […]

iOS中的video编辑问题

我目前正在合并所需数量的video的iOS应用程序。 一旦用户点击button合并video,videojoin,然后使用AVPlayer播放: CMTime nextClipStartTime = kCMTimeZero; NSInteger i; CMTime transitionDuration = CMTimeMake(1, 1); // Default transition duration is one second. // Add two video tracks and two audio tracks. AVMutableCompositionTrack *compositionVideoTracks[2]; AVMutableCompositionTrack *compositionAudioTracks[2]; compositionVideoTracks[0] = [self.mixComposition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid]; compositionVideoTracks[1] = [self.mixComposition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid]; compositionAudioTracks[0] = [self.mixComposition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid]; compositionAudioTracks[1] = [self.mixComposition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid]; CMTimeRange *passThroughTimeRanges […]