相关疑难解决方法(0)

为什么我的UIImages电影会被扭曲?

我正在使用zoul的解决方案将UIImage数组导出为电影.但我的镜架都变形了.这是原始图片:

在此输入图像描述

这是一个类似的失真例子:http: //oi56.tinypic.com/8wkqys.jpg

我在这里读到它与纵横比有关,但没有解释如何修复它.

iphone export objective-c avfoundation uiimage

12
推荐指数
1
解决办法
4603
查看次数

如何使用Swift将过滤器应用于视频实时

是否可以将过滤器应用于AVLayer并将其添加到以addSublayer的形式查看?我想改变颜色,并使用Swift从相机中添加一些噪音,我不知道如何.

我想,可以像这样添加filterLayerpreviewLayer:

self.view.layer.addSublayer(previewLayer)
self.view.layer.addSublayer(filterLayer)
Run Code Online (Sandbox Code Playgroud)

这可以用我的自定义过滤器创建视频,但我认为,有可能更有效地使用AVComposition

所以我需要知道的是:

  1. 将滤镜实时应用于摄像机视频输出的最简单方法是什么?
  2. 可以合并AVCaptureVideoPreviewLayerCALayer吗?

谢谢你的每一个建议..

video-capture avfoundation calayer ios swift

10
推荐指数
1
解决办法
1万
查看次数

CVPixelBufferPool错误(kCVReturnInvalidArgument/-6661)

我已经使用Swift实现了以前的建议(如何在iPhone中使用CVPixelBufferPool和AVAssetWriterInputPixelBufferAdaptor?),但在使用CVPixelBufferPoolCreatePixelBuffer作为指导时,却遇到了"kCVReturnInvalidArgument"(错误值:-6661).

我基本上试图从图像创建一个电影,但由于缓冲池未成功创建,我无法附加像素缓冲区 - 这是我执行此操作的代码.

任何建议都非常感谢!

import Foundation
import Photos
import OpenGLES
import AVFoundation
import CoreMedia

class MovieGenerator {

    var _videoWriter:AVAssetWriter
    var _videoWriterInput: AVAssetWriterInput
    var _adapter: AVAssetWriterInputPixelBufferAdaptor
    var _buffer = UnsafeMutablePointer<Unmanaged<CVPixelBuffer>?>.alloc(1)


