斯威夫特:如何在我的 AVPlayerLayer 顶部添加图像/文本以使其成为视频的一部分?

Posted

技术标签:

【中文标题】斯威夫特:如何在我的 AVPlayerLayer 顶部添加图像/文本以使其成为视频的一部分?【英文标题】:Swift: How do I add an image/text on top of my AVPlayerLayer for it to be a part of the video? 【发布时间】:2017-07-04 19:35:51 【问题描述】:

我真的很难让图像或文本成为我视频的一部分,类似于 Snapchats 添加文本/贴纸功能。我不希望它只是坐在我的视频之上,而是实际上在视频本身上,所以当它被保存时,它会显示出来。任何帮助都将受到高度赞赏并标记为答案。多谢你们。代码如下...

import UIKit
import AVFoundation
import AVKit
import Photos

class VideoViewController: UIViewController 

    override var prefersStatusBarHidden: Bool  return true 

    var videoURL: URL
    var player: AVPlayer?
    var playerLayer: AVPlayerLayer?

    init(videoURL: URL) 
        self.videoURL = videoURL
        super.init(nibName: nil, bundle: nil)
    

    required init?(coder aDecoder: NSCoder) 
        fatalError("init(coder:) has not been implemented")
    

    override func viewDidLoad() 
        super.viewDidLoad()
        UIApplication.shared.keyWindow?.backgroundColor = .black
        self.view.backgroundColor = .black

        self.player = AVPlayer(url: videoURL)
        self.playerLayer = AVPlayerLayer(player: self.player)
        self.playerLayer?.frame = self.view.frame
        self.playerLayer?.backgroundColor = UIColor.black.cgColor
        self.view.layer.addSublayer(playerLayer!)

        guard player != nil else  return 
    

    override func viewDidAppear(_ animated: Bool) 
        super.viewDidAppear(animated)
        player?.play()
    

【问题讨论】:

【参考方案1】:

对于预览,您只需在AVPlayerLayer 的顶部添加CALayers 或UIViews,如果您在该层上有CAAnimations 您可以使用AVSynchronizedLayer。请参阅docs 了解更多信息

对于导出,您需要使用AVVideoCompositionCoreAnimationTool。请参阅docs 了解更多信息。

Here 可以找到AVVideoCompositionCoreAnimationTool 的使用教程。 (它在 Objective-C 中,但我认为将它翻译成 swift 并不难)

【讨论】:

以上是关于斯威夫特:如何在我的 AVPlayerLayer 顶部添加图像/文本以使其成为视频的一部分?的主要内容,如果未能解决你的问题,请参考以下文章

斯威夫特:如何让我的角色在我的游戏中只有落地后才能跳跃?

包装 AVPlayer 行为时处理 AVPlayerLayer

我想在我的应用程序中使用 SQL | Alamofire,斯威夫特[关闭]

如何停止或暂停 SKAction 播放音乐? - 斯威夫特

如何在 SpriteKit 中创建图像节点?斯威夫特 4

为啥我的 CAShapeLayer 没有动画? (iOS 斯威夫特)