Swiftpack.co - ivi-ru/ivi-extern-player-sdk-apple as Swift Package

Swiftpack.co is a collection of thousands of indexed Swift packages. Search packages.
See all packages published by ivi-ru.
ivi-ru/ivi-extern-player-sdk-apple 2.1.4
SDK для интеграции плеера IVI в сторонние ios-приложения
⭐️ 7
🕓 Yesterday
.package(url: "https://github.com/ivi-ru/ivi-extern-player-sdk-apple.git", from: "2.1.4")

IVIExternPlayerSDK

SDK позволяет интегрировать плеер IVI в сторонние приложения.

Требования

  • iOS 14.0 и выше
  • В Info.plist приложения должен быть выставлен флаг:
<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

Установка

Swift Package Manager

Является предпочтительным способом установки SDK.

IVIExternPlayerSDK поддерживает подключение через Swift Package Manager.

Для того, чтобы подключить IVIExternPlayerSDK к своему проекту необходимо выбрать в Xcode пункт меню File -> Swift Packages -> Add Package Dependency...

Шаг 1

Ввести адрес GitHub-репозитория SDK - https://github.com/ivi-ru/ivi-extern-player-sdk-apple

Шаг 2

Выбрать необходимую версию SDK

Шаг 3

Добавить IVIExternPlayerSDK к таргету

Шаг 4

Ручная установка

Необходимо добавить в проект фреймворк IVIExternPlayerSDK.xcframework, а также фреймворки, которые используются как его зависимости:

  • Asset.xcframework
  • SwiftProtobuf.xcframework
  • Utils.xcframework
  • Interfaces.xcframework
  • AccessibilityScreens.xcframework
  • ProofOfWorkSwift.xcframework
  • Sentinel.xcframework
  • IVIToss.xcframework
  • IVIFairPlay.xcframework
  • Subs.xcframework
  • PopcornAV.xcframework
  • Popcorn.xcframework
  • Comet.xcframework

Для каждого из них должна быть выставлена настройка Emded & Sign в разделе Frameworks, Libraries, and Embedded Content вкладки General соответствующего таргета проекта:

Зависимости

Пример использования

import IVIExternPlayerSDK

class ViewController: UIViewController {
    
    private var player: IVIExternPlayer!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // Данные для структуры `IVIAppInfo` уникальны для каждого приложения 
        // и выдаются менеджером IVI.
        let appInfo = IVIAppInfo(subsite: 123,
                                 appVersion: 12345,
                                 requestKeys: IVIAppInfo.RequestKeys(k: "qwerty123n",
                                                                     k1: "qwerty1n",
                                                                     k2: "qwerty2n"),
                                 app: nil)
                                 
        // Инициализируем плеер с конфигурационными данными.
        let configuration = IVIPlayerConfiguration(appInfo: appInfo,
                                                   userSession: "valid_ivi_user_session",
                                                   allowsAirPlay: true,
                                                   isNativeVolumeIndicationEnabled: false)
        player = IVIExternPlayer(configuration: configuration)
        
        // Подписываемся на события плеера.
        player.delegate = self

        // Добавляем view плеера в иерархию.
        self.view.addSubview(player.mediaView)
        player.mediaView.leftAnchor.constraint(equalTo: self.view.leftAnchor).isActive = true
        player.mediaView.rightAnchor.constraint(equalTo: self.view.rightAnchor).isActive = true
        player.mediaView.topAnchor.constraint(equalTo: self.view.topAnchor).isActive = true
        player.mediaView.bottomAnchor.constraint(equalTo: self.view.bottomAnchor).isActive = true
        player.mediaView.translatesAutoresizingMaskIntoConstraints = false
        
        // Запускаем необходимый контент по его id на IVI.
        player.openContent(7029)
    }
}

События плеера приходят объекту, реализующему протокол IVIPlayerDelegate:

extension ViewController: IVIPlayerDelegate {
    func didChangeState(_ state: IVIPlayerState) {
        // Изменилось состояние плеера.
    }
            
    func didChangeCurrentTime(_ currentTime: Double) {
        // Изменилась текущая позиция воспроизведения видео.
    }
    
    func didChangeItemDuration(_ duration: Double) {
        // Обновилась длительность видеофайла.
    }
        
    func playbackDidReachEnd() {
        // Достигнут конец видеофайла.
    }
    
    func didChangeExternalPlaybackType(_ externalPlaybackType: IVIExternalPlaybackType) {
        // Изменился тип воспроизведения видео на внешние устройства.
    }
}

Плеер поддерживает смену качества, локализации и включение субтитров. Например, если пользователь выбрал первые доступные субтитры из списка доступных для текущего контента, сообщаем об этом плееру:

player.changeSubtitle(to: player.subtitles.first!)

Логирование

SDK умеет логировать свои события и отправлять логи на сервер IVI.

Выбор уровня логирования (по умолчанию равен .info):

IVILogger.shared.logLevel = .debug

Получение накопленного лога:

IVILogger.shared.log

Отправка накопленного лога на сервер IVI:

IVILogger.shared.send {
    // Лог отправлен
}

Picture in Picture

SDK предоставляет сервис pictureInPictureService для работы плеера в режиме PiP.

Интерфейс сервиса имеет следующий вид:

public protocol PictureInPictureService: AnyObject {

    /// Делегат сервиса.
    var pictureInPictureDelegate: PictureInPictureServiceDelegate? { get set }

    /// Логическое значение, указывающее на поддержку функции `Picture-in-Picture` на устройстве.
    var isPictureInPictureSupported: Bool { get }

    /// Логическое значение, указывающее на доступность функции `Picture-in-Picture`.
    var isPictureInPictureEnabled: Bool { get set }

    /// Логическое значение, указывающее на активность функции `Picture-in-Picture` в данный момент.
    var isPictureInPictureActive: Bool { get }

    /// Начать воспроизведение в режиме `Picture-in-Picture`.
    func startPictureInPicture()

    /// Остановить воспроизведение в режиме `Picture-in-Picture`.
    func stopPictureInPicture()

}

Важно!

Чтобы сделать PiP доступным нужно:

  1. Активировать режим PiP в Background Modes в разделе Signing & Capabilities в таргете приложения. Более подробно описано тут: https://developer.apple.com/documentation/xcode/configuring-background-execution-modes/
  2. Выставить значение true для isPictureInPictureEnabled в моменте, когда плеер будет иметь состояние playing.

GitHub

link
Stars: 7
Last commit: 2 days ago
Advertisement: IndiePitcher.com - Cold Email Software for Startups

Swiftpack is being maintained by Petr Pavlik | @ptrpavlik | @swiftpackco | API | Analytics