Пользовательский контроль скорости воспроизведения для AVPlayerViewController

  1. Можно ли добавить настраиваемую скорость воспроизведения (0,5, 1,0, 1,5, 2,0) в AVPlayerViewController?
  2. Есть ли способ обновить частоту обновления, изменив значение UISlider?
  3. Можно ли изменить скорость воспроизведения, если оно воспроизводится в данный момент?

person Zeeshan Badshah    schedule 25.04.2016    source источник
comment
Вот ответ на часть вашего вопроса о том, можно ли изменить скорость и как это сделать: stackoverflow.com/a/14220680/ 3487310   -  person fsb    schedule 25.04.2016
comment
Спасибо за помощь. Сработало.   -  person Zeeshan Badshah    schedule 09.05.2016
comment
@ZeeshanBadshah удалось ли вам добавить в AVPlayerViewController настраиваемый регулятор скорости воспроизведения?   -  person ricardopereira    schedule 07.11.2018


Ответы (1)


  1. Можно ли добавить настраиваемую скорость воспроизведения (0,5, 1,0, 1,5, 2,0) в AVPlayerViewController?

Вы можете добавить кнопку настраиваемой скорости воспроизведения в AVPlayerViewController, немного взломав.

В iOS 11, то есть вы можете добавить кнопку к AVPlayerViewController, добавив элемент управления рядом с кнопкой «Воспроизведение / Пауза». У этой кнопки есть доступный идентификатор, который поможет вам найти этот элемент управления.

iOS 11 AVPlayerViewController

Итак, я в основном нашел кнопку «Воспроизведение / Пауза» и добавил мою кнопку «Скорость воспроизведения» в супервизор кнопки «Воспроизведение / Пауза».

func findPlayPauseButton(view: UIView) -> UIView? {
    if view.accessibilityIdentifier == "Play/Pause" {
        return view
    }
    for subview in view.subviews {
        if let result = findPlayPauseButton(view: subview) {
            return result
        }
    }
    return nil
}

guard let playerView = playerViewController?.view else {
    return
}

guard let playPauseButton = findPlayPauseButton(view: playerView) else {
    return
}

if let playerControlsView = playPauseButton.superview {
    let playbackSpeedButton = UIButton(type: .system)
    playbackSpeedButton.accessibilityIdentifier = "PlaybackSpeed"
    playbackSpeedButton.setTitle("1 X", for: .normal)
    playbackSpeedButton.addTarget(self, action: #selector(self.playbackSpeedButtonTapped), for: .touchUpInside)
    playbackSpeedButton.translatesAutoresizingMaskIntoConstraints = false
    playerControlsView.addSubview(playbackSpeedButton)
    NSLayoutConstraint.activate([
        playbackSpeedButton.heightAnchor.constraint(equalTo: playPauseButton.heightAnchor),
        playbackSpeedButton.widthAnchor.constraint(equalToConstant: 50),
        playbackSpeedButton.leadingAnchor.constraint(equalTo: playPauseButton.trailingAnchor, constant: 70),
        playbackSpeedButton.bottomAnchor.constraint(equalTo: playPauseButton.bottomAnchor),
    ])
}

Результат:

Пример кнопки скорости воспроизведения

Как вы, возможно, знаете, у этого есть много недостатков из-за всех крайних случаев, которые вы найдете, то есть вам также нужно позаботиться о ландшафте, вам нужно проверить, действует ли взлом в каждой новой версии iOS, и т. д. Если ваше приложение поддерживает iOS 10, тогда все будет по-другому, потому что пользовательский интерфейс AVPlayerViewController изменился в iOS 11.

  1. Есть ли способ обновить скорость с помощью изменения значения UISlider?

Да, вместо UIButton для изменения скорости воспроизведения просто добавьте UISlider.

  1. Можно ли изменить скорость воспроизведения, если оно воспроизводится в данный момент?

Да, если он играет, вам просто нужно изменить свойство rate для игрок: например на 1.25 X => playerViewController.player?.rate = 1.25.

ОБНОВИТЬ:

Требуется улучшение! ???? Номер радара: 46022646: Контроль скорости воспроизведения для AVPlayerViewController (видео).

person ricardopereira    schedule 13.11.2018