小编imp*_*7vx的帖子

ARKit SKVideoNode在渲染上播放

主要问题:

我在此之后添加此部分以澄清问题. - 我可以暂停我的视频(我不希望它在循环播放).当我的节点出现时,我的节点播放我的视频,即使它处于暂停状态.如果我的视频播放完毕,它就会出现,它会重新启动.我想删除此行为.

在我的应用程序中,我使用对象和对象SKVideoNodeAVPlayer(:URL)内部3D空间创建.我用来确定何时找到特定图像,并从那里播放视频.一切都很好,花花公子,除了每次AVPlayer进入视线时玩家决定按照自己的时间进行游戏; 但是,它可能是只要在连接到进入视野.无论哪种方式,每次节点进入相机镜头时都会播放.我用SCNNodeSCNGeometryARKit .ImageTrackingARImageAnchorSCNNodeAVPlayer

override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
    if(keyPath == "rate") {
        print((object as! AVPlayer).rate)
    }
}
Run Code Online (Sandbox Code Playgroud)

打印出速率,它是1,但它是0.

print("Play")使用player.pause()或player.play()为我的所有函数打印出某种打印函数,并且无论何时更改速率,都不会调用它们.如何找到改变播放器速率的来源?

我检查了原始的rootnode,self.sceneview.scene.rootNode.childNodes以确保我没有创建额外的VideoNodes/SCNNodes/AVPlayers等,似乎只有1.

关于为什么SKVideoNode/AVPlayer正在作为SCNNode播放的任何想法都会使用ARKit看到相机?提前致谢!

EDIT1:

制定了一种解决方法,仅在用户单击此节点时确定

