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.
ivi-ru/ivi-extern-player-sdk-apple
SDK для интеграции плеера IVI в сторонние ios-приложения
.package(url: "https://github.com/ivi-ru/ivi-extern-player-sdk-apple.git", from: "1.0.0")

IVIExternPlayerSDK

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

Требования

  • iOS 12.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, а также фреймворки, которые используются как его зависимости:

  • IVIFoundation.xcframework
  • ProofOfWorkSwift.xcframework
  • IVIToss.xcframework
  • IVIFairPlay.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 {
    // Лог отправлен
}

GitHub

link
Stars: 4
Last commit: 1 week ago

Ad: Job Offers

iOS Software Engineer @ Perry Street Software
Perry Street Software is Jack’d and SCRUFF. We are two of the world’s largest gay, bi, trans and queer social dating apps on iOS and Android. Our brands reach more than 20 million members worldwide so members can connect, meet and express themselves on a platform that prioritizes privacy and security. We invest heavily into SwiftUI and using Swift Packages to modularize the codebase.

Submit a free job ad (while I'm testing this). The analytics numbers for this website are here.

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