iOS: Trabajar con contenido multimedia

En este tema, aprenderá cómo recuperar y reproducir sus videos usando Native SDK para iOS.

Resumen

Los clientes de Video Cloud tienen acceso a sus metadatos y datos multimedia desde Video Cloud Studio. Los clientes de Brightcove Player proporcionarán la URL de su contenido multimedia.

Clientes de Video Cloud

Como cliente de Video Cloud, puede acceder a sus datos multimedia almacenados en Video Cloud Studio. Para obtener más información, consulte el Native Player SDK para ejemplos de código de iOS.

Recuperando datos de medios

Puede recuperar los datos de su video y lista de reproducción de su biblioteca de Video Cloud utilizando la API de reproducción. Para obtener detalles sobre la API, consulte la Descripción general de la API de reproducción documento.

  1. Utilizar el BCOVPlaybackService métodos de clase para recuperar sus videos y listas de reproducción de la API de reproducción de Brightcove. Sus solicitudes pueden proporcionar el video / lista de reproducción ID o ReferenceID. Este servicio realizará las solicitudes de URL y analizará los datos devueltos.

  2. Para esta solicitud, 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 documento.

    A continuación, se muestra un ejemplo de cómo recuperar un video usando el BCOVPlaybackService clase en Swift:

    import UIKit
    import BrightcovePlayerSDK
    
    let kViewControllerPlaybackServicePolicyKey = "your policy key"
    let kViewControllerAccountID = "your account id"
    let kViewControllerVideoID = "your video id"
    
    class ViewController: UIViewController, BCOVPlaybackControllerDelegate {
    
    let sharedSDKManager = BCOVPlayerSDKManager.shared()
    let playbackService = BCOVPlaybackService(accountId: kViewControllerAccountID, policyKey: kViewControllerPlaybackServicePolicyKey)
    let playbackController :BCOVPlaybackController
    @IBOutlet weak var videoContainerView: UIView!
    
    required init?(coder aDecoder: NSCoder) {
      playbackController = (sharedSDKManager?.createPlaybackController())!
    
      super.init(coder: aDecoder)
    
      playbackController.delegate = self
      playbackController.isAutoAdvance = true
      playbackController.isAutoPlay = true
    }
    
    override func viewDidLoad() {
      super.viewDidLoad()
      // Do any additional setup after loading the view, typically from a nib.
    
      // Set up our player view. Create with a standard VOD layout.
      guard let playerView = BCOVPUIPlayerView(playbackController: self.playbackController, options: nil, controlsView: BCOVPUIBasicControlView.withVODLayout()) else {
          return
      }
    
      // Install in the container view and match its size.
      self.videoContainerView.addSubview(playerView)
      playerView.translatesAutoresizingMaskIntoConstraints = false
      NSLayoutConstraint.activate([
        playerView.topAnchor.constraint(equalTo: self.videoContainerView.topAnchor),
        playerView.rightAnchor.constraint(equalTo: self.videoContainerView.rightAnchor),
        playerView.leftAnchor.constraint(equalTo: self.videoContainerView.leftAnchor),
        playerView.bottomAnchor.constraint(equalTo: self.videoContainerView.bottomAnchor)
      ])
    
      // Associate the playerView with the playback controller.
      playerView?.playbackController = playbackController
    
      requestContentFromPlaybackService()
    }
    
    func requestContentFromPlaybackService() {
      playbackService?.findVideo(withVideoID: kViewControllerVideoID, parameters: nil) { (video: BCOVVideo?, jsonResponse: [AnyHashable: Any]?, error: Error?) -> Void in
    
        if let v = video {
        	self.playbackController.setVideos([v] as NSArray)
        } else {
        	print("ViewController Debug - Error retrieving video: \(error?.localizedDescription ?? "unknown error")")
        }
      }
    }
    }

    Para obtener muestras completas, consulte lo siguiente:

  3. La BCOVVídeo El objeto proporciona información de metadatos de video como se muestra a continuación:

    func requestContentFromPlaybackService() {
    playbackService?.findVideo(withVideoID: kViewControllerVideoID, parameters: nil) { (video: BCOVVideo?, jsonResponse: [AnyHashable: Any]?, error: Error?) -> Void in
    
      if let v = video {
    	print("video name: \(v.properties["name"] as AnyObject)")
      	print("video id: \(v.properties["id"] as AnyObject)")
      	print("video thumbnail: \(v.properties["thumbnail"] as AnyObject)")
      	print("video metadata: \(v.properties)")
    
      	self.playbackController.setVideos([v] as NSArray)
      } else {
      	print("ViewController Debug - Error retrieving video: \(error?.localizedDescription ?? "unknown error")")
      }
    }
    }

    Lo anterior print() Los métodos devuelven la siguiente información multimedia:

    Objeto de video
    Objeto de video

