Tag: avfoundation

防止AVCaptureVideoPreviewLayer旋转,但允许UI层以方向旋转

我有两个视图控制器。 一个是根VC,包含录制button等UI界面。 在这个视图控制器上,我还显示另一个VC在索引0的视图。此视图包含一个AVCaptureVideoPreviewLayer。 我想我的摄像机模仿苹果video摄像头的应用程序,其中界面布局与旋转调整,但video预览层没有。 您可以看到股票video应用程序中的录制计时器(UILabel)如何消失,并根据方向重新显示在顶部。 任何想法如何做到这一点? 我发现一个build议,build议将预览添加到应用程序委托的窗口,因为它不符合导航控制器的旋转,但它不适用于我。 谢谢!

iOS旋转video的每一帧

我需要旋转一个video,因为iPhone后置摄像头正在录制,就好像它总是在左侧风景一样。 我需要物理旋转video,因为设置方向不适用于所有浏览器(例如Chrome)。 所以我设置了一些代码来读取录制的video并在旋转后保存。 我使用AVAssetExportSession这似乎工作得很好,除了两个问题: – 导出的video在开始时有一些黑色的框架 – 一些video不会被导出。 是否有可能对这个问题有所了解? 谢谢! 码: AVAsset* asset = [AVURLAsset URLAssetWithURL: videoUrl options:nil]; AVMutableComposition *composition = [AVMutableComposition composition]; AVMutableCompositionTrack *compositionVideoTrack = [composition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid]; AVMutableCompositionTrack *compositionAudioTrack = [composition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid]; AVAssetTrack *videoTrack = [[asset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0]; AVAssetTrack *audioTrack = [[asset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0]; [compositionVideoTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, asset.duration) ofTrack:videoTrack atTime:kCMTimeZero error: &error]; [compositionVideoTrack […]

在其他video正在播放时录制video

我正在使用UIImagePickerController来录制video。 并使用AVPlayer播放video。 并添加AVPlayerLayer到UIImagePickerController's cameraOverlayView以便我可以在录制时看到video。 我的要求是 我需要在使用UIImagePickerController录制video的同时观看video 使用耳机,我需要从播放video听audio 需要录制我的声音录制video 只有我的声音应该被logging,但不能播放video的audio。 所有的东西都在工作,但是4.播放video的audio也与我的声音混合 如何处理这种情况? 我的最终目标是 出场的video是耳机 录音的input是耳麦的麦克风 请帮我完成这件事。

CMTime和AVFoundation中的单帧移动

我试图用AVFoundation播放video。 我正在使用下面的代码为一个button提前播放一帧。 它间歇地工作,在一些执行中,它会做正确的事情,并提前一帧,但大多数时间,我将不得不按下button3或4次,才会推进一个框架。 这让我觉得这是一个精确的问题,但我无法弄清楚它是什么。 每次运行时,新的CMTime似乎都以相同的数量前进。 我的另一个理论是,它可能是由于currentTime没有被设置为一个精确的帧边界在我的帧速率(通过寻找video)。 但是我不知道如何以我的帧率“捕捉”到最近的帧。 AVAssetTrack *videoTrack = …; Float64 frameRate = [videoTrack nominalFrameRate]; CMTime currentTime = [self.playerItem currentTime]; CMTime oneFrame = CMTimeMakeWithSeconds(1.0 / frameRate, currentTime.timescale); CMTime added = CMTimeAdd(currentTime, oneFrame); [self.player seekToTime:added toleranceBefore:kCMTimeZero toleranceAfter:kCMTimeZero]; 谢谢你的帮助!

UIImagePickerController:从video获取图像

我试图从video中提取一个帧作为图像。 该video是使用UIImagePickerController录制的。 当video被logging时,我得到它的URL并使用AVURLAsset加载它。 然后我创build一个AVAssetReader和AVAssetReaderTrackOutput来获取单个帧。 当我得到框架作为CMSampleBufferRef的我传递给苹果的imageFromSampleBuffer方法,它应该返回一个UIImage。 当我使用AVCaptureSession获取帧时,此方法工作正常,但是当我使用通过UIImagePickerController录制的video时,此行将返回0x0: CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer); 其中sampleBuffer是我通过的CMSampleBufferRed。 我通过debugging器检查了sampleBuffer的值,它看起来不错(不是0x0)。 有什么理由为什么CMSampleBufferGetImageBuffer会返回0x0? 或者,还有另一种方法从MOV文件中提取单个video帧并将其保存为UIImage? 谢谢。

video不使用AVMutableVideoCompositionLayerInstruction旋转

我试图合并使用相机作为UIImagePickerController录制后得到的两个video。 我已经成功地将video合并成一个,但是我对video的方向有一些问题。 正如我已经明白它与UIImagePickerController是所有的video捕捉横向,这意味着以纵向logging的video旋转90°。 每次录制后,我将新video添加到数组中 func imagePickerController(picker: UIImagePickerController!, didFinishPickingMediaWithInfo info:NSDictionary) { let tempImage = info[UIImagePickerControllerMediaURL] as NSURL videos.append(tempImage) let pathString = tempImage.relativePath self.dismissViewControllerAnimated(true, completion: {}) } 然后,当我想要合并时,我会遍历每个video并创build一条指令,并将指令添加到另一个数组 var composition = AVMutableComposition() let trackVideo:AVMutableCompositionTrack = composition.addMutableTrackWithMediaType(AVMediaTypeVideo, preferredTrackID: CMPersistentTrackID()) let trackAudio:AVMutableCompositionTrack = composition.addMutableTrackWithMediaType(AVMediaTypeAudio, preferredTrackID: CMPersistentTrackID()) var insertTime = kCMTimeZero for i in 0…(videos.count-1){ let moviePathUrl = videos[i] let […]

用AVPlayer播放AVMutableComposition?

我试图让两个video顺序播放。 我试过AVQueuePlayer,但两个剪辑之间有一个巨大的“打嗝”。 我需要他们不间断地玩。 所以我试图使用AVMutableComposition和一个AVPlayer,但不能把它正确的。 这是我的代码(忽略内存泄漏,只是在一个空的项目中testing..): composition = [[AVMutableComposition alloc] init]; NSString * path = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"mp4"]; NSURL * url = [NSURL fileURLWithPath:path]; AVURLAsset * asset = [[AVURLAsset alloc] initWithURL:url options:nil]; NSError * error = NULL; [composition insertTimeRange:CMTimeRangeMake(CMTimeMake(0,1000),CMTimeMake(4,1000)) ofAsset:asset atTime:CMTimeMake(0,1000) error:&error]; if(error) NSLog(@"error: %@",error); path = [[NSBundle mainBundle] pathForResource:@"chug1" ofType:@"mp4"]; url = [NSURL fileURLWithPath:path]; […]

如何将视觉框架坐标系转化为ARKit?

我正在使用ARKit(与SceneKit)添加虚拟对象(例如球)。 我使用Vision框架跟踪真实世界对象(例如脚),并在视觉请求完成处理器方法中接收其更新的位置。 let request = VNTrackObjectRequest(detectedObjectObservation: lastObservation, completionHandler: self.handleVisionRequestUpdate) 我想用虚拟replace被跟踪的真实世界对象(例如,用立方体代替脚),但是我不知道如何将坐标系不同的BoundingBox矩形(我们在视觉请求完成中接收到的)replace为场景套件节点。 下面是视觉请求完成处理程序的代码: private func handleVisionRequestUpdate(_ request: VNRequest, error: Error?) { // Dispatch to the main queue because we are touching non-atomic, non-thread safe properties of the view controller DispatchQueue.main.async { // make sure we have an actual result guard let newObservation = request.results?.first as? VNDetectedObjectObservation else […]

使用AVFoundation在iOS上播放套接字stream的h.264电影

我正在使用常规套接字通过networking连接stream式传输电影内容的小型iPhone应用程序。 该video采用H.264格式。 然而,我不能播放/解码数据。 我一直在考虑使用FFMPEG ,但许可证使它不适合该项目。 我一直在寻找苹果的AVFoundation框架(特别是AVPlayer ),似乎能够处理h264内容,但我只能find方法来启动电影使用一个url – 而不是通过certificate一个内存缓冲区streamnetworking。 我一直在做一些testing,以使这种情况发生,使用以下方法: 使用普通的AVPlayer播放电影。 每次在networking上收到数据时,都会使用附加模式使用fopen将其写入文件。 AVPlayer的资产然后被重新加载/重新创build更新的数据。 这种方法似乎有两个问题:第一,在第一个资产被卸载和新加载的时候,屏幕会短时间黑屏。 其次,我不清楚播放停止的位置,所以我不确定如何find合适的地方开始播放新的资源。 第二种方法是按照第一种方法将数据写入文件,但区别在于将数据加载到第二个资源中。 然后使用AVQueuedPlayer ,在播放器中插入/排队第二个资源,然后在缓冲完成后调用。 第一个资产可以在没有黑屏的情况下卸载。 但是,使用这种方法,比起第一种方法更麻烦,找出从哪里开始播放新资产。 有没有人做过这样的事情,并使其工作? 有没有使用AVFoundation这样做的正确方法?

将一个HTTPstream插入一个AVMutableComposition

我试图插入AVPlayerItem的AVPlayerItemStatusReadyToPlay到AVMutableComposition像这样: composition_ = [[AVMutableComposition alloc] init]; insertionPoint_ = kCMTimeZero; item_ = [[AVPlayerItem playerItemWithURL:[NSURL URLWithString:@"http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8"]] retain]; [item_ addObserver:self forKeyPath:@"status" options:0 context:nil]; player_ = [[AVPlayer playerWithPlayerItem:item_] retain]; [player_ addObserver:self forKeyPath:@"currentItem.duration" options:0 context:nil]; /** * append a player-item to our composition */ – (void)addItemToComposition:(AVPlayerItem *)item { NSError *error = nil; VTRACE(@"item duration: %g", CMTimeGetSeconds(item.duration)); if (![composition_ insertTimeRange:CMTimeRangeMake(kCMTimeZero, item.duration) […]