    init(frameSize size: CGSize, outputURL url: NSURL) {

    // delete file if exists
    let sharedManager = NSFileManager.defaultManager() as NSFileManager
    if(sharedManager.fileExistsAtPath(url.path!)) {
        sharedManager.removeItemAtPath(url.path, error: nil)
    }

    // video writer
    _videoWriter = AVAssetWriter(URL: url, fileType: AVFileTypeQuickTimeMovie, error: nil)

    // writer input
    var videoSettings = [AVVideoCodecKey:AVVideoCodecH264, AVVideoWidthKey:size.width, AVVideoHeightKey:size.height]
    _videoWriterInput = AVAssetWriterInput(mediaType: AVMediaTypeVideo, …
Run Code Online (Sandbox Code Playgroud)

swift ios8

9
推荐指数
2
解决办法
3971
查看次数

如何在swift中使用AVAssetWriter组合视频?

我目前正在制作一个小应用程序,将我的mac上的网络摄像头延时,将捕获的帧保存到png,我正在考虑将捕获的帧导出为单个视频.

我使用CGImage来处理原始图像,并将它们设置在一个数组中,但我不确定那里是从那里开始的.我从自己的研究中得知,我必须以某种方式使用AVAssetWriter和AVAssetWriterInput.

我在这里看了一下,阅读了苹果文档并搜索了谷歌.但是所有的指南等都是obj-c而不是swift,这使得它很难理解(因为我没有Obj-C的经验).

任何帮助将非常感谢.

非常感谢,卢克.

macos avassetwriter swift

7
推荐指数
1
解决办法
5843
查看次数

在applyPreferredTrackTransform设置后,从普通CGImageRef图像生成格式错误的视频

我正在尝试从视频中获取图像,然后使用此图像生成静态影片第一步效果很好,但第二步在设置applyPreferredTrackTransform = true后生成格式错误的视频

从视频中提取的正常图像 从视频中提取的正常图像 从图像生成的格式错误的视频 从图像生成的格式错误的视频

这是怎么来的?正常图像会生成格式错误的视频吗?此外,如果我在#2中放置GenerateMovieFromImage.generateMovieWithImage块,应用程序将在CGContextDrawImage(context,CGRectMake(0,0,frameSize.width,frameSize.height),image)中崩溃;

我做了如下(在swift中):

    var asset: AVAsset  = AVAsset.assetWithURL(self.tmpMovieURL!) as AVAsset
    var imageGen: AVAssetImageGenerator =  AVAssetImageGenerator(asset: asset)
    var time: CMTime = CMTimeMake(0, 60)
    imageGen.appliesPreferredTrackTransform = true
    imageGen.generateCGImagesAsynchronouslyForTimes( [ NSValue(CMTime:time) ], completionHandler: {

        (requestTime, image, actualTime, result, error) -> Void in
            if result == AVAssetImageGeneratorResult.Succeeded {



                ALAssetsLibrary().writeImageToSavedPhotosAlbum(image, metadata: nil, completionBlock: {
                    (nsurl, error) in
                       // #2                    
                })

                 GenerateMovieFromImage.generateMovieWithImage(image, completionBlock:{
                        (genMovieURL) in
                        handler(genMovieURL)

                })
Run Code Online (Sandbox Code Playgroud)

GenerateMovieFromImage.generateMovieWithImage来自这个答案

+ (void)generateMovieWithImage:(CGImageRef)image completionBlock:(GenerateMovieWithImageCompletionBlock)handler
{

NSLog(@"%@", image);

NSString *path = [NSTemporaryDirectory() stringByAppendingPathComponent: [@"tmpgen" stringByAppendingPathExtension:@"mov" …
Run Code Online (Sandbox Code Playgroud)

objective-c avfoundation ios swift

6
推荐指数
1
解决办法
552
查看次数

从[UIImage],Swift创作电影

我已经找到导出[UIImage]作为电影,但它全部在ObjectiveC中,我无法弄清楚Swift.

我需要从[UIImage]创建一个视频

通过以上链接研究Zoul的答案.第1部分)连接作者

我到目前为止:

let paths = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)
    let documentsURL = paths[0] as! NSURL
    let videoWriter:AVAssetWriter = AVAssetWriter(URL: documentsURL, fileType: AVFileTypeQuickTimeMovie, error: nil)

    var videoSettings: NSDictionary = NSDictionary(
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚他正确的Swift版本

NSDictionary *videoSettings = [NSDictionary dictionaryWithObjectsAndKeys:
AVVideoCodecH264, AVVideoCodecKey,
[NSNumber numberWithInt:640], AVVideoWidthKey,
[NSNumber numberWithInt:480], AVVideoHeightKey,
nil];
Run Code Online (Sandbox Code Playgroud)

video avfoundation ios swift

6
推荐指数
2
解决办法
5997
查看次数

如何在Swift中将图像导出为视频?

我正在Swift中制作一个应用程序(我有最新的xcode更新),该应用程序必须从某些图像生成视频。
我从此答案中获得了代码。如何将UIImage数组导出为电影?
我这样调用该函数:

let size = CGSize(width: 1280, height: 720)
let pathVideo = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
let percorsoVideo = pathVideo[0]
writeImagesAsMovie(arrayImmagini, videoPath: percorsoVideo+"/prova.mp4", videoSize: size, videoFPS: 1)
Run Code Online (Sandbox Code Playgroud)

“ arrayImmagini”的字面定义如下:

var arrayImmagini = [UIImage(imageLiteral: "Frames/turtle/turtle0.jpg"), UIImage(imageLiteral: "Frames/turtle/turtle1.jpg"), ...]
Run Code Online (Sandbox Code Playgroud)

当我尝试运行代码时,我得到了一个全黑的视频,而xcode给我这2个错误是数组中图像数量的两倍:

Sep  5 09:24:15  Prova[1554] <Error>: CGBitmapContextCreate: invalid data bytes/row: should be at least 7680 for 8 integer bits/component, 3 components, kCGImageAlphaPremultipliedFirst.
Sep  5 09:24:15  Prova[1554] <Error>: CGContextDrawImage: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental …
Run Code Online (Sandbox Code Playgroud)

video avfoundation ios swift

5
推荐指数
1
解决办法
4569
查看次数

UIImagePickerController返回H.265而不是H.264

我有一个使用UIImagePickerController对象获取视频文件进行共享的应用程序.

我正在设置媒体类型(picker.mediaTypes = [kUTTypeMovie as String])并使用该字段UIImagePickerControllerMediaURL来获取视频详细信息.这可以正常工作,并且当所有设备都是H.264实时编码或所有设备都是H.265实时解码时都没有问题.

问题是我需要支持无法播放H.265内容的设备.我想采取"创建单一兼容文件"的路线.无论录制设备的功能如何,如何告诉UIImagePickerController我H.264视频呢?

ios swift ios11

5
推荐指数
1
解决办法
763
查看次数

CVMetalTextureCacheCreateTextureFromImage在macOS 10.13上返回-6660

我正在将屏幕从iPhone设备记录到Mac。作为预览层,我直接从中收集样本缓冲区AVCaptureVideoDataOutput,从中创建纹理并使用渲染它们Metal。我遇到的问题是,在macOS中工作的代码10.13在更新到后就停止工作了10.13。即

CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(_currentSampleBuffer);

if (!imageBuffer) return;

CVPixelBufferLockBaseAddress(imageBuffer,0);
size_t width = CVPixelBufferGetWidth(imageBuffer);
size_t height = CVPixelBufferGetHeight(imageBuffer);

CVMetalTextureRef metalTexture = NULL;
CVReturn result = CVMetalTextureCacheCreateTextureFromImage(nil,
                                                            self.textureCache,
                                                            imageBuffer,
                                                            nil,
                                                            self.pixelFormat,
                                                            width,
                                                            height,
                                                            0,
                                                            &metalTexture);

if (result == kCVReturnSuccess) {
    self.texture = CVMetalTextureGetTexture(metalTexture);
}
Run Code Online (Sandbox Code Playgroud)

返回值result = -6660(可以转换为通用值)kCVReturnError,可以在官方的Apple文档中看到,以及metalTexture = NULL

我使用的是像素格式MTLPixelFormatBGRG422,因为来自相机的样本是2vuy

作为metalTexture从创建的替代方法sampleBuffer,我现在正在创建一个中间件,NSImage如下所示:

    CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(_currentSampleBuffer);
    NSCIImageRep …
Run Code Online (Sandbox Code Playgroud)

macos objective-c metal

5
推荐指数
1
解决办法
1061
查看次数

AVAssetWriter的输出(写入视频的UIImages)失真

我正在使用AVAssetWriter将一系列图像编码为电影文件,遵循Zoul的答案:如何将UIImage数组导出为电影?.

总之,我的过程是:

  • 从.png文件创建UIImage
  • 从UIImage获取CGImage
  • 将CGImage转换为CVPixelBuffer(使用zoul的函数pixelBufferFromCGImage)
  • 使用AVAssetWriterInputPixelBufferAdaptor和AVAssetWriter将帧写入.mov

这在大多数情况下都能正常工作,但有时编码的.mov文件会失真(参见下图).我想知道这种类型的失真图像输出是否为任何人所熟悉,如果有任何步骤我可能会采用编码导致这种情况的帧.当我使用的源图像是通过Titanium到ImageView.toBlob()的调用生成时,会出现问题.除了Titanium之外,任何关于如何出现这种结果的提示都会很棒!

谢谢,亚历山大

电影屏幕:http: //tinypic.com/view.php?pic = 8wkqys&s = 7

原图:http://commons.wikimedia.org/wiki/File : Phalaenopsis_ (aka).jpg

Phalaenopsis_(AKA)

titanium avfoundation uiimage ios

4
推荐指数
1
解决办法
2456
查看次数

将原始数据转换为iOS的可显示视频

我有一个有趣的问题,我需要研究与非常低级别的视频流.

有没有人有过将原始字节流(分成每像素信息,但不是标准格式的视频)转换为低分辨率视频流的经验?我相信我可以将数据映射到每像素字节的RGB值,因为与原始数据中的值对应的颜色值将由我们确定.我不知道从那里去哪里,或者每个像素需要RGB格式.

我看过FFMPeg,但它的文档很大,我不知道从哪里开始.

我所包含的具体问题是,是否可以使用该像素数据创建CVPixelBuffer?如果我这样做,我需要转换为每像素数据的格式是什么?

另外,我是否应该更深入地研究OpenGL,如果是这样,哪里可以找到有关此主题的信息的最佳位置?

那么CGBitmapContextCreate呢?例如,如果我去了,我就是这样的,一个典型的像素字节需要看起来像什么?这是否足够快以保持帧速率高于20fps?

编辑:

我认为在你们的帮助下,以及我自己的一些研究,我已经制定了一个如何构建原始RGBA数据的计划,然后根据该数据构建CGImage,从而创建一个来自CGImage的CVPixelBuffer来自CGImage的CVPixelBuffer.

然而,为了在数据进入时播放,我不确定我会看到什么样的FPS.我是否将它们绘制到CALayer,或者是否有类似AVAssetWriter的类,我可以使用它来添加CVPixelBuffers.我的经验是使用AVAssetWriter将构建的CoreAnimation层次结构导出到视频,因此视频总是在开始播放之前构建,而不是显示为实时视频.

video encoding opengl-es core-video ios

4
推荐指数
1
解决办法
1940
查看次数

使用 Swift 从 UIImage 构建视频

我正在构建一个可以实时获取视图的 IP 摄像头应用程序,现在我想使用 Swift 录制 MJPEG 格式的视频。

let imageData = receivedData , imageData.length > 0,
        let receivedImage = UIImage(data: imageData as Data)
Run Code Online (Sandbox Code Playgroud)

这里我有收到的每个图像并将它们保存为 UIImage,问题是如何记录图像流?我在 Github 上找到了一个有用的资源但是我失败了,链接被炸了:https : //gist.github.com/acj/6ae90aa1ebb8cad6b47b

任何人都可以给我一些提示或者你们有示例项目吗?真的很感激,谢谢!

更新:我使用 Amrit Tiwari 的答案中的代码,但收到此错误:为 640.0x640.0 视频创建资产编写器错误将图像转换为视频:开始会话后 pixelBufferPool nil

if let imageData = receivedData , imageData.length > 0,
        let receivedImage = UIImage(data: imageData as Data){
        let size = CGSize(width: 640, height: 640)
        writeImagesAsMovie([receivedImage], videoPath: "test.mp4", videoSize: size, videoFPS: 2)
    }
Run Code Online (Sandbox Code Playgroud)

我不确定路径参数是否正确(我想将它保存在 Documents 目录中)。请帮帮我,谢谢!

uiimage ios swift

3
推荐指数
1
解决办法
1万
查看次数

将系列图像转换为video-iphone

我想将一系列图像转换为iphone中的视频

任何人都可以为此提出方法或框架.

谢谢你们

iphone video xcode objective-c

1
推荐指数
1
解决办法
6198
查看次数