Resumen
Este ejemplo reproduce un video devuelto por API de reproducción de Brightcove , que es la API más reciente y recomendada para recuperar contenido de su biblioteca de Video Cloud.
Este ejemplo reproduce videos de una matriz interna de archivos de video.
Para utilizar la API de reproducción, necesitará una clave de política. Si no está familiarizado con las claves de política, consulte la Descripción general de la API de políticas.
Empezar
Siga los pasos a continuación para familiarizarse con la configuración de un proyecto de aplicación que utilice Brightcove Player SDK para tvOS. Puede ver el código completo para cada uno de los siguientes:
Hay dos formas de probar este ejemplo:
Descarga la muestra
Descarga todo el proyecto de Xcode para experimentar.
- Clona o descarga el SDK nativo para muestras de iOS a su sistema local.
- Navega al Reproductor / AppleTV / swift aplicación de muestra.
- Ejecutar el
pod install
mando. - Abra y ejecute el espacio de trabajo recién creado.
Para obtener más detalles, consulte la Ejecución de aplicaciones de muestra para el SDK nativo para iOS / tvOS documento.
Cree la aplicación siguiendo los pasos de esta guía
Siga los pasos a continuación para familiarizarse con la configuración de un proyecto de aplicación que utilice Brightcove Player SDK para tvOS. Puede ver el código completo para cada uno de los siguientes:
Crea el proyecto
Configura un proyecto en Xcode. Luego, agregue el SDK junto con las dependencias al proyecto.
Configurar el proyecto Xcode
Cree un nuevo proyecto de Xcode para la aplicación.
-
Inicie la creación de un nuevo proyecto de tvOS en Xcode. Seleccione Crea un nuevo proyecto de Xcode.
-
Elija tvOS y luego App para la plantilla. Haz clic en Siguiente.
-
Configure la información del proyecto de la siguiente manera:
- Nombre del producto: Reproducción de video simple
- Equipo: ninguno
El campo Equipo es opcional. Si desea distribuir su aplicación en la App Store, deberá seleccionar un equipo al que pertenezca a través del Programa de desarrolladores de Apple. Se requiere el nombre del equipo para la firma de código. En este ejemplo, seleccionaremos ninguno.
- Identificador de la organización: com.your-company-name
Esto hace que el nombre del producto sea único para la tienda de aplicaciones. - Interfaz: Storyboard
Utilice la interfaz Storyboard o SwiftUI.
- Idioma: Rápido
Haz clic en Siguiente.
-
Elija la ubicación donde desea guardar su proyecto y haga clic en Crear .
- Ahora cierre el proyecto (sí, ciérrelo, ¡esto es importante!)
Agregue el SDK y sus dependencias a su proyecto
La forma más fácil de agregar el SDK y sus dependencias a su proyecto es usar CocoaPods.
CocoaPods es un administrador de dependencias que agrega bibliotecas a su proyecto. No es necesario, pero facilita la instalación. Para instalar CocoaPods, consulte las instrucciones en el CocoaPods sitio.
-
En la carpeta de su proyecto, cree un archivo de texto sin formato llamado Podfile (sin extensión de archivo).
-
Con un editor de texto, agregue las siguientes líneas de código al Podfile y guárdelo. Este código hace lo siguiente:
- Línea 1: Apunta a la ubicación de GitHub para las especificaciones del pod CocoaPods
- Línea 2: Apunta a la ubicación de GitHub para las especificaciones del pod de Brightcove
- Línea 4: Establece pods para usar marcos en lugar de bibliotecas estáticas
- Línea 6: Define la versión de la plataforma tvOS.
-
Líneas 8-10: Instale Brightcove Native Player SDK.
- Para obtener más información sobre la gestión de dependencias, consulte la Cómo administrar las dependencias con CocoaPods artículo.
source 'https://github.com/CocoaPods/Specs.git' source 'https://github.com/brightcove/BrightcoveSpecs.git' use_frameworks! platform :tvos, '16.0' # (or whatever version you want) target 'Simple-Video-Playback' do pod 'Brightcove-Player-Core/XCFramework' end
-
Abra una sesión de Terminal y navegue hasta su Reproducción de video simple Carpeta del proyecto Xcode.
-
En la sesión de Terminal, escriba el comando
pod install
y presione Regreso para ejecutarlo.
Si CocoaPods no puede encontrar una versión compatible para el pod, o no es la última versión, intente ejecutar lo siguiente en la aplicación Terminal:
pod update
Debería ver una serie de mensajes en el terminal que indican que Brightcove Player SDK se ha agregado a su proyecto.
-
El
pod install
comando crea el.xcworkspace
archivo para su proyecto.Observe la última línea , que es importante; a partir de este punto, debe hacer lo siguiente:
- Abra el archivo Simple-Video-Playback.xcworkspace en Xcode
- No use el archivo Simple-Video-Playback.xcodeproj
Codificar la aplicación de video
Cree el código para una aplicación de reproducción de video simple.
Establecer el comportamiento de audio para la aplicación
La sesión de audio maneja el comportamiento del audio a nivel de la aplicación. Más información sobre el AVAudioSession clase.
Para esta muestra, usaremos el reproducción categoría. Esto reproduce audio incluso cuando la pantalla está bloqueada y con el interruptor de timbre / silencio en silencio. Ya que estamos reproduciendo video, usaremos el moviePlayback modo. Para simplificar, colocaremos este código en el Delegado de la aplicación.
-
En su proyecto, abra el archivo App Delegate (AppDelegate.swift).
-
En el
didFinishLaunchingWithOptions
función, agregue código para configurar la categoría de la sesión de audio. Asegúrese de importar elAVFoundation
marco de referencia.// // AppDelegate.swift // Simple-Video-Playback // // Copyright © 2018 Brightcove. All rights reserved. // import UIKit import AVFoundation @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { // Override point for customization after application launch. var categoryError :NSError?; var success: Bool; do { try AVAudioSession.sharedInstance().setCategory(.playback, mode: .moviePlayback, options: .duckOthers) success = true; } catch let error as NSError { categoryError = error; success = false; } if !success { print("AppDelegate Debug - Error setting AVAudioSession category. Because of this, there may be no sound. \(categoryError!)"); } return true } func applicationWillResignActive(_ application: UIApplication) { // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. } func applicationDidEnterBackground(_ application: UIApplication) { // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. } func applicationWillEnterForeground(_ application: UIApplication) { // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. } func applicationDidBecomeActive(_ application: UIApplication) { // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. } func applicationWillTerminate(_ application: UIApplication) { // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. } }
Construya el controlador de vista
Actualice la clase View Controller para reproducir un video desde Brightcove Playback API.
Actualice la clase View Controller para reproducir un video desde una URL remota.
-
En su proyecto, abra el archivo View Controller (ViewController.swift).
Importar el SDK nativo
Aunque Brightcove Native Player SDK para iOS está escrito en Obj-C, podemos simplemente importar los módulos del marco a nuestro proyecto Swift.
-
Debajo de lo existente
import
directiva, agregue lo siguiente para importar el SDK del reproductor nativo de Brightcove:import BrightcovePlayerSDK
Personaliza el proyecto con tus valores
Agregue valores para acceder a su cuenta de Video Cloud.
-
Bajo la
import
directivas, agregue sus propios valores para lo siguiente:-
Línea 12: Define la clave de política de la API de reproducción de Brightcove. Este ejemplo reproduce un video devuelto por API de reproducción de Brightcove , que es la API más reciente y recomendada para recuperar contenido de su biblioteca de Video Cloud. Si no está familiarizado con las claves de política, consulte la Descripción general de la API de políticas.
- Línea 13: Define su ID de cuenta de Video Cloud
-
Línea 14: Define su ID de video de Video Cloud
fileprivate struct playbackConfig { static let policyKey = "your policy key" static let accountID = "your account id" static let videoID = "your video id" }
-
Crear una variable de vista
-
En el
ViewController
class, agregue una variable para la vista.class ViewController: UIViewController { @IBOutlet weak var videoContainerView: UIView!
Crea el servicio de reproducción
-
Cree una variable que defina el servicio de reproducción de Brightcove con su ID de cuenta y Clave de política. Esto se inicializará la primera vez que se llame.
Si es nuevo en Swift, consulte la guía sobre Propiedades almacenadas perezosas.
lazy var playbackService: BCOVPlaybackService = { return BCOVPlaybackService(accountId: playbackConfig.accountID, policyKey: playbackConfig.policyKey) }()
Crea el controlador de reproducción
-
Cree una variable que defina el controlador de reproducción de Brightcove. Esto se creará la primera vez que se llame.
-
Líneas 28-30: configure el delegado y active las funciones de avance automático y reproducción automática.
lazy var playbackController: BCOVPlaybackController? = { guard let _playbackController = BCOVPlayerSDKManager.shared().createPlaybackController() else { return nil } _playbackController.delegate = self _playbackController.isAutoAdvance = true _playbackController.isAutoPlay = true return _playbackController }()
-
Definir la vista del jugador
-
Crea una función llamada
createTVPlayerView
como sigue:- Líneas 38-39: Defina la vista del jugador para que los paneles de la barra de pestañas puedan presentar otros controladores de vista.
- Líneas 42-44: Cree la vista del reproductor y agréguela a la vista del contenedor de video.
- Línea 47: Asocie la vista del reproductor con el controlador de reproducción.
- Línea 49: Agrega la vista del reproductor como una subvista de la vista principal.
- Línea 51: Apagar máscara de cambio de tamaño automático.
-
Líneas 52-57: Usar Diseño automático para definir restricciones dinámicas para la vista del jugador.
lazy var playerView: BCOVTVPlayerView? = { // Set yourself as the presenting view controller // so that tab bar panels can present other view controllers let options = BCOVTVPlayerViewOptions() options.presentingViewController = self // Create and add to the video container view guard let _playerView = BCOVTVPlayerView(options: options) else { return nil } // Link the playback controller to the Player View _playerView.playbackController = playbackController videoContainerView.addSubview(_playerView) _playerView.translatesAutoresizingMaskIntoConstraints = false NSLayoutConstraint.activate([ _playerView.topAnchor.constraint(equalTo: videoContainerView.topAnchor), _playerView.rightAnchor.constraint(equalTo: videoContainerView.rightAnchor), _playerView.leftAnchor.constraint(equalTo: videoContainerView.leftAnchor), _playerView.bottomAnchor.constraint(equalTo: videoContainerView.bottomAnchor) ]) return _playerView }()
Crea una función de inicio
- Crear un
init
funcionan de la siguiente manera:- Línea 64: Llama a la implementación de superclase de la función init ().
-
Línea 65: Opcional: Envía su ID de cuenta de Video Cloud a análisis. Esto solo es necesario si anula la
BCOVVideo
clase o no utilice el servicio o catálogo de Brightcove Playback.
required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) playbackController?.analytics.account = playbackConfig.accountID; }
Proceso después de cargar la vista
-
En el
viewDidLoad
método agregue lo siguiente:-
Línea 72: Llama al
requestContentFromPlaybackService
función, que definiremos en el siguiente paso.
override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. requestContentFromPlaybackService() }
-
Solicitar contenido de la biblioteca de Brightcove
Para reproducir contenido de video, solicitará una lista de reproducción al servicio de catálogo.
-
Crea una función llamada
requestContentFromPlaybackService
como sigue:- Líneas 75-76: devuelve un objeto de video de la API de reproducción según la identificación de video dada.
- Línea 80: agrega el video al controlador de reproducción.
- Línea 82: escribe un mensaje de error si no se devuelve una lista de reproducción.
private func requestContentFromPlaybackService() { playbackService.findVideo(withVideoID: playbackConfig.videoID, parameters: nil) { [weak self] (video: BCOVVideo?, jsonResponse: [AnyHashable: Any]?, error: Error?) -> Void in if let _video = video { // since "isAutoPlay" is true, setVideos will begin playing the content self?.playbackController?.setVideos([_video] as NSArray) } else { print("ViewController Debug - Error retrieving video: \(error?.localizedDescription ?? "unknown error")") } } }
Extienda el controlador de reproducción
Esto permite que su aplicación escuche y responda a eventos de reproducción de video.
-
Extienda el controlador de vista para incluir el delegado del controlador de reproducción de Brightcove y escuche los eventos de reproducción. Si es nuevo en Swift, consulte la guía sobre Extensiones.
// MARK: - BCOVPlaybackControllerDelegate extension ViewController: BCOVPlaybackControllerDelegate { func playbackController(_ controller: BCOVPlaybackController!, didAdvanceTo session: BCOVPlaybackSession!) { NSLog("ViewController Debug - Advanced to new session.") } func playbackController(_ controller: BCOVPlaybackController!, playbackSession session: BCOVPlaybackSession!, didReceive lifecycleEvent: BCOVPlaybackSessionLifecycleEvent!) { NSLog("Event: %@", lifecycleEvent.eventType) } }
El resto
-
Cree funciones para manejar anulaciones de enfoque para versiones anteriores de tvOS.
// MARK: - UIFocusEnvironment overrides extension ViewController { // Focus Environment override for tvOS 9 override var preferredFocusedView: UIView? { return playerView } // Focus Environment override for tvOS 10+ override var preferredFocusEnvironments: [UIFocusEnvironment] { return (playerView != nil ? [ playerView! ] : []) } }
Ver el código
El controlador de vista ahora está completo. Aquí está el código completo:
//
// ViewController.swift
// Simple-Video-Playback
//
// Copyright © 2018 Brightcove. All rights reserved.
//
import UIKit
import BrightcovePlayerSDK
fileprivate struct playbackConfig {
static let policyKey = "your policy key"
static let accountID = "your account id"
static let videoID = "your video id"
}
class ViewController: UIViewController {
@IBOutlet weak var videoContainerView: UIView!
lazy var playbackService: BCOVPlaybackService = {
return BCOVPlaybackService(accountId: playbackConfig.accountID, policyKey: playbackConfig.policyKey)
}()
lazy var playbackController: BCOVPlaybackController? = {
guard let _playbackController = BCOVPlayerSDKManager.shared().createPlaybackController() else {
return nil
}
_playbackController.delegate = self
_playbackController.isAutoAdvance = true
_playbackController.isAutoPlay = true
return _playbackController
}()
lazy var playerView: BCOVTVPlayerView? = {
// Set yourself as the presenting view controller
// so that tab bar panels can present other view controllers
let options = BCOVTVPlayerViewOptions()
options.presentingViewController = self
// Create and add to the video container view
guard let _playerView = BCOVTVPlayerView(options: options) else {
return nil
}
// Link the playback controller to the Player View
_playerView.playbackController = playbackController
videoContainerView.addSubview(_playerView)
_playerView.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
_playerView.topAnchor.constraint(equalTo: videoContainerView.topAnchor),
_playerView.rightAnchor.constraint(equalTo: videoContainerView.rightAnchor),
_playerView.leftAnchor.constraint(equalTo: videoContainerView.leftAnchor),
_playerView.bottomAnchor.constraint(equalTo: videoContainerView.bottomAnchor)
])
return _playerView
}()
required init?(coder aDecoder: NSCoder)
{
super.init(coder: aDecoder)
playbackController?.analytics.account = playbackConfig.accountID; // Optional
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
requestContentFromPlaybackService()
}
private func requestContentFromPlaybackService() {
playbackService.findVideo(withVideoID: playbackConfig.videoID, parameters: nil) { [weak self] (video: BCOVVideo?, jsonResponse: [AnyHashable: Any]?, error: Error?) -> Void in
if let _video = video {
// since "isAutoPlay" is true, setVideos will begin playing the content
self?.playbackController?.setVideos([_video] as NSArray)
} else {
print("ViewController Debug - Error retrieving video: \(error?.localizedDescription ?? "unknown error")")
}
}
}
}
// MARK: - BCOVPlaybackControllerDelegate
extension ViewController: BCOVPlaybackControllerDelegate {
func playbackController(_ controller: BCOVPlaybackController!, didAdvanceTo session: BCOVPlaybackSession!) {
NSLog("ViewController Debug - Advanced to new session.")
}
func playbackController(_ controller: BCOVPlaybackController!, playbackSession session: BCOVPlaybackSession!, didReceive lifecycleEvent: BCOVPlaybackSessionLifecycleEvent!) {
NSLog("Event: %@", lifecycleEvent.eventType)
}
}
// MARK: - UIFocusEnvironment overrides
extension ViewController {
// Focus Environment override for tvOS 9
override var preferredFocusedView: UIView? {
return playerView
}
// Focus Environment override for tvOS 10+
override var preferredFocusEnvironments: [UIFocusEnvironment] {
return (playerView != nil ? [ playerView! ] : [])
}
}
Importar el SDK nativo
Aunque Brightcove Native Player SDK para iOS está escrito en Obj-C, podemos simplemente importar los módulos del marco a nuestro proyecto Swift.
-
Debajo de lo existente
import
directiva, agregue lo siguiente para importar el SDK del reproductor nativo de Brightcove:import BrightcovePlayerSDK
Personaliza el proyecto con tus valores
Agregue el valor de su ID de cuenta de Video Cloud.
fileprivate struct playbackConfig {
static let accountID = "your account id"
}
Crear una variable de vista
-
En el
ViewController
class, agregue una variable para la vista.class ViewController: UIViewController { @IBOutlet weak var videoContainerView: UIView!
Crea el controlador de reproducción
-
Cree una variable que defina el controlador de reproducción de Brightcove. Esto se creará la primera vez que se llame.
-
Líneas 22-24: configure el delegado y active las funciones de avance automático y reproducción automática.
lazy var playbackController: BCOVPlaybackController? = { guard let _playbackController = BCOVPlayerSDKManager.shared().createPlaybackController() else { return nil } _playbackController.delegate = self _playbackController.isAutoAdvance = true _playbackController.isAutoPlay = true return _playbackController }()
-
Definir la vista del jugador
-
Crea el
playerView
como sigue:- Líneas 32-33: Defina la vista del jugador para que los paneles de la barra de pestañas puedan presentar otros controladores de vista.
- Líneas 36-38: Cree la vista del reproductor y agréguela a la vista del contenedor de video.
- Línea 41: Asocie la vista del reproductor con el controlador de reproducción.
- Línea 43: Agrega la vista del reproductor como una subvista de la vista principal.
- Línea 45: Apagar máscara de cambio de tamaño automático.
-
Líneas 46-51: Usar Diseño automático para definir restricciones dinámicas para la vista del jugador.
lazy var playerView: BCOVTVPlayerView? = { // Set yourself as the presenting view controller // so that tab bar panels can present other view controllers let options = BCOVTVPlayerViewOptions() options.presentingViewController = self // Create and add to the video container view guard let _playerView = BCOVTVPlayerView(options: options) else { return nil } // Link the playback controller to the Player View _playerView.playbackController = playbackController videoContainerView.addSubview(_playerView) _playerView.translatesAutoresizingMaskIntoConstraints = false NSLayoutConstraint.activate([ _playerView.topAnchor.constraint(equalTo: videoContainerView.topAnchor), _playerView.rightAnchor.constraint(equalTo: videoContainerView.rightAnchor), _playerView.leftAnchor.constraint(equalTo: videoContainerView.leftAnchor), _playerView.bottomAnchor.constraint(equalTo: videoContainerView.bottomAnchor) ]) return _playerView }()
Crea una función de inicio
- Crear un
init
funcionan de la siguiente manera:- Línea 58: Llama a la implementación de superclase de la función init ().
-
Línea 59: Envía su ID de cuenta de Video Cloud a análisis. Esto registra su aplicación con Brightcove.
required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) playbackController?.analytics.account = playbackConfig.accountID; }
Reproducir videos
-
En el
viewDidLoad
método agregue lo siguiente:- Líneas 67-69: Cree una variedad de fuentes de video utilizando rutas de URL.
-
Línea 71: agrega la matriz de video a la cola de reproducción del controlador, que está configurada para comenzar a reproducir automáticamente.
override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. // create an array of videos var videoArray = [AnyObject]() videoArray = [videoWithURL(url: NSURL(string: "https://sdks.support.brightcove.com/assets/videos/hls/laughing_gull/laughing_gull.m3u8")!), videoWithURL(url: NSURL(string: "https://sdks.support.brightcove.com/assets/videos/hls/greatblueheron/greatblueheron.m3u8")!)] playbackController?.setVideos(videoArray as NSFastEnumeration); }
Establecer el método de entrega para las fuentes de video
-
Cree una función que establezca el método de entrega para
BCOVSources
que pertenecen a un video.func videoWithURL(url: NSURL) -> BCOVVideo { // set the delivery method for BCOVSources that belong to a video let source:BCOVSource = BCOVSource(url: url as URL?, deliveryMethod: kBCOVSourceDeliveryHLS, properties: nil) let video = BCOVVideo.init(source: source, cuePoints: BCOVCuePointCollection.init(array: []), properties: [NSObject:AnyObject]()) return video! }
Extienda el controlador de reproducción
Esto permite que su aplicación escuche y responda a eventos de reproducción de video.
-
Extienda el controlador de vista para incluir el delegado del controlador de reproducción de Brightcove y escuche los eventos de reproducción. Si es nuevo en Swift, consulte la guía sobre Extensiones.
// MARK: - BCOVPlaybackControllerDelegate extension ViewController: BCOVPlaybackControllerDelegate { func playbackController(_ controller: BCOVPlaybackController!, didAdvanceTo session: BCOVPlaybackSession!) { NSLog("ViewController Debug - Advanced to new session.") } func playbackController(_ controller: BCOVPlaybackController!, playbackSession session: BCOVPlaybackSession!, didReceive lifecycleEvent: BCOVPlaybackSessionLifecycleEvent!) { NSLog("Event: %@", lifecycleEvent.eventType) } }
El resto
-
Cree funciones para manejar anulaciones de enfoque para versiones anteriores de tvOS.
// MARK: - UIFocusEnvironment overrides extension ViewController { // Focus Environment override for tvOS 9 override var preferredFocusedView: UIView? { return playerView } // Focus Environment override for tvOS 10+ override var preferredFocusEnvironments: [UIFocusEnvironment] { return (playerView != nil ? [ playerView! ] : []) } }
Ver el código
El controlador de vista ahora está completo. Aquí está el código completo:
//
// ViewController.swift
// Simple-Video-Playback
//
// Copyright © 2018 Brightcove. All rights reserved.
//
import UIKit
import BrightcovePlayerSDK
fileprivate struct playbackConfig {
static let accountID = "1752604059001"
}
class ViewController: UIViewController {
@IBOutlet weak var videoContainerView: UIView!
lazy var playbackController: BCOVPlaybackController? = {
guard let _playbackController = BCOVPlayerSDKManager.shared().createPlaybackController() else {
return nil
}
_playbackController.delegate = self
_playbackController.isAutoAdvance = true
_playbackController.isAutoPlay = true
return _playbackController
}()
lazy var playerView: BCOVTVPlayerView? = {
// Set yourself as the presenting view controller
// so that tab bar panels can present other view controllers
let options = BCOVTVPlayerViewOptions()
options.presentingViewController = self
// Create and add to the video container view
guard let _playerView = BCOVTVPlayerView(options: options) else {
return nil
}
// Link the playback controller to the Player View
_playerView.playbackController = playbackController
videoContainerView.addSubview(_playerView)
_playerView.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
_playerView.topAnchor.constraint(equalTo: videoContainerView.topAnchor),
_playerView.rightAnchor.constraint(equalTo: videoContainerView.rightAnchor),
_playerView.leftAnchor.constraint(equalTo: videoContainerView.leftAnchor),
_playerView.bottomAnchor.constraint(equalTo: videoContainerView.bottomAnchor)
])
return _playerView
}()
required init?(coder aDecoder: NSCoder)
{
super.init(coder: aDecoder)
playbackController?.analytics.account = playbackConfig.accountID;
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
// create an array of videos
var videoArray = [AnyObject]()
videoArray = [videoWithURL(url: NSURL(string: "https://sdks.support.brightcove.com/assets/videos/hls/laughing_gull/laughing_gull.m3u8")!),
videoWithURL(url: NSURL(string: "https://sdks.support.brightcove.com/assets/videos/hls/greatblueheron/greatblueheron.m3u8")!)]
playbackController?.setVideos(videoArray as NSFastEnumeration);
}
func videoWithURL(url: NSURL) -> BCOVVideo {
// set the delivery method for BCOVSources that belong to a video
let source:BCOVSource = BCOVSource(url: url as URL?, deliveryMethod: kBCOVSourceDeliveryHLS, properties: nil)
let video = BCOVVideo.init(source: source, cuePoints: BCOVCuePointCollection.init(array: []), properties: [NSObject:AnyObject]())
return video!
}
}
// MARK: - BCOVPlaybackControllerDelegate
extension ViewController: BCOVPlaybackControllerDelegate {
func playbackController(_ controller: BCOVPlaybackController!, didAdvanceTo session: BCOVPlaybackSession!) {
NSLog("ViewController Debug - Advanced to new session.")
}
func playbackController(_ controller: BCOVPlaybackController!, playbackSession session: BCOVPlaybackSession!, didReceive lifecycleEvent: BCOVPlaybackSessionLifecycleEvent!) {
NSLog("Event: %@", lifecycleEvent.eventType)
}
}
// MARK: - UIFocusEnvironment overrides
extension ViewController {
// Focus Environment override for tvOS 9
override var preferredFocusedView: UIView? {
return playerView
}
// Focus Environment override for tvOS 10+
override var preferredFocusEnvironments: [UIFocusEnvironment] {
return (playerView != nil ? [ playerView! ] : [])
}
}
Conectar la vista del guión gráfico
Conecta el Main.storyboard
ver con el videoContainer
propiedad.
-
En el Xcode, abra el
Main.storyboard
expediente. -
En la vista complementaria, expanda el Ver escena del controlador y luego el Ver controlador menú para exponer el Vista objeto.
-
Haga clic en Agregar editor a la derecha y abra el
ViewController.swift
archivo. -
Seleccione el círculo abierto junto al
@IBOutlet
Para elvideoContainerView
y arrástrelo al Vista objeto para conectar estos componentes.
Gestionar la seguridad de los medios
App Transport Security (ATS) aplica conexiones seguras entre su aplicación y los servicios web. Con el lanzamiento de Apple del SDK de iOS 9, una nueva función llamada Seguridad de transporte de aplicaciones (ATS) fue añadido.
-
Una de las siguientes situaciones se aplicará a su aplicación:
-
De forma predeterminada, Brightcove Native SDK para iOS utiliza una política de selección de fuente para elegir HTTPS sobre fuentes HTTP, por lo que puede crear sus aplicaciones con ATS habilitado.
Eso es todo, está listo para ejecutar su aplicación.
-
Si está utilizando fuentes HTTP o tiene otras llamadas HTTP en su aplicación, puede encontrar el siguiente mensaje de error:
App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app's Info.plist file.
Esto significa que ATS está habilitado, pero su sistema no está configurado para cumplir con los requisitos de ATS. Para solucionar esta situación, consulte la Trabajar con App Transport Security (ATS) documento.
-
Ejecutar la aplicación
La aplicación está lista para compilarse y ejecutarse en un Apple TV o en Xcode Simulator. Debería poder reproducir y navegar por el video especificado usando el control remoto.
Controles de la interfaz de usuario de Apple TV
Ahora, está listo para obtener más información sobre los controles de reproducción de Apple TV, incluida la vista de la barra superior para información de video, subtítulos y audio. Para obtener más información, consulte el Controles de la interfaz de usuario de Apple TV con el SDK nativo para tvOS documento.
Para obtener detalles sobre cómo crear su propia vista de elementos de la barra superior personalizada, consulte la Ejemplo de reproductor de Apple TV.