Tag: avfoundation

AVAssetWriterInputPixelBufferAdaptor和CMTime

我正在用AVAssetWriterInputPixelBufferAdaptor写一些帧到video,而行为与时间不是我所期望的。 如果我只写一帧: [videoWriter startSessionAtSourceTime:kCMTimeZero]; [adaptor appendPixelBuffer:pxBuffer withPresentationTime:kCMTimeZero]; 这给我一个长度为零的video,这是我所期望的。 但是如果我继续添加第二帧: // 3000/600 = 5 sec, right? CMTime nextFrame = CMTimeMake(3000, 600); [adaptor appendPixelBuffer:pxBuffer withPresentationTime:nextFrame]; 我得到了十秒的video,我期待五个。 这里发生了什么? withPresentationTime是否以某种方式设置了帧的开始和持续时间? 请注意,我没有调用endSessionAtSourceTime ,只是finishWriting 。

Xcode ios:录制video文件的stream式处理,并删除多余的个人陈述

任何人都可以build议如何在录制时上传video文件。 正如我使用AVFoundation录制video,这将保存video到一些文件,例如。 record.mov。 现在我的查询是如何在录制的同时上传这个video,因为一旦用户录制他/她的video就要上传,我想节省用户的时间。 现在我正在尝试使用HTTP,文件stream来上传video。

添加文本字幕到video轨道(在Swift中)失败,错误代码-11841

我一直在努力为video添加文字字幕。 我已经添加了一些我详细提到的链接,但他们并没有帮助。 在下面的代码中,我正在试图添加一个字幕到video。 输出文件path如下: file:///var/mobile/Applications/03E49B29-1070-4541-B7CB-B1366732C179/Documents/output_movie.mov 另外,在下面的临时path中,input文件是通过调用UIPickerView在同一应用程序中logging的: file:///private/var/mobile/Applications/03E49B29-1070-4541-B7CB-B1366732C179/tmp/capture/capturedvideo.MOV 我得到的错误如下, Error:- Domain=AVFoundationErrorDomain Code=-11841 "Operation Stopped" UserInfo=0x15ebcfb0 {NSLocalizedDescription=Operation Stopped, NSLocalizedFailureReason=The video could not be composed.} Description:- <AVAssetExportSession: 0x15d97c80, asset = <AVMutableComposition: 0x15d788d0 tracks = ("<AVMutableCompositionTrack: 0x15d86910 trackID = 1, mediaType = vide, editCount = 1>")>, presetName = AVAssetExportPresetHighestQuality, outputFileType = com.apple.quicktime-movie Completed merging the video with status code […]

如何通过USB镜像iOS屏幕?

我试图通过USB连接到OSX镜像iOS设备屏幕。 QuickTime可以做到这一点,我用一个代码示例阅读这篇文章: https : //nadavrub.wordpress.com/2015/07/06/macos-media-capture-using-coremediaio/ 然而, CMIOStreamCopyBufferQueue的callback从来没有被调用,我想知道我在做什么错了? 有没有人遇到这个问题,可以提供一个工作的例子? 谢谢。

用AVCaptureSession和播放audio同时录制audio/video?

我试图创build一个iOS应用程序,可以录制audio和video,同时向扬声器输出audio。 要进行录制和预览,我使用了AVCaptureSession , AVCaptureConnection分别用于video和audio, AVAssetWriterInput用于video和audio。 我基本上是通过遵循RosyWriter示例代码来实现的。 在以这种方式设置录制之前,我使用AVAudioPlayer播放audio。 现在,如果我正在捕获(甚至不logging,只是捕获预览),并试图使用AVAudioPlayer ,我的AVCaptureAudioDataOutputSampleBufferDelegate类的captureOutputcallback停止调用captureOutput 。 有没有解决方法? 是否有另一个低级的服务,我应该用来播放audio,不会停止我的捕获? MC。

使用AVFoundation在video之间快速切换

