Воспроизведение прозрачного видео (H.264, AAC) в пользовательском представлении в быстром - PullRequest
0 голосов
/ 04 мая 2019

У меня есть прозрачное видео (H.264, AAC), есть изображение, которое находится ниже вида видео и воспроизводит анимацию изображений. Я хочу воспроизвести прозрачное видео поверх изображения. Я пытался использовать GPUImage 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 освобожден -> ShaderProgram.swift: deinit: 62 ОШИБКА: /Users/macmini/Downloads/GPUImage2-master/framework/Source/Operations/ChromaKeyBlend.swift

Компиляция завершилась с ошибкой: ShaderCompileError (compileLog: «Ошибка связи») предупреждение: не удалось выполнить код поддержки для чтения данных класса Objective-C в процессе. Это может снизить качество доступной информации о типе. (лдб)

Пожалуйста, помогите!

1 Ответ

0 голосов
/ 05 мая 2019

Вы не можете сделать это с помощью 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)")
    }
...