Tag: avfoundation

AVFoundation – 反转AVAsset并输出video文件

我已经看过这个问题几次,但他们都没有任何工作的答案。 需要反转并输出一个video文件(不能只是反向播放),保持与源video相同的压缩,格式和帧速率。 理想情况下,解决scheme将能够在内存或缓冲区中执行此操作,并避免将帧生成为图像文件(例如:使用AVAssetImageGenerator ),然后重新编译(资源密集,不可靠的时序结果,帧/图像质量从原始等)。 – 我的贡献:这仍然不起作用,但迄今为止我已经尝试过的最好的: 使用AVAssetReader将示例帧读入CMSampleBufferRef[]的数组中。 用AVAssetWriter以相反的顺序写回来。 问题:似乎每个帧的时间保存在CMSampleBufferRef所以即使将它们追加也不行。 接下来,我尝试用反向/镜像帧交换每个帧的定时信息。 问题:这会导致AVAssetWriter发生未知错误。 下一步:我要查看AVAssetWriterInputPixelBufferAdaptor – (AVAsset *)assetByReversingAsset:(AVAsset *)asset { NSURL *tmpFileURL = [NSURL URLWithString:@"/tmp/test.mp4"]; NSError *error; // initialize the AVAssetReader that will read the input asset track AVAssetReader *reader = [[AVAssetReader alloc] initWithAsset:asset error:&error]; AVAssetTrack *videoTrack = [[asset tracksWithMediaType:AVMediaTypeVideo] lastObject]; AVAssetReaderTrackOutput* readerOutput = [AVAssetReaderTrackOutput assetReaderTrackOutputWithTrack:videoTrack outputSettings:nil]; [reader […]

我可以使用AVCaptureSession将AACstream编码到内存吗?

我正在编写一个iOS应用程序,通过networking传输video和audio。 我正在使用AVCaptureSession抓取使用AVCaptureVideoDataOutput的原始video帧,并使用x264在软件中进行编码。 这很好。 我想为audio做同样的事情,只是我不需要太多的audio控制,所以我想用内置的硬件编码器来产生一个AACstream。 这意味着从audio工具箱层使用audio转换器 。 为了做到这一点,我把一个AVCaptudeAudioDataOutput的audio帧的处理程序: – (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection { // get the audio samples into a common buffer _pcmBuffer CMBlockBufferRef blockBuffer = CMSampleBufferGetDataBuffer(sampleBuffer); CMBlockBufferGetDataPointer(blockBuffer, 0, NULL, &_pcmBufferSize, &_pcmBuffer); // use AudioConverter to UInt32 ouputPacketsCount = 1; AudioBufferList bufferList; bufferList.mNumberBuffers = 1; bufferList.mBuffers[0].mNumberChannels = 1; bufferList.mBuffers[0].mDataByteSize = sizeof(_aacBuffer); bufferList.mBuffers[0].mData = _aacBuffer; […]

iOS AVFoundation – 通过video和导出显示时间显示

我想要在video上显示叠加显示,并导出包含此显示的video。 我看了一下AVFoundation框架,AVCompositions,AVAssets等,但我还没有想法实现这一点。 有一个名为AVSynchronizedLayer的类,它可以让你为animation同步animation,但是我不想animation,我只是想把时间显示叠加到video的每一帧中。 有什么build议? 问候

如何将CGImage转换为CMSampleBufferRef?

我想将一个CGImage转换为CMSampleBufferRef并使用appendSampleBuffer:方法将其附加到AVAssetWriterInput 。 我设法使用下面的代码来获取CMSampleBufferRef ,但appendSampleBuffer:当我提供产生的CMSampleBufferRef时,只是返回NO 。 我究竟做错了什么? – (void) appendCGImage: (CGImageRef) frame { const int width = CGImageGetWidth(frame); const int height = CGImageGetHeight(frame); // Create a dummy pixel buffer to try the encoding // on something simple. CVPixelBufferRef pixelBuffer = NULL; CVReturn status = CVPixelBufferCreate(kCFAllocatorDefault, width, height, kCVPixelFormatType_32BGRA, NULL, &pixelBuffer); NSParameterAssert(status == kCVReturnSuccess && pixelBuffer != […]

YouTube上的生活在iOS?

这里的文档有点难以parsing。 我想知道有没有办法 将YouTube直播到iOS应用程序,而不需要显着/任何YouTube品牌。 从 iOS设备stream式传输YouTube直播。 我最初的谷歌search引起了不同的反应。 如果可能的话,我希望看到一个这样的例子,或者如果不是这样,我可以节省一些时间。 假设我在ATT上有一个人在Verizonstream媒体内容旁边的一个人,而且我想让这两个人看起来像一个不间断的来回切换的stream。 YouTube或图书馆是否做了任何事情来促进这一点?

AVVideoCompositionCoreAnimationTool和CALayer在肖像模式?

我正在尝试在iOS 4.3上使用AVMutableComposition,AVMutableVideoComposition和AVVideoCompositionCoreAnimationTool将CALayer烧制成纵向模式video(导出时)。 这一切都在风景。 如果我以纵向捕捉video,AVVideoCompositionCoreAnimationTool将忽略video轨道上的变换。 也就是说,对于纵向模式的video,我将AVMutableCompositionTrack.preferredTransform设置为来自原始资产video轨道的preferredTransform值。 只要我不使用一个AVVideoCompositionCoreAnimationTool,这个工作,和video出来的人像模式。 只要我添加一个AVVideoCompositionCoreAnimationTool和CALayer,然而,文件出现在横向。 (CALayer显示正确,但后面的video位于其旁边,并且文件的宽高比为closures)。 我已经尝试将转换应用于CALayer,并在ACVideoComposition中设置转换。 这些都不会改变生成的文件的方向(它仍然是480×369,而不是360×480)。 有没有办法用AVVideoCompositionCoreAnimationTool渲染肖像模式的video? 首先我build立一个AVMutableComposition和AVMutableVideoComposition AVMutableComposition *composition = [AVMutableComposition composition]; AVMutableCompositionTrack *compositionVideoTrack = [composition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid]; AVURLAsset *videoAsset = [AVURLAsset URLAssetWithURL:url options:nil]; CMTimeRange timeRange = CMTimeRangeMake(kCMTimeZero, [videoAsset duration]); AVAssetTrack *clipVideoTrack = [[videoAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0]; CGSize videoSize = CGSizeApplyAffineTransform(clipVideoTrack.naturalSize, clipVideoTrack.preferredTransform); videoSize.width = fabs(videoSize.width); videoSize.height = fabs(videoSize.height); CMTime titleDuration = […]

iOS 7 AVCaptureMetadataOutput委托(QRCode扫描器)

我试图用新的iOS 7function实现一个QRCode扫描器,但是我的代码没有调用主AVCaptureMetadataOutputObjectsDelegate方法。 我已经使用AVFoundation摄像头之前和我目前的实现我有预览层运行没有问题。 即使切换我的输出回到AVCaptureVideoDataOutputvalidation我的会话设置。 我使用这个NSHipster职位作为指导,这里是我的代码到目前为止: 接口: @import AVFoundation; @interface QRCodeViewController () <AVCaptureMetadataOutputObjectsDelegate> @property (strong, nonatomic) AVCaptureDevice* device; @property (strong, nonatomic) AVCaptureDeviceInput* input; @property (strong, nonatomic) AVCaptureMetadataOutput* output; @property (strong, nonatomic) AVCaptureSession* session; @property (strong, nonatomic) AVCaptureVideoPreviewLayer* preview; @end build立: – (void)setupCamera { // Device self.device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; // Input self.input = [AVCaptureDeviceInput deviceInputWithDevice:self.device error:nil]; […]

如何在Swift中录制video与avfoundation?

我想弄清楚如何在Swift中使用AVFoundation录制video。 我已经尽可能地创造了一个定制的相机,但我只是想出了如何拍摄静态照片,我不知道如何录制video。 从我的理解你必须使用AVCaptureVideoDataOutput获取录音的数据,但我不知道如何开始录制和实施委托方法。 整个AVFoundation编程指南/静态和video媒体捕捉是在Objective-C中,我似乎无法破译出来。 我试图完成这个任务: 首先,我设置相机/捕捉会话 override func viewDidLoad() { super.viewDidLoad() captureSession.sessionPreset = AVCaptureSessionPresetHigh let devices = AVCaptureDevice.devices() for device in devices { if (device.hasMediaType(AVMediaTypeVideo)) { if(device.position == AVCaptureDevicePosition.Back) { captureDevice = device as? AVCaptureDevice if captureDevice != nil { beginSession() } } } } } 然后,一旦beginSession()被调用,我设置了活动提要 func beginSession() { var err : NSError? = […]

使用AVFoundation裁剪AVAssetvideo

我正在使用AVCaptureMovieFileOutput来录制一些video。 我使用AVLayerVideoGravityResizeAspectFill稍微放大显示预览图层。 我的问题是,最终的video更大,包含额外的图像,不适合在预览屏幕上。 这是预览和结果video 有没有一种方法可以使用CGRect来指定我想从video剪切的AVAssetExportSession ? 编辑—- 当我将一个CGAffineTransformScale应用到AVAssetTrack它将放大video,并将AVMutableVideoComposition renderSize设置为view.bounds 。 太棒了,还剩下一个问题。 video的宽度不会伸展到正确的宽度,只会填充黑色。 编辑2 —-build议的问题/答案是不完整的.. 我的一些代码: 在我的- (void)captureOutput:(AVCaptureFileOutput *)captureOutput didFinishRecordingToOutputFileAtURL:(NSURL *)outputFileURL fromConnections:(NSArray *)connections error:(NSError *)error方法我有这种裁剪和调整video。 – (void)flipAndSave:(NSURL *)videoURL withCompletionBlock:(void(^)(NSURL *returnURL))completionBlock { AVURLAsset *firstAsset = [AVURLAsset assetWithURL:videoURL]; // 1 – Create AVMutableComposition object. This object will hold your AVMutableCompositionTrack instances. AVMutableComposition *mixComposition = [[AVMutableComposition alloc] init]; // […]

是否有可能使用AVPlayercachingHLS段?

根本问题 在iOS上search时,我们的videocaching很多。 它比我们的networking播放器缓冲了很多,它将已经观看的片段的副本保存在临时存储器中。 期望的解决scheme 在设备的磁盘上本地cachingvideo片段。 caching一个单独的质量,并且总是重放它,我们没事。 拦截器 我们无法在AVFoundation / AVPlayer中find执行caching的方法。 我们试过的 用AVPlayer拦截networking请求的两种方法。 符合AVAssetResourceLoaderDelegate并手动处理媒体加载 不适用于HLS。 您可以通过实现AVAssetResourceLoaderDelegate来加载m3u8文件,这允许您通过身份validation或解密响应,但无法加载.ts文件。 以下是我们尝试的代码: https : //gist.github.com/nathanhillyer/84e46152d7c4c88183b6 实现NSURLProtocol来捕获.ts文件的请求。 AVURLAsset实际上避免被拦截。 networking请求不知何故被捕获。 (不知道为什么)