如何将视频 NSURL 转换为 ALAsset?

How to convert a video NSURL to an ALAsset?

Facebook 共享需要如下所示的 ALAsset:

let content = FBSDKShareVideoContent()

//The videos must be less than 12MB in size.

let bundle = NSBundle.mainBundle()
let path = bundle.URLForResource("a", withExtension: "mp4")

let video = FBSDKShareVideo()
// doesn't work; needs to be an "asset url" (ALAsset)
//video.videoURL = path

content.video = video

let dialog = FBSDKShareDialog()
dialog.shareContent = content
dialog.show()

如何获取本地包文档或 NSData 对象,并将其转换为 ALAsset?

(我最初的想法是将视频保存到本地相机胶卷,然后加载列表并选择它,但这是不必要的界面步骤)

ALAsset 的 documentation 指出

An ALAsset object represents a photo or a video managed by the Photo application.

所以我很确定您必须先将视频写入相机胶卷,然后才能将其用作 ALAsset。但是,您无需打开相机胶卷让用户选择资产即可使用它。使用

写入 ALAssetLibrary
library.writeVideoAtPathToSavedPhotosAlbum(movieURL, completionBlock: { (newURL, error) -> Void

您在 newUrl 完成块变量中获得资产 url。在 Facebook 分享通话中使用它

let content = FBSDKShareVideoContent()
content.video = FBSDKShareVideo(videoURL: newURL)

FBSDKShareAPI.shareWithContent(content, delegate: self)
NSLog("Facebook content shared \(content.video.videoURL)")

如果您愿意,您可以在完成块中进行共享,或者您可以从完成块中保存 newUrl 并在其他地方使用它。