我正在编写一个应用程序,用户可以logging多达6个video剪辑,每个video剪辑持续2秒。 录制video剪辑时,用户可以使用6个button进行播放,每个剪辑一个。 用户可以通过在6个剪辑之间切换来录制电影。 问题是,当用户按下button时,我需要在6个剪辑之间进行近乎瞬时的切换 – 否则播放剪辑的错觉就会丢失 – function与App Store中名为CamBox的应用有些类似。 我每次用户按下一个button时,首先尝试用AVPlayer中的AVPlayerItem和AVAsset初始化每个剪辑。 玩家的输出是在我的主视图中的一个AVPlayerLayer。 问题在于加载和开始播放的时间很长,这意味着当用户连续按下button时,video滞后。 我决定尝试使用5个AVPlayers和5个AVPlayerLayer预加载所有剪辑。 5 PlayerLayers被插入到我的主视图,当用户按下一个button,当前正在播放的AVPlayer暂停和倒带,当前可见的AVPlayerLayer被隐藏。 新的AVPlayer启动,并显示相应的AVPlayerLayer。 它的工作原理相当好,虽然不是瞬间的,但比我的第一个解决scheme快得多,但问题是我只能预加载4个剪辑,而不是当用户按下最后两个button时,它会拖延大时间。 以下是我的预加载剪辑的代码 -(void)loadVideos { layers = [[NSMutableArray alloc] initWithCapacity:6]; players = [[NSMutableArray alloc] initWithCapacity:6]; for(int i = 1; i < 7; i++) { NSURL* fileURL = [NSURL fileURLWithPath:[self getFileName:i]]; AVPlayerItem* avPlayerItem = [[[AVPlayerItem alloc] initWithURL:fileURL] autorelease]; [avPlayerItem addObserver:self forKeyPath:@"status" […]

在AVFoundation中使用CIFilter(iOS)

我正在尝试在iOS上使用AVFoundation创build的video合成filter(filter可能是,例如模糊,像素化,深褐色等)。 我需要实时应用这些效果,并且能够将复合video渲染到磁盘上,但我很高兴从一个或另一个开始。 不幸的是,我似乎无法找出这一个。 以下是我能做的事情: 我可以为正在播放电影的UIView添加一个animation层,但是如果我能够以这种方式处理传入的video图像,我不清楚。 我可以添加一个CIFilters数组到AVPlayerLayer,但事实certificate,这些在iOS中被忽略(它只适用于Mac OS X)。 我可以添加一个AVVideoCompositionCoreAnimationTool到AVVideoCompopsition,但我不确定这将完成video处理(而不是animation),并且会崩溃,并且不会被devise用于实时播放。 我相信这是渲染到磁盘时渲染animation的解决scheme。 其他应用程序这样做(我认为),所以我想我错过了一些明显的东西。 注意:我已经研究过GPUImage,我很乐意使用它,但是对于电影,特别是带有audio的电影来说,这并不适用。 看例如: 在AVMutableComposition中,GPUImage在运行时过滤 https://github.com/BradLarson/GPUImage/issues/1339

从iOS AVAssetWriter生成的原始H264 mdat获取PTS

我试图同时读写由AVAssetWriter写的H.264 mov文件。 我设法提取单独的NAL单元,将它们打包到ffmpeg的AVPackets中,并使用ffmpeg将它们写入另一个video格式。 它的工作原理和结果文件播放良好,除了播放速度不正确。 如何从原始H.264数据计算正确的PTS / DTS值? 或者,也许还有其他的方式来得到它们? 以下是我所尝试的: 将捕获的最小/最大帧速率限制为30,并假定输出文件将为30 fps。 实际上它的fps总是比我设定的值小。 而且,我认为fps在数据包之间并不是一成不变的。 记住每个书面样本的呈现时间戳,并假定样本与NALU一一映射,并将保存的时间戳应用于输出数据包。 这不起作用。 将PTS设置为0或AV_NOPTS_VALUE。 不起作用。 从谷歌search我了解,原始的H.264数据通常不包含任何时间信息。 它有时可以在SEI内部有一些时间信息,但我使用的文件没有它。 另一方面,有一些应用程序正在做我正在做的事情,所以我认为这是可能的。

使用AVPlayer的MTAudioProcessingTap和远程URL进行AVFoundationaudio处理

在AVAudioMix和MTAudioProcessingTap上有一些珍贵的文档,它们允许处理应用于AVFoundation(iOS上)的媒体资产的音轨(PCM访问)。 本文以及WWDC 2012会议中的简短提及是我所find的。 我已经得到了在这里描述的设置工作本地媒体文件,但它似乎并没有与远程文件(即HLSstreamURL)的工作。 这个预期的唯一迹象是本技术问答结束时的注释: AVAudioMix只支持基于文件的资产。 有人知道更多吗? 当资产不是基于文件时,真的没有办法访问audioPCM数据吗? 任何人都可以find有关MTAudioProcessingTap的实际苹果文档?

没有AVAsset的纯色的AVMutableComposition

这是我的最终目标:我想使用AVVideoCompositionCoreAnimationTool从Core Animation创buildvideo。 我不会在这个组合中使用现有的AVAsset。 我的问题是, 我怎样才能使用AVMutableComposition制作静态纯色video给定的时间? 在我弄清楚之后,我可以添加animation。 这是我的代码: – (void)exportVideo { AVMutableComposition *mixComposition = [AVMutableComposition composition]; CMTimeRange timeRange = CMTimeRangeMake(kCMTimeZero, CMTimeMakeWithSeconds(10, 600)); [mixComposition insertEmptyTimeRange:timeRange]; AVMutableCompositionTrack *videoTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid]; [videoTrack insertEmptyTimeRange:timeRange]; AVMutableVideoCompositionInstruction *mainInstruction = [AVMutableVideoCompositionInstruction videoCompositionInstruction]; mainInstruction.timeRange = timeRange; mainInstruction.backgroundColor = [UIColor blueColor].CGColor; AVMutableVideoComposition *mainComposition = [AVMutableVideoComposition videoComposition]; mainComposition.renderSize = CGSizeMake(500, 500); mainComposition.instructions = [NSArray […]