【问题标题】:Playing a Transparent Video(H.264, AAC) on a Custom view in swift快速在自定义视图上播放透明视频(H.264,AAC)
【发布时间】:2019-05-04 05:33:53
【问题描述】:

我有一个透明的视频(H.264,AAC),视频视图下方有一个 Imageview,它正在播放图像动画。我想在图像视图上播放透明视频。我尝试使用 Brad LarsonGPUImage Framework。我使用 ChromaKeyBlend 滤镜播放透明视频,但没有成功。

通过 SO 搜索,一无所获。

    @IBOutlet weak var done: UIButton!
    @IBOutlet weak var videoPlayerView: RenderView!
    let path = Bundle.main.path(forResource: "template", ofType:"mp4")
    var player = AVPlayer()
    var playerController = AVPlayerViewController()
    @IBOutlet weak var back: UIButton!
    @IBOutlet weak var imagesPlayView: UIImageView!
    @IBOutlet weak var templateImageView: UIImageView!

    var filter : ChromaKeyBlend!
    var movie:MovieInput!
    override func viewDidLoad()
    {
        super.viewDidLoad()
        self.imagesPlayView.animationImages = imageArray123
        self.imagesPlayView.animationDuration = 30.0
        self.imagesPlayView.animationRepeatCount = 1
        self.imagesPlayView.contentMode = .scaleAspectFit
        self.imagesPlayView.startAnimating()

        videoPlayerView.backgroundColor = UIColor.clear
        let videoURL = NSURL.fileURL(withPath: path!)
        do
        {
      movie = try MovieInput(url:videoURL, playAtActualSpeed:true)
            filter = ChromaKeyBlend()
            movie --> filter --> videoPlayerView
            movie.runBenchmark = true
            movie.start()
        } catch
        {
            print("Couldn't process movie with error: \(error)")
        }


    }

应用程序崩溃。崩溃日志是:

链接日志:错误:顶点着色器未写入片段着色器“textureCoordinate2”的输入

Shader deallocated --> ShaderProgram.swift: deinit: 62 错误:/Users/macmini/Downloads/GPUImage2-master/framework/Source/Operations/ChromaKeyBlend.swift

编译失败并出现错误:ShaderCompileError(compileLog: "Link error") 警告:无法在进程中执行支持代码来读取 Objective-C 类数据。 这可能会降低可用类型信息的质量。 (lldb)

请帮忙!

【问题讨论】:

    标签: ios swift video transparent gpuimage


    【解决方案1】:

    您无法使用 GPUImage2 执行此操作,因为目前没有可用的 UIElement 类。首选链接:- https://github.com/BradLarson/GPUImage2/issues/17 但您可以使用 GPUImage(1)。在这里你没有传递第二个输入(背景图像或视频),这就是它给你一个错误的原因。使用 GPUImage2,您可以简单地在透明视频后面传递静态图像或视频。您不能将动画 imageView 作为 UIElement 传递。


    Hack:如果您想首先使用 GPUImage2 创建它,您必须制作动画图像的视频,然后将其作为第二个输入传递。


     do {
            movie = try MovieInput(url: videoURL, playAtActualSpeed: true)
            filter = ChromaKeyBlend()
            let backgroundImage = PictureInput(imageName: "backgroundImage.png") // <-- background image
            backgroundImage.processImage(synchronously: true)
            movie --> filter --> videoPlayerView
            backgroundImage --> filter
            movie.runBenchmark = true
            movie.start()
        } catch {
            print("Couldn't process movie with error: \(error)")
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多