主要问题:
我在此之后添加此部分以澄清问题. - 我可以暂停我的视频(我不希望它在循环播放).当我的节点出现时,我的节点播放我的视频,即使它处于暂停状态.如果我的视频播放完毕,它就会出现,它会重新启动.我想删除此行为.
在我的应用程序中,我使用对象和对象SKVideoNode
从AVPlayer(:URL)
内部3D空间创建.我用来确定何时找到特定图像,并从那里播放视频.一切都很好,花花公子,除了每次AVPlayer进入视线时玩家决定按照自己的时间进行游戏; 但是,它可能是只要在连接到进入视野.无论哪种方式,每次节点进入相机镜头时都会播放.我用SCNNode
SCNGeometry
ARKit
.ImageTracking
ARImageAnchor
SCNNode
AVPlayer
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) 我已按照他们的网站完全按照谷歌的说法实施了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) 我正在尝试将单个视频与单个图像组合在一起.这不是试图将许多图像组合成单个视频,例如
我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) 下面的新编辑
我已经引用了
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) 与此问题类似,
我有问题,我的应用程序以同样的方式崩溃.我会假设与另一个问题相同的答案:记忆问题; 除了我在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的连接......"就像另一个问题所说的那样.
我认为这是一个内存问题,但在异步导出期间(我知道它是如何工作的)之间没有任何事情发生,因为我只是在等待调用完成处理程序.但是之间没有任何东西被调用,我不确定如何处理这个问题.有什么想法吗?
我用这种方法得到渐变图像
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) 我正在使用检索图像
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
我有一个崩溃报告(它已经象征着至少我希望如此,因为我从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) 在更新到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) 我拥有的:
引用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)