Trabajar con videos filtrados geográficamente

Brightcove Player SDK para iOS admite videos filtrados geográficamente.

Hay dos formas de agregar filtros geográficos a sus videos para controlar en qué países se pueden (o no) ver:

En su aplicación iOS, cuando recupera un video usando Brightcove's BCOVPlaybackService class (Playback API) en un país que está filtrado geográficamente para ese video, debería ver este mensaje:

Error Domain=kBCOVPlaybackServiceErrorDomain Code=3 "(null)"
UserInfo={kBCOVPlaybackServiceErrorKeyAPIHTTPStatusCode=403,
kBCOVPlaybackServiceErrorKeyAPIErrors=
{type = immutable, count = 1, values = (
0 : {type = immutable dict, count = 4,
entries =>
1 : message = {contents = "Access to this resource is forbidden by access policy."}
2 : {contents = "client_geo"} = us
4 : {contents = "error_subcode"} = {contents = "CLIENT_GEO"}
6 : {contents = "error_code"} = {contents = "ACCESS_DENIED"}
}
)}}

Clientes de Brightcove Player

Como cliente de Brightcove Player, proporcionará la URL de sus activos de video.

A continuación, se muestra un ejemplo de cómo agregar una serie de videos al controlador de reproducción e iniciar la reproducción:

import UIKit
import BrightcovePlayerSDK

let kViewControllerAccountID = "your account id" // For Brightcove registration

class ViewController: UIViewController, BCOVPlaybackControllerDelegate {
  let sharedSDKManager = BCOVPlayerSDKManager.shared()
  let playbackController :BCOVPlaybackController
  @IBOutlet weak var videoContainerView: UIView!

  required init?(coder aDecoder: NSCoder) {
    // Create the Brightcove playback controller
    playbackController = (sharedSDKManager?.createPlaybackController())!

    super.init(coder: aDecoder)

    // Register your app with Brightcove
    playbackController.analytics.account = kViewControllerAccountID

    // Configure the player
    playbackController.delegate = self
    playbackController.isAutoAdvance = true
    playbackController.isAutoPlay = true
  }

  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://solutions.brightcove.com/bcls/assets/videos/Great_Horned_Owl.mp4")!),
                  videoWithURL(url: NSURL(string: "https://solutions.brightcove.com/bcls/assets/videos/Great_Blue_Heron.mp4")!)]

    // Set up the player view with a standard VOD layout.
    guard let playerView = BCOVPUIPlayerView(playbackController: self.playbackController, options: nil, controlsView: BCOVPUIBasicControlView.withVODLayout()) else {
      return
    }

    // Install in the container view and match its size.
    self.videoContainerView.addSubview(playerView)
    playerView.translatesAutoresizingMaskIntoConstraints = false
    NSLayoutConstraint.activate([
      playerView.topAnchor.constraint(equalTo: self.videoContainerView.topAnchor),
      playerView.rightAnchor.constraint(equalTo: self.videoContainerView.rightAnchor),
      playerView.leftAnchor.constraint(equalTo: self.videoContainerView.leftAnchor),
      playerView.bottomAnchor.constraint(equalTo: self.videoContainerView.bottomAnchor)
    ])

    // Associate the playerView with the playback controller.
    playerView.playbackController = playbackController

    // Load the video array into the player and start video playback
    playbackController.setVideos(videoArray as NSArray)
    playbackController.play();
  }

  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!
  }
}

Para obtener muestras completas, consulte lo siguiente:

Ahora tiene un conocimiento básico de Brightcove Player SDK para iOS. A continuación, puede seguir los pasos para crear una aplicación que utilice Player SDK