Tag: avfoundation

如何解决警告:发送'ViewController * const __strong'参数的不兼容types'id <AVAudioPlayerDelegate>?

下面的代码给Sending 'ViewController *const __strong' to parameter of incompatible type 'id<AVAudioPlayerDelegate>' (它是下面的代码中的第三行)的Sending 'ViewController *const __strong' to parameter of incompatible type 'id<AVAudioPlayerDelegate>'警告: NSURL *sound0URL = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"0" ofType:@"aiff"]]; audioPlayer0 = [[AVAudioPlayer alloc] initWithContentsOfURL:sound0URL error:nil]; [audioPlayer0 setDelegate: self]; // <— this line causes the warning [audioPlayer0 prepareToPlay]; audioPlayer0.currentTime = 0; [audioPlayer0 play]; 如何解决? 我在ViewController的viewDidLoad的实例方法中有这样的代码。 还有一个类似的问题,那就是一个类方法: 从Class中分配'id […]

用相机进行人脸检测

我如何才能像“相机”那样实时进行人脸检测? 我注意到, AVCaptureStillImageOutput在10.0之后被弃用,所以我使用AVCapturePhotoOutput来代替。 但是,我发现我为面部检测保存的图像不是很满意? 有任何想法吗? UPDATE 之后试一试@Shravya Boggarapu提到。 目前,我使用AVCaptureMetadataOutput来检测没有CIFaceDetector的人脸。 它按预期工作。 然而,当我试图画出脸的界限时,似乎错位了。 任何想法? let metaDataOutput = AVCaptureMetadataOutput() captureSession.sessionPreset = AVCaptureSessionPresetPhoto let backCamera = AVCaptureDevice.defaultDevice(withDeviceType: .builtInWideAngleCamera, mediaType: AVMediaTypeVideo, position: .back) do { let input = try AVCaptureDeviceInput(device: backCamera) if (captureSession.canAddInput(input)) { captureSession.addInput(input) // MetadataOutput instead if(captureSession.canAddOutput(metaDataOutput)) { captureSession.addOutput(metaDataOutput) metaDataOutput.setMetadataObjectsDelegate(self, queue: DispatchQueue.main) metaDataOutput.metadataObjectTypes = [AVMetadataObjectTypeFace] previewLayer = AVCaptureVideoPreviewLayer(session: […]

AVFoundation + AssetWriter:通过图像和audio生成电影

我必须从我的iPhone应用程序包含UIImage从NSArray中导出电影,并添加一些.caf格式的audio文件,必须在预先指定的时间开始。 现在我已经能够使用AVAssetWriter(经过这个和其他网站上的许多问题和答案)导出包含图像的video部分,但似乎找不到一种方法来添加audio文件来完成电影。 这是我迄今得到的 -(void) writeImagesToMovieAtPath:(NSString *) path withSize:(CGSize) size { NSLog(@"Write Started"); NSError *error = nil; AVAssetWriter *videoWriter = [[AVAssetWriter alloc] initWithURL: [NSURL fileURLWithPath:path] fileType:AVFileTypeQuickTimeMovie error:&error]; NSParameterAssert(videoWriter); NSDictionary *videoSettings = [NSDictionary dictionaryWithObjectsAndKeys: AVVideoCodecH264, AVVideoCodecKey, [NSNumber numberWithInt:size.width], AVVideoWidthKey, [NSNumber numberWithInt:size.height], AVVideoHeightKey, nil]; AVAssetWriterInput* videoWriterInput = [[AVAssetWriterInput assetWriterInputWithMediaType:AVMediaTypeVideo outputSettings:videoSettings] retain]; AVAssetWriterInputPixelBufferAdaptor *adaptor = [AVAssetWriterInputPixelBufferAdaptor assetWriterInputPixelBufferAdaptorWithAssetWriterInput:videoWriterInput sourcePixelBufferAttributes:nil]; NSParameterAssert(videoWriterInput); […]

使用AVPlayer时保持良好的滚动性能

我正在处理有收集视图的应用程序,并且收集视图的单元格可以包含video。 现在我正在使用AVPlayer和AVPlayerLayer来显示video。 不幸的是,滚动性能是可怕的。 AVPlayer , AVPlayerItem和AVPlayerLayer似乎在主线程上做了很多工作。 他们不断地取出锁,等待信号等,这是阻塞主线,造成严重的帧丢失。 有什么方法可以告诉AVPlayer停止在主线程上做很多事情吗? 到目前为止,我没有尝试过解决了这个问题。 我也尝试使用AVSampleBufferDisplayLayer构build一个简单的video播放器。 使用这个function,我可以确保所有的事情都是在主线程中发生的,在滚动和播放video的同时我可以达到60fps。 不幸的是,这种方法要低得多,并且不提供audio播放和时间清理等function。 有什么方法可以与AVPlayer获得类似的性能? 我宁愿使用它。 编辑:进一步调查之后,使用AVPlayer时看起来不太可能实现良好的滚动性能。 创build一个AVPlayer并与一个AVPlayerItem实例关联起来,这些工作就会蹦蹦跳进主线程,然后等待信号并尝试获取一堆锁。 随着滚动视图中video的数量的增加,主线程停顿的时间也相应增加。 AVPlayer dealloc也似乎是一个巨大的问题。 释放一个AVPlayer也试图同步一堆东西。 同样,当你创造更多的球员时,这会变得非常糟糕。 这是非常令人沮丧的,这使得AVPlayer几乎无法用于我正在做的事情。 阻止这样的主线是这样一个业余的事情,很难相信苹果的工程师会犯这样的错误。 无论如何,希望他们能尽快解决这个问题。

AVURLAsset拒绝加载video

我试图加载video文件到我的iPad应用程序作为一个AVURLAsset ,使用asynchronous加载的东西,等待它准备好了。 问题是,当我运行它,我得到一个完全通用的“失败”的错误消息,我不知道该怎么办。 如果我把它交给MPMoviePlayerController ,video就可以工作,但是AVURLAsset似乎拒绝与它有任何关系。 码: asset = [[AVURLAsset alloc] initWithURL:[NSURL URLWithString:[docPath stringByAppendingPathComponent:@"video.mov"]] options:nil]; [asset loadValuesAsynchronouslyForKeys:[NSArray arrayWithObject:@"tracks"] completionHandler:^{ dispatch_async(dispatch_get_main_queue(), ^{ [self composeIfReady]; }); }]; … – (void)composeIfReady { NSError *error = nil; if([asset statusOfValueForKey:@"tracks" error:&error] == AVKeyValueStatusFailed) NSLog(@"error loading: %@", [error description]); if(error == nil) NSLog(@"okay awesome"); } 输出: error loading: Error Domain=AVFoundationErrorDomain Code=-11800 "The […]

AVAssetImageGenerator提供旋转的图像

当通过AVAssetImageGenerator获取video的UIImage时,我回头看图像旋转(当然,在技术上他们不是)纵向拍摄的video。 我怎样才能知道video拍摄的方向,然后正确旋转图像? AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:url options:nil]; AVAssetImageGenerator *generate = [[AVAssetImageGenerator alloc] initWithAsset:asset]; NSError *err = NULL; CMTime time = CMTimeMake(0, 60); CGImageRef imgRef = [generate copyCGImageAtTime:time actualTime:NULL error:&err]; [generate release]; UIImage *currentImg = [[UIImage alloc] initWithCGImage:imgRef];

ios使用AVFramework捕获图像

我使用此代码捕捉图像 #pragma mark – image capture // Create and configure a capture session and start it running – (void)setupCaptureSession { NSError *error = nil; // Create the session AVCaptureSession *session = [[AVCaptureSession alloc] init]; // Configure the session to produce lower resolution video frames, if your // processing algorithm can cope. We'll specify medium quality […]

Swift 2.0:expression式的types是不明确的,没有更多的上下文?

以下用于Swift 1.2中的工作: var recordSettings = [ AVFormatIDKey: kAudioFormatMPEG4AAC, AVEncoderAudioQualityKey : AVAudioQuality.Max.rawValue, AVEncoderBitRateKey : 320000, AVNumberOfChannelsKey: 2, AVSampleRateKey : 44100.0] 现在,它给出了错误: “typesexpression是不明确的,没有更多的上下文”。

将实时相机video从iOS(iPhone / iPad)stream式传输到远程PC /服务器

我一直在寻找一段时间在stackoverflow和networking周围解决我的videostream问题。 我需要以一种方式将从摄像机捕获的实时video(不需要高质量)从iOS设备传输到远程PC,即,iOS设备将向服务器/ PC发送videostream,而不是相反。 在一些Googlesearch和文档浏览之后出现的是,主要的标准/协议可以被使用: 苹果的HTTP实时stream媒体(HLS) Adobe的RTMP 同样,我的要求是iPhone / iPad将stream式传输video。 从苹果网站上的内容来看,我明白HLS是从编码angular度来看服务器端使用的,而解码视angular是iOS端。 从RTMP开始,大多数允许iOSstream媒体的库都有商业许可证和封闭代码,或者要求您通过他们的P2P基础设施(例如angl.tv或tokbox.com/opentok/quick-start )。 从HLS开始,iOS侧似乎没有编码库。 所以我的问题是: 你知道任何SDK /图书馆最好是开放和免费的,我可以整合到从我的应用程序中stream捕获的video? 如果不是的话,你认为开发一个定制的图书馆将是一个危险的丛林跨越的努力? 我的猜测是通过AVFoundation并捕捉相机帧,逐帧压缩,并通过HTTP发送。 这听起来疯狂的性能和带宽明智吗? 请注意,在这种情况下,我需要使用HLS或RTMP编码器。 亲爱的朋友,我非常感谢你。 迈赫迪

如何使用Swift播放声音?

我想用Swift播放声音。 我的代码在Swift 1.0中工作,但现在在Swift 2或更新版本中不再有效。 override func viewDidLoad() { super.viewDidLoad() let url:NSURL = NSBundle.mainBundle().URLForResource("soundName", withExtension: "mp3")! do { player = try AVAudioPlayer(contentsOfURL: url, fileTypeHint: nil) } catch _{ return } bgMusic.numberOfLoops = 1 bgMusic.prepareToPlay() if (Data.backgroundMenuPlayed == 0){ player.play() Data.backgroundMenuPlayed = 1 } }