let tap = UITapGestureRecognizer(target: self, action: #selector(self!.tapGesture))
tap.delegate = self!
tap.name = "MyTap"
self!.sceneView.addGestureRecognizer(tap)
Run Code Online (Sandbox Code Playgroud)

然后在下一个函数里面,我放了

@objc func tapGesture(_ gesture:UITapGestureRecognizer) {
    let tappedNodes = self.sceneView.hitTest(gesture.location(in: gesture.view), options: [SCNHitTestOption.searchMode: 1])

    if …
Run Code Online (Sandbox Code Playgroud)

avplayer skvideonode swift scnnode arkit

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

Google登录按钮无效

我已按照他们的网站完全按照谷歌的说法实施了Google登录.我有一个月前的工作,现在它什么也没做.我试图通过删除cocoapod并将他们的网站发送到T来重做所有内容,但仍然没有发生任何事情.就像没有调用任何委托方法一样,我不确定为什么.任何帮助都会很有意义.谢谢!

import GoogleSignIn
import Google
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

    //Get Twitter and set Twitter keys for Application
    Twitter.sharedInstance().startWithConsumerKey("uBedaxDuMDgImGbjun1oYf0ay", consumerSecret: "OaKqBZUesX5CypHCwrTvTZE22jrXIuRsUeZzVaMHej11R5Vh3b")
    Fabric.with([Twitter.self])

    // Initialize sign-in GOOGLE
    var configureError: NSError?
    GGLContext.sharedInstance().configureWithError(&configureError)
    assert(configureError == nil, "Error configuring Google services: \(configureError)")

    GIDSignIn.sharedInstance().delegate = self

    return true
}

func application(application: UIApplication,
                 openURL url: NSURL, options: [String: AnyObject]) -> Bool {
    return GIDSignIn.sharedInstance().handleURL(url,
                                                sourceApplication: options[UIApplicationOpenURLOptionsSourceApplicationKey] as? String,
                                                annotation: options[UIApplicationOpenURLOptionsAnnotationKey])
}

func application(application: UIApplication,
                 openURL url: NSURL, sourceApplication: String?, annotation: AnyObject?) …
Run Code Online (Sandbox Code Playgroud)

ios swift google-signin

15
推荐指数
4
解决办法
4531
查看次数

如何将*单张图像*与视频合并

我正在尝试将单个视频与单个图像组合在一起.这不是试图将许多图像组合成单个视频,例如

AVMutableComposition用来组合曲目.我的应用程序能够组合视频和图像(但就目前而言,视频组合很好!)我尝试使用AVAssetWriter将单个图像转换为视频(我相信这是我的问题,但不是100%肯定) .然后我将其保存到app(documents directory).从那里,我在合并中访问它,并将视频和现在变成视频的图像组合在一起.

流程:

用户选择图像 - >

将图像转换为AVAssetWriter以更改为视频 - >

合并我已预设的视频视频 - >

结果:从所选图像和预设视频制作1个视频.

我的问题:我的代码提供了一个空白区域,视频内部的图像应该是.就像在我的ImageConverter文件中一样,它会将它转换为视频,但我只会看到最后一帧作为图像,而每隔一帧都是透明的,好像图片不存在一样.因此,如果我将图像转换为视频5秒钟(假设是30帧/秒),那么我将看到(30*5)-1帧的空白区域,然后是最后一帧,最终会出现图片.我正在寻找有关如何将单个图像制作成视频将视频和图像组合在一起而不将图像转换为视频的指导.谢谢!

合并文件在这里

func merge() {
    if let firstAsset = controller.firstAsset, secondAsset = self.asset {

        // 1 - Create AVMutableComposition object. This object will hold your AVMutableCompositionTrack instances.
        let mixComposition = AVMutableComposition()

        let firstTrack = mixComposition.addMutableTrackWithMediaType(AVMediaTypeVideo,
                                                                     preferredTrackID: Int32(kCMPersistentTrackID_Invalid))
        do {
            try firstTrack.insertTimeRange(CMTimeRangeMake(kCMTimeZero, CMTime(seconds: 8, preferredTimescale: 600)),
                                           ofTrack: firstAsset.tracksWithMediaType(AVMediaTypeVideo)[0] ,
                                           atTime: kCMTimeZero)
        } …
Run Code Online (Sandbox Code Playgroud)

buffer uiimage avassetwriter avmutablecomposition swift

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

只有AVMutableComposition的第一首曲目播放()

下面的新编辑

我已经引用了

AVMutableComposition - 仅播放第一曲目(Swift)

但它没有提供我正在寻找的答案.

我有一个AVMutableComposition().我试图在这个单一的组合中应用MULTIPLE AVCompositionTrack,单一类型AVMediaTypeVideo.这是因为我用2个不同的AVMediaTypeVideo具有不同来源CGSize的和preferredTransforms的的AVAsset"他们来自秒.

因此,应用指定的唯一方法preferredTransforms是在两个不同的轨道中提供它们.但是,无论出于何种原因,只有第一首曲目实际上会提供任何视频,几乎就像第二首曲目从未出现过一样.

所以,我试过了

1)使用AVMutableVideoCompositionLayerInstruction's并且应用一个AVVideoComposition,一个AVAssetExportSession正常工作,我仍然在进行变换,但是可行.但视频的处理时间超过1分钟,这在我的情况下是不适用的.

2)使用多个音轨,AVAssetExportSession不会出现相同类型的第二个音轨.现在,我可以将它全部放在一个轨道上,但所有视频将与第一个视频相同的尺寸和首选视频,这是我绝对不想要的,因为它会在各个方向上拉伸它们.

所以我的问题是,是否有可能

1)在没有使用的情况下将指令应用于轨道AVAssetExportSession?//首选方式BY FAR.

