iOS: 미디어 컨텐츠 작업

이 항목에서는 iOS용 네이티브 SDK를 사용하여 비디오를 검색하고 재생하는 방법을 배우게 됩니다.

개요

Video Cloud 고객은 Video Cloud Studio에서 미디어 데이터와 메타데이터에 액세스할 수 있습니다. 브라이트코브 플레이어 고객은 미디어 콘텐츠에 대한 URL을 제공합니다.

비디오 클라우드 고객

Video Cloud 고객은 Video Cloud Studio에 저장된 미디어 데이터에 액세스할 수 있습니다. 자세한 내용은 iOS용네이티브 플레이어 SDK 코드 샘플을 참조하십시오 .

미디어 데이터 검색

재생 API를 사용하여 Video Cloud 라이브러리에서 비디오 및 재생목록 데이터를 검색할 수 있습니다. API에 대한 자세한 내용은재생 API 개요문서를 참조하십시오.

  1. BCOVPlaybackService클래스 메서드를 사용하여 Brightcove의 Playback API에서 비디오 및 재생목록을 검색하십시오. 요청은 비디오/재생 목록을ID제공하거나 할 수ReferenceID있습니다. 이 서비스는 URL 요청을하고 반환 된 데이터를 구문 분석합니다.

  2. 이 요청에는 정책 키가 필요합니다. 정책 키에 익숙하지 않은 경우정책 API 개요문서를 참조하십시오.

    다음은 Swift에서BCOVPlaybackService클래스를 사용하여 비디오를 검색하는 방법의 예입니다.

    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")")
        }
      }
    }
    }

    전체 샘플은 다음을 참조하십시오.

  3. BCovVideo객체는 아래와 같이 비디오 메타데이터 정보를 제공합니다.

    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")")
      }
    }
    }

    위의print()메서드는 다음과 같은 미디어 정보를 반환합니다.

    비디오 객체
    비디오 객체

지리적으로 필터링 된 비디오 작업

iOS용 브라이트코브 플레이어 SDK는 지리적 필터링된 비디오를 지원합니다.

동영상을 볼 수 있거나 볼 수없는 국가를 제어하기 위해 동영상에 지리적 필터링을 추가 할 수있는 두 가지 방법이 있습니다.

iOS 앱에서 해당 비디오에 대해 지리적 필터링이 적용된 국가에서 Brightcove의BCOVPlaybackService클래스 (Playback API) 를 사용하여 비디오를 검색하면 다음 메시지가 표시됩니다.

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"}
}
)}}

브라이트코브 플레이어 고객

브라이트코브 플레이어 고객은 비디오 자산에 대한 URL을 제공합니다.

다음은 재생 컨트롤러에 비디오 배열을 추가하고 재생을 시작하는 예입니다.

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

전체 샘플은 다음을 참조하십시오.

이제 iOS용 브라이트코브 플레이어 SDK에 대한 기본적인 이해를 얻게 되었습니다. 다음으로 플레이어 SDK를 사용하는 앱을 빌드하는 단계를 살펴볼 수 있습니다.