Закрыть изображение в изображении видео, когда пользователь выбирает новое видео для воспроизведения - PullRequest
1 голос
/ 29 сентября 2019

Я использую AVKit для показа видео пользователю.

Когда пользователь выбирает видео, оно показывается с помощью стандартного проигрывателя от AVKit.Это делает его полноэкранным.

Если пользователь решит сделать его «Картинка в картинке», он сможет продолжить использование остальной части приложения.

Это означает, что пользователь может выбиратьдругое видео для воспроизведения, которое действительно воспроизводится (в полноэкранном режиме) одновременно с предыдущим видео, которое все еще отображается на картинке в картинке.

Я хотел бы закрыть первое (PiP) видео, когда выбрано второе видео, однако перед запуском второго видео я пытаюсь «отклонить» предыдущее, но оно не работает.

Я думаю, это потому, что он отображается как PiP, поэтому AVPlayerViewController больше не представляет его ...

Есть ли способ сделать это просто?

Воспроизведение видеос (не работающей) попыткой убить первое видео, если второе пытается воспроизвести:

func play(FileName filename: String, FileType type: String)
{
    if self.isVideoPlaying == YES
    {
       self.playerController!.dismiss(animated: YES, completion: { self.isVideoPlaying = NO ; self.play(FileName: filename, FileType: type) })

       return
    }

    self.isVideoPlaying = YES

    let path = Bundle.main.path(forResource: filename, ofType: type)

    let url = NSURL(fileURLWithPath: path!)

    let player = AVPlayer(url: url as URL)

...

1 Ответ

1 голос
/ 29 сентября 2019

Хорошо, вот как я решил это:

  1. Имейте свойство класса 'isAlreadyPlaying: Bool', которое вы устанавливаете при воспроизведении видео ... однако

  2. В методе, в котором вы «воспроизводите» видео и представляете AVPlayerViewController с (новым) видео, проверьте эту проверку в начале:


if self.isAlreadyPlaying == YES
{
     killVideoPlayer()

     DispatchQueue.main.asyncAfter(deadline: .now() + 1.5, execute: { self.play(FileName: filename, FileType: type) })

     return
}

... Here you put the normal play / present code

А в методе killVideoPlayer () установите для свойства isAlreadyPlaying значение NO / false.

...