2)减少出口时间?(我已经尝试过使用PresetPassthrough但你不能使用它,如果你有exporter.videoComposition我的指示所在的地方.这是我知道我可以放指令的唯一地方,不知道我是否可以将它们放在其他地方.

这是我的一些代码(没有导出器,因为我不需要在任何地方导出任何东西,只需在AVMutableComposition组合项目后执行操作.

func merge() {
    if let firstAsset = controller.firstAsset, secondAsset = self.asset {

        let mixComposition = AVMutableComposition()

        let firstTrack = mixComposition.addMutableTrackWithMediaType(AVMediaTypeVideo,
                                                                     preferredTrackID: Int32(kCMPersistentTrackID_Invalid))
        do {
            //Don't need now according to not being able to edit …
Run Code Online (Sandbox Code Playgroud)

avmutablecomposition avasset cgsize swift

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

App Crash,"Lost Connection"

此问题类似,

我有问题,我的应用程序以同样的方式崩溃.我会假设与另一个问题相同的答案:记忆问题; 除了我在AVAssetExportSession调用期间遇到崩溃.

guard let exporter = AVAssetExportSession(asset: mixComposition, presetName: AVAssetExportPresetHighestQuality) else { return }
        exporter.outputFileType = AVFileTypeMPEG4
        exporter.outputURL = url
        exporter.videoComposition = mainComposition
        print("done")

        exporter.exportAsynchronously(completionHandler: {
            DispatchQueue.main.async(execute: {
                self.exportDidFinish(exporter)
                print("removing AI")
                self.removeAI()
                print("removed AI")
                completion()
            })
        })

func exportDidFinish(_ exporter:AVAssetExportSession) {
    if(exporter.status == AVAssetExportSessionStatus.completed) {
        print("cool")
    }
    else if(exporter.status == AVAssetExportSessionStatus.failed) {
        print(exporter.error as Any)
    }
}
Run Code Online (Sandbox Code Playgroud)

它打印"完成"但它从不打印"删除AI".它也不打印"酷"或"(错误)"; 它崩溃并在XCode的顶部说"失去与iPhone的连接......"就像另一个问题所说的那样.

我认为这是一个内存问题,但在异步导出期间(我知道它是如何工作的)之间没有任何事情发生,因为我只是在等待调用完成处理程序.但是之间没有任何东西被调用,我不确定如何处理这个问题.有什么想法吗?

xcode ios avassetexportsession swift

10
推荐指数
2
解决办法
619
查看次数

分段控制中的渐变色调

我用这种方法得到渐变图像

func gradient(size:CGSize,color:[UIColor]) -> UIImage?{
    //turn color into cgcolor
    let colors = color.map{$0.cgColor}
    //begin graphics context
    UIGraphicsBeginImageContextWithOptions(size, true, 0.0)
    guard let context = UIGraphicsGetCurrentContext() else {
        return nil
    }
    // From now on, the context gets ended if any return happens
    defer {UIGraphicsEndImageContext()}
    //create core graphics context
    let locations:[CGFloat] = [0.0,1.0]
    guard let gredient = CGGradient.init(colorsSpace: CGColorSpaceCreateDeviceRGB(), colors: colors as NSArray as CFArray, locations: locations) else {
        return nil
    }
    //draw the gradient
    context.drawLinearGradient(gredient, start: CGPoint(x:0.0,y:size.height), end: CGPoint(x:size.width,y:size.height), options: []) …
Run Code Online (Sandbox Code Playgroud)

gradient uikit ios swift segmentedcontrol

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

不推荐使用ALAsset - 使用Photos Framework中的PHAsset

我正在使用检索图像

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) }
      let chosenImage = info[UIImagePickerControllerOriginalImage] as! UIImage
}
Run Code Online (Sandbox Code Playgroud)

我可以检索图像,也可以使用图像输入按钮背景或我想要的任何其他内容,但我似乎无法检索照片的元数据.现在,关于使用的互联网上的各种其他位置ALAssets以及它们的图像数据技术的讨论很多,但是,ALAssets最近已经弃用了它们.由于我的图像不是用户刚拍摄的图像,而是从相机胶卷中选择的图像,我无法使用:

let metadata = info[UIImagePickerControllerMediaMetaData] as! NSDictionary

所以,如果有人能够指出我如何获取用户从他们的相机胶卷中选择的图像元数据的正确方向,而不使用ALAssets,那将非常感谢!谢谢!

metadata uiimagepickercontroller alassetslibrary swift phphotolibrary

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

XCode崩溃报告(已经符号化)缺少行号

我有一个崩溃报告(它已经象征着至少我希望如此,因为我从XCode Organizer获取此日志)

Incident Identifier: F4324555-0916-4E32-82EF-3272917367BB
Beta Identifier:     80811904-A512-48A1-9593-D386703A62F0
Hardware Model:      iPhone7,2
Process:             SelfieSuperStarz [596]
Path:                /private/var/containers/Bundle/Application/BFA0D82B-274B-400B-8F84-52A1D7369C51/SelfieSuperStarz.app/SelfieSuperStarz
Identifier:          com.PuckerUp.PuckerUp
Version:             21 (1.31)
Beta:                YES
Code Type:           ARM-64 (Native)
Role:                Foreground
Parent Process:      launchd [1]
Coalition:           com.PuckerUp.PuckerUp [434]


Date/Time:           2017-07-29 20:06:11.7394 -0400
Launch Time:         2017-07-29 19:34:39.7433 -0400
OS Version:          iPhone OS 10.3.2 (14F89)
Report Version:      104

Exception Type:  EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Exception Note:  EXC_CORPSE_NOTIFY
Triggered by Thread:  0

Last Exception Backtrace:
0   CoreFoundation                  0x18bebafe0 __exceptionPreprocess + 124 (NSException.m:165)
1 …
Run Code Online (Sandbox Code Playgroud)

crash xcode crash-reports ios swift

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

Xcode:无法加载ModelIO.framework,SceneKit.framework等

在更新到macOS Mojave之前,我的应用程序运行良好且没有错误,但是,我在更新后收到此错误.我已经谷歌搜索了2天,但似乎没有人遇到这个错误.注意:该应用程序确实按预期运行.3D模型文件采用.scn格式.

构建时错误:

/scntool:-1: Could not load ModelIO.framework ((null))
/scntool:-1: Could not load SceneKit.framework ((null))
/scntool:-1: Could not load PhysicsKit.framework ((null))
/scntool:-1: Could not load Jet.framework ((null))
/scntool:-1: Could not load SpriteKit.framework ((null))
/scntool:-1: The document /Users/salman/Library/Developer/Xcode/DerivedData/JellyFish-fhvcybjymvohlxflnwnxqdepqlrl/Build/Products/Debug-iphoneos/JellyFish.app/art.scnassets/Jellyfish.scn is not an archived scene.
/scntool:-1: Conversion failed, will simply copy input to output.
/scntool:-1: Copy failed file:///Users/salman/Library/Developer/Xcode/DerivedData/JellyFish-fhvcybjymvohlxflnwnxqdepqlrl/Build/Products/Debug-iphoneos/JellyFish.app/art.scnassets/Jellyfish.scn -> file:///Users/salman/Library/Developer/Xcode/DerivedData/JellyFish-fhvcybjymvohlxflnwnxqdepqlrl/Build/Products/Debug-iphoneos/JellyFish.app/art.scnassets/Jellyfish.scn error:Error Domain=NSCocoaErrorDomain Code=516 "“Jellyfish.scn” couldn’t be copied to “art.scnassets” because an item with the same name already exists." UserInfo={NSSourceFilePathErrorKey=/Users/salman/Library/Developer/Xcode/DerivedData/JellyFish-fhvcybjymvohlxflnwnxqdepqlrl/Build/Products/Debug-iphoneos/JellyFish.app/art.scnassets/Jellyfish.scn, NSUserStringVariant=( …
Run Code Online (Sandbox Code Playgroud)

scenekit swift arkit xcode10 macos-mojave

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

通过 Buffer Post Xcode 11.5 更新的数据

我拥有的:

引用Apple 的 Chroma Key Code,它指出我们可以通过创建一个 Chroma Key Filter Cube

func chromaKeyFilter(fromHue: CGFloat, toHue: CGFloat) -> CIFilter?
{
    // 1
    let size = 64
    var cubeRGB = [Float]()
        
    // 2
    for z in 0 ..< size {
        let blue = CGFloat(z) / CGFloat(size-1)
        for y in 0 ..< size {
            let green = CGFloat(y) / CGFloat(size-1)
            for x in 0 ..< size {
                let red = CGFloat(x) / CGFloat(size-1)
                    
                // 3
                let hue = getHue(red: red, green: green, …
Run Code Online (Sandbox Code Playgroud)

unsafe-pointers chromakey swift

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