Brightcove는 다음 iOS 버전의 최신 공개 릴리스에서 최신 iOS SDK에 대한 적극적인 지원을 제공합니다.
Brightcove는 다음 iOS 버전에 대해 수동적 지원을 제공합니다.
Core SDK는 아랍어(ar), 영어(en), 프랑스어(fr), 독일어(de), 일본어(ja), 한국어(ko), 스페인어(es), 중국어 간체(zh-Hans) 및 번체로 현지화되었습니다. 중국어(zh-Hant). 현지화의 이점을 얻으려면 앱도 동일한 언어 및 로캘에 맞게 현지화되어야 합니다. 자세한 내용은 사용자 정의 지역화 섹션을 참조하세요.
모든 SDK 구성 요소(코어 및 플러그인 프레임워크)는 동일한 버전 번호로 출시됩니다. 단일 구성 요소를 업그레이드하는 경우 모든 구성 요소를 동일한 버전으로 업그레이드하십시오.
Apple Silicon M1 및 Universal Frameworks(.framework)에서 Xcode 12를 사용하는 프로젝트의 경우 arm64 시뮬레이터용 프로젝트를 빌드할 때 빌드 오류가 반환됩니다.
*ld: building for iOS Simulator, but linking in dylib built for iOS, file for architecture arm64*
arm64 시뮬레이터용으로 빌드하려면 애플리케이션 대상의 "빌드 설정" 탭에 있는 Any iOS Simulator SDK
에 대한 "제외 아키텍처" 빌드 설정에 arm64
추가되었는지 확인하세요.
Brightcove Player SDK 릴리스 6.10.0은 XCFrameworks를 지원하기 위해 코어 및 각 플러그인에 대한 하위 사양을 추가합니다. 각 하위 사양의 기본값은 /XCFramework
입니다.
포드 사양 이름 | 하위 사양 이름 |
---|---|
Brightcove-Player-코어 | Brightcove-Player-코어/프레임워크 Brightcove-Player-Core/XCFramework |
브라이트코브-Player-DAI | Brightcove-Player-DAI/프레임워크 Brightcove-Player-DAI/XCFramework |
브라이트코브-Player-FreeWheel | Brightcove-Player-Free휠/프레임워크 Brightcove-Player-FreeWheel/XCFramework |
Brightcove-Player-GoogleCast | Brightcove-Player-GoogleCast/프레임워크 Brightcove-Player-GoogleCast/XCFramework |
Brightcove-Player-IMA | Brightcove-Player-IMA/프레임워크 Brightcove-Player-IMA/XCFramework |
Brightcove-Player-Omniture | Brightcove-Player-Omniture/프레임워크 Brightcove-Player-Omniture/XCFramework |
브라이트코브-Player-Pulse | Brightcove-Player-Pulse/프레임워크 Brightcove-Player-Pulse/XCFramework |
브라이트코브-Player-SSAI | Brightcove-Player-SSAI/프레임워크 Brightcove-Player-SSAI/XCFramework |
Brightcove-Player-OpenMeasurement | - |
Brightcove Player SDK 릴리스 6.12.0은 Brightcove-Player-FreeWheel
및 Brightcove-Player-Omniture
Podspec을 업데이트하여 BrightcovePlayerSDK
의 동적 버전을 설치합니다.
포드 사양 이름 | 프레임워크 유형 | 의존 |
---|---|---|
Brightcove-Player-코어 | 동적 | - |
Brightcove-Player-DAI(6.12.7부터 사용 가능) | 동적 | Brightcove-Player-코어 |
브라이트코브-Player-FreeWheel | 동적 | iOS용 Brightcove-Player-Core, tvOS용 Brightcove-Player-Core |
Brightcove-Player-GoogleCast | 공전 | Brightcove-Player-코어 |
Brightcove-Player-IMA | 동적 | Brightcove-Player-코어 |
Brightcove-Player-Omniture | 동적 | Brightcove-Player-코어 |
브라이트코브-Player-Pulse | 동적 | Brightcove-Player-코어 |
브라이트코브-Player-SSAI | 동적 | 브라이트코브-Player-Core, Brightcove-Player-OpenMeasurement(개방형 측정에만 해당) |
Brightcove-Player-OpenMeasurement(6.10.0부터 사용 가능) | 동적 | - |
FairPlay로 보호되는 비디오에 대한 지원은 핵심 BrightcovePlayerSDK 프레임워크에 통합되어 있습니다. Brightcove Native Player SDK와 함께 FairPlay를 사용하는 방법에 대한 자세한 내용은 FairPlay 가이드를 참조하세요.
사이드카 자막 지원은 핵심 BrightcovePlayerSDK 프레임워크에 통합되어 있습니다. Brightcove Native Player SDK와 함께 사이드카 자막을 사용하는 방법에 대한 자세한 내용은 사이드카 자막 가이드를 참조하세요.
릴리스 6.0.0부터 Brightcove Native Player SDK를 사용하면 온라인이나 오프라인에서 나중에 재생할 수 있도록 FairPlay 암호화로 보호된 비디오를 포함한 HLS 비디오를 다운로드할 수 있습니다. 자세한 내용은 앱 개발자 가이드를 참조하세요.
FairPlay를 통한 비디오 다운로드 및 오프라인 재생에 대한 iOS 앱 개발자 가이드
Brightcove Player SDK는 프레임워크 및 XCFrameworks로 패키지된 동적 라이브러리로 iOS 및 tvOS용 설치 패키지를 제공합니다. 배포는 iOS 12.0 이상에서 지원됩니다.
CocoaPods를 사용하여 Brightcove Player SDK를 프로젝트에 추가할 수 있습니다. 여기에서 최신 Brightcove-Player-Core
Podspec을 찾을 수 있습니다. Podspec은 iOS와 tvOS를 모두 지원합니다.
프로젝트에서 Brightcove CocoaPods를 사용할 때 Podfile 시작 부분에 source 'https://github.com/brightcove/BrightcoveSpecs.git'
추가하세요.
이름.
source ' https://github.com/CocoaPods/Specs '
source ' https://github.com/brightcove/BrightcoveSpecs.git '
platform :ios, ' 12.0 '
use_frameworks !
target ' MyVideoPlayer ' do
pod ' Brightcove-Player-Core '
end
Framework는 Pod에 /Framework
하위 사양을 추가하여 설치할 수 있습니다.
source ' https://github.com/CocoaPods/Specs '
source ' https://github.com/brightcove/BrightcoveSpecs.git '
platform :ios, ' 12.0 '
use_frameworks !
target ' MyVideoPlayer ' do
pod ' Brightcove-Player-Core/Framework '
end
설치를 업데이트할 때 CococaPods 마스터 리포지토리를 업데이트하는 것처럼 BrightcoveSpecs 리포지토리의 로컬 복사본을 새로 고쳐 최신 Podspec을 로컬로 유지하는 것이 좋습니다. 일반적으로 터미널에서 pod update
실행하면 자동으로 발생하거나, 또는 pod repo update
사용하여 명시적으로 업데이트할 수 있습니다.
Brightcove Player SDK를 프로젝트에 수동으로 추가하려면:
BrightcovePlayerSDK.framework
또는 BrightcovePlayerSDK.xcframework
추가하세요. 반드시 대상인 iOS 또는 tvOS에 해당하는 버전을 사용하세요.BrightcovePlayerSDK.framework
/ BrightcovePlayerSDK.xcframework
bash ${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}/BrightcovePlayerSDK.framework/strip-frameworks.sh
명령을 사용하여 "스크립트 실행" 단계를 추가합니다. "설치할 때만 스크립트 실행"을 선택하십시오. 이렇게 하면 빌드에서 불필요한 아키텍처가 제거되며 이는 App Store 제출에 중요합니다. XCFramework를 사용할 때는 이 단계가 더 이상 필요하지 않습니다.bash ${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}/BrightcovePlayerSDK.framework/strip-frameworks.sh
명령을 사용하여 "스크립트 실행" 단계를 추가합니다. "설치할 때만 스크립트 실행"을 선택하십시오. 이렇게 하면 빌드에서 불필요한 아키텍처가 제거되며 이는 App Store 제출에 중요합니다.Any iOS Simulator SDK
에 대한 "제외 아키텍처" 빌드 설정에 arm64
추가되었는지 확인하세요.참고로 최신 릴리스를 찾고 다운로드하는 데 도움이 되는 모든 SDK 구성 요소와 해당 URL은 다음과 같습니다.
요소 | URL |
---|---|
Brightcove-Player-코어 | https://github.com/brightcove/brightcove-player-sdk-ios/tags |
브라이트코브-Player-DAI | https://github.com/brightcove/brightcove-player-sdk-ios-dai/tags |
브라이트코브-Player-FreeWheel | https://github.com/brightcove/brightcove-player-sdk-ios-fw/tags |
Brightcove-Player-GoogleCast | https://github.com/brightcove/brightcove-player-sdk-ios-googlecast/tags |
Brightcove-Player-IMA | https://github.com/brightcove/brightcove-player-sdk-ios-ima/tags |
Brightcove-Player-Omniture | https://github.com/brightcove/brightcove-player-sdk-ios-omniture/tags |
브라이트코브-Player-Pulse | https://github.com/brightcove/brightcove-player-sdk-ios-pulse/tags |
브라이트코브-Player-SSAI | https://github.com/brightcove/brightcove-player-sdk-ios-ssai/tags |
Swift Package Manager를 사용하여 프로젝트에 Brightcove Player SDK를 추가하려면:
https://github.com/brightcove/brightcove-player-sdk-ios.git
입력합니다.참고: Swift Package Manager에는 동적 XCFramework만 지원됩니다.
iOS용 Brightcove Player SDK는 다음을 사용하여 가져올 수 있습니다.
import BrightcovePlayerSDK;
iOS용 Brightcove Player SDK를 사용하여 비디오 재생:
// ** Customize these values with your own account information **
let kAccountId = " ... "
let kPolicyKey = " ... "
let kVideoId = " ... "
let sdkManager = BCOVPlayerSDKManager . sharedManager ( )
let playbackController = sdkManager . createPlaybackController ( )
self . playbackController = playbackController // store this to a strong property
view . addSubview ( playbackController . view )
let playbackService = BCOVPlaybackService ( withAccountId : kAccountId ,
policyKey : kPolicyKey )
let configuration = [
BCOVPlaybackService . ConfigurationKeyAssetID : kVideoId
]
playbackService . findVideo ( withConfiguration : configuration ,
queryParameters : nil ) { ( video : BCOVVideo ? ,
jsonResponse : Any ? ,
error : Error ? ) in
if let video {
self . playbackController ? . setVideos ( [ video ] )
self . playbackController ? . play ( )
}
}
메서드가 끝날 때 컨트롤러가 자동으로 해제되지 않도록 해야 합니다. 이를 수행하는 일반적인 방법은 강력한 인스턴스 변수에 컨트롤러에 대한 참조를 저장하는 것입니다.
버전 5.1.0부터 Brightcove PlayerUI는 Core SDK 프레임워크에 완전히 통합되었습니다. PlayerUI는 재생 및 광고를 위한 모든 기능을 갖춘 컨트롤 세트를 즉시 제공합니다.
PlayerUI는 설정이 빠르고 SSAI, Pulse 및 FreeWheel에 대한 광고 컨트롤을 표시하며 자신만의 레이아웃을 만들어 맞춤 설정할 수 있습니다.
PlayerUI 컨트롤을 설정하려면 아래 지침을 따르세요.
BCOVPUIPlayerView를 추적하려면 UIViewController에 속성을 생성하세요. BCOVPUIPlayerView에는 재생 컨트롤러의 보기와 컨트롤 보기가 모두 포함됩니다.
// PlayerUI's Player View
var playerView : BCOVPUIPlayerView ?
BCOVPUIBasicControlView를 만든 다음 BCOVPUIPlayerView를 만듭니다. 여기에서 재생 컨트롤러(및 재생되는 모든 비디오)를 컨트롤과 연결합니다.
// Create and configure Control View.
let controlView = BCOVPUIBasicControlView . withVODLayout ( )
playerView = BCOVPUIPlayerView ( playbackController : self . playbackController , options : nil )
// Add BCOVPUIPlayerView to your video view.
if let playerView {
videoView . addSubview ( playerView )
}
플레이어 보기에 대한 레이아웃을 설정해야 합니다. 자동 레이아웃이나 이전 Springs & Struts 접근 방식을 사용하여 이 작업을 수행할 수 있습니다.
크기가 조정될 때 레이아웃( videoView
)의 비디오 컨테이너와 일치하도록 플레이어 보기를 설정합니다.
playerView . frame = videoView . bounds
playerView . autoresizingMask = [ . flexibleHeight , . flexibleWidth ]
BCOVPUIPlayerView의 translatesAutoresizingMaskIntoConstraints
를 false
로 설정합니다.
playerView . translatesAutoresizingMaskIntoConstraints = false
그런 다음 레이아웃에 대한 제약 조건을 추가합니다. BCOVPUIPlayerView의 상단, 오른쪽, 왼쪽 및 하단 앵커를 videoView
의 앵커와 동일하게 설정
NSLayoutConstraint . activate ( [
playerView . topAnchor . constraint ( equalTo : videoView . topAnchor ) ,
playerView . rightAnchor . constraint ( equalTo : videoView . rightAnchor ) ,
playerView . bottomAnchor . constraint ( equalTo : videoView . bottomAnchor ) ,
playerView . leftAnchor . constraint ( equalTo : videoView . leftAnchor )
] )
BCOVPUIPlayerViewOptions
클래스를 사용하면 초기화 시 일부 BCOVPlayerUI 동작을 사용자 정의할 수 있습니다. 다음을 사용자 정의할 수 있습니다.
jumpBackInterval
뒤로 이동 버튼을 눌렀을 때 플레이어가 뒤로 탐색하는 시간(초)입니다.
hideControlsInterval
마지막 터치 이벤트 이후 컨트롤이 숨겨지기 전까지의 시간(초)입니다.
hideControlsAnimationDuration
컨트롤이 숨김으로 애니메이션화되는 데 걸리는 시간(초)입니다.
showControlsAnimationDuration
컨트롤이 애니메이션으로 표시되는 데 걸리는 시간(초)입니다.
learnMoreButtonBrowserStyle
광고에서 '자세히 알아보기' 버튼을 탭하면 외부 브라우저(기본 설정) 또는 내부 브라우저에 클릭 연결 링크가 표시되는지 결정하는 설정입니다.
presentingViewController
다른 보기 컨트롤러(예: 폐쇄 캡션 선택 보기 컨트롤러)를 표시하는 데 사용하는 UIViewController 하위 클래스입니다.
automaticControlTypeSelection
BCOVPUIPlayerView
미디어 유형에 따라 BCOVPUIBasicControlView
유형을 자동으로 선택하도록 할지 여부입니다. 이 값이 true
로 설정되면 BCOVPUIBasicControlView
이니셜라이저에 전달된 BCOVPUIPlayerView
속성이 무시됩니다.
비디오 + 오디오 스트림
basicControlViewWithVODLayout
사용합니다.basicControlViewWithLiveLayout
사용합니다.basicControlViewWithLiveDVRLayout
사용합니다.오디오 전용 스트림
basicControlViewWithAODLayout
사용합니다.basicControlViewWithLiveAudioLayout
사용합니다.basicControlViewWithLiveDVRAudioLayout
사용합니다. 참고: automaticControlTypeSelection
BCOVPlayerUI에서 제공하는 레이아웃을 선택하므로 사용자 정의 컨트롤과 레이아웃을 덮어씁니다. automaticControlTypeSelection
과 플레이어 UI 사용자 정의는 호환되지 않습니다.
옵션은 다음 방법을 사용하여 설정할 수 있습니다.
let manager = BCOVPlayerSDKManager . sharedManager ( )
let playbackController = manager . createPlaybackController ( )
let options = BCOVPUIPlayerViewOptions ( )
options . jumpBackInterval = 5
let playerView = BCOVPUIPlayerView ( playbackController : playbackController ,
options : options )
다양한 유형의 비디오를 지원하기 위해 세 가지 레이아웃이 제공됩니다.
BCOVPUIControlLayout basicVODControlLayout
은 일반 주문형 비디오 스트림을 위한 기본 레이아웃입니다.
BCOVPUIControlLayout basicLiveControlLayout
은 라이브 비디오용 레이아웃입니다.
BCOVPUIControlLayout basicLiveDVRControlLayout
은 DVR 컨트롤이 포함된 라이브 비디오 스트림을 위한 레이아웃입니다.
일반적으로 BCOVPUIPlayerView
가 생성된 후 즉시 새 레이아웃을 설정하지만 언제든지 새 레이아웃을 설정할 수도 있습니다. 예를 들어 다음과 같이 새 VOD 레이아웃을 설정할 수 있습니다.
playerView ? . controlsView . layout = BCOVPUIControlLayout . basicVOD ( )
기본 레이아웃 외에도 자신만의 디자인으로 새로운 BCOVPUIControlLayout
인스턴스화하여 고도로 사용자 정의된 레이아웃을 직접 생성할 수 있습니다. 그러나 automaticControlTypeSelection
은 BCOVPlayerUI 에서 제공하는 레이아웃을 선택하므로 사용자 정의 컨트롤과 레이아웃을 덮어씁니다. automaticControlTypeSelection
과 플레이어 UI 사용자 정의는 호환되지 않습니다.
먼저 BCOVPUIBasicControlView layoutViewWithControlFromTag:width:elasticity:
사용하여 레이아웃에 들어갈 컨트롤을 만듭니다. 각 컨트롤은 컨트롤 간격을 결정하는 BCOVPUILayoutView
에 패키지되어 있습니다.
각 레이아웃 보기의 width
기본 너비(컨트롤 유형에 따라 다름)로 설정하거나 고유한 너비를 지정할 수 있습니다.
컨트롤이 포함된 레이아웃 뷰가 컨트롤 막대를 채우기 위해 너비를 얼마나 조정하는지 결정하려면 elasticity
인수를 사용하세요.
다음은 다양한 기본 컨트롤을 만드는 예입니다.
// Create various standard layout views
// Standard play/pause button
let playbackLayoutView = BCOVPUIBasicControlView . layoutViewWithControl ( from : BCOVPUIViewTag . buttonPlayback ,
width : kBCOVPUILayoutUseDefaultValue ,
elasticity : 0.0 )
// Standard jump back button
let jumpBackButtonLayoutView = BCOVPUIBasicControlView . layoutViewWithControl ( from : BCOVPUIViewTag . buttonJumpBack ,
width : kBCOVPUILayoutUseDefaultValue ,
elasticity : 0.0 )
// Current time indicator
let currentTimeLayoutView = BCOVPUIBasicControlView . layoutViewWithControl ( from : BCOVPUIViewTag . labelCurrentTime ,
width : kBCOVPUILayoutUseDefaultValue
elasticity : 0.0 )
// Time separator - typically the '/' character
let timeSeparatorLayoutView = BCOVPUIBasicControlView . layoutViewWithControl ( from : BCOVPUIViewTag . labelTimeSeparator ,
width : kBCOVPUILayoutUseDefaultValue ,
elasticity : 0.0 )
// Video duration label
let durationLayoutView = BCOVPUIBasicControlView . layoutViewWithControl ( from : BCOVPUIViewTag . labelDuration ,
width : kBCOVPUILayoutUseDefaultValue ,
elasticity : 0.0 )
// Slider bar used for seeking through the video
// The elasticity is set to 1 so that it can resize to fill available space
let progressLayoutView = BCOVPUIBasicControlView . layoutViewWithControl ( from : BCOVPUIViewTag . sliderProgress ,
width : kBCOVPUILayoutUseDefaultValue ,
elasticity : 1.0 )
// Closed caption button
// This button is initially hidden ('removed'), and will be shown
// if closed captions or audio tracks are available.
let closedCaptionLayoutView = BCOVPUIBasicControlView . layoutViewWithControl ( from : BCOVPUIViewTag . buttonClosedCaption ,
width : kBCOVPUILayoutUseDefaultValue ,
elasticity : 0.0 )
closedCaptionLayoutView ? . isRemoved = true
// The full-screen button
let screenModeLayoutView = BCOVPUIBasicControlView . layoutViewWithControl ( from : BCOVPUIViewTag . buttonScreenMode ,
width : kBCOVPUILayoutUseDefaultValue ,
elasticity : 0.0 )
// AirPlay button
// This button is initially hidden ('removed'), and will be shown
// if AirPlay devices are available.
let externalRouteLayoutView = BCOVPUIBasicControlView . layoutViewWithControl ( from : BCOVPUIViewTag . viewExternalRoute ,
width : kBCOVPUILayoutUseDefaultValue ,
elasticity : 0.0 )
externalRouteLayoutView ? . isRemoved = true
// Empty view - used as a spacer
let spacerLayoutView1 = BCOVPUIBasicControlView . layoutViewWithControl ( from : BCOVPUIViewTag . viewEmpty ,
width : 1.0 ,
elasticity : 1.0 )
// Empty view - used as a spacer
let spacerLayoutView2 = BCOVPUIBasicControlView . layoutViewWithControl ( from : BCOVPUIViewTag . viewEmpty ,
width : 1.0 ,
elasticity : 1.0 )
// Empty view - will have a custom UIImageView added as a subview
let logoLayoutView1 = BCOVPUIBasicControlView . layoutViewWithControl ( from : BCOVPUIViewTag . viewEmpty ,
width : 88.0 ,
elasticity : 1.0 )
// Empty view - will have a custom UIImageView added as a subview
let logoLayoutView2 = BCOVPUIBasicControlView . layoutViewWithControl ( from : BCOVPUIViewTag . viewEmpty ,
width : 36.0 ,
elasticity : 1.0 )
자신만의 보기(로고, 컨트롤, 없음 등)를 배치할 수 있는 빈 레이아웃 보기를 만들 수도 있습니다. 이 코드는 위에서 만든 logoLayoutView1 내부에 UIImage
로고를 배치하는 방법을 보여줍니다.
// Create logo image inside an image view for display in control bar.
let logoImage1 = UIImage ( named : " myLogo " )
let logoImageView1 = UIImageView ( image : logoImage1 )
logoImageView1 . autoresizingMask = [ . flexibleWidth , . flexibleHeight ]
logoImageView1 . contentMode = . scaleAspectFit
logoImageView1 . frame = logoLayoutView1 . frame
// Add image view to our empty layout view.
logoLayoutView1 . addSubview ( logoImageView1 )
이제 레이아웃 뷰에는 다양한 컨트롤이 패키징되어 배열로 정렬되어 있으며 각 컨트롤은 한 줄의 컨트롤, 즉 컨트롤 막대를 나타냅니다. 세로 및 가로 방향에 대해 서로 다른 레이아웃을 사용할 수 있으므로 일반적으로 두 개의 서로 다른 컨트롤 막대 배열을 설정합니다.
가로 방향의 표준 레이아웃에서 컨트롤은 단일 배열로 정렬된 다음 해당 배열은 전체 컨트롤 집합을 나타내는 다른 배열에 저장됩니다.
let standardLayoutLine1 = [
playbackLayoutView ,
jumpBackButtonLayoutView ,
currentTimeLayoutView ,
timeSeparatorLayoutView ,
durationLayoutView ,
progressLayoutView ,
spacerLayoutView1 ,
logoLayoutView1 ,
spacerLayoutView2 ,
closedCaptionLayoutView ,
screenModeLayoutView ,
externalRouteLayoutView
]
let standardLayoutLines = [ standardLayoutLine1 ]
세로 방향을 위한 컴팩트 레이아웃에서는 각 줄에 하나씩 두 개의 컨트롤 배열이 생성됩니다. 이러한 어레이는 컴팩트 레이아웃을 나타내는 다른 어레이로 패키징됩니다.
각 레이아웃의 대부분의 컨트롤에는 정확히 동일한 개체가 사용됩니다. 이 작업이 완료되고 세로 방향과 가로 방향 사이를 전환하면 개체가 부드러운 애니메이션을 사용하여 새 위치로 이동됩니다.
let compactLayoutLine1 = [
currentTimeLayoutView ,
progressLayoutView ,
durationLayoutView
]
let compactLayoutLine2 = [
playbackLayoutView ,
jumpBackButtonLayoutView ,
spacerLayoutView1 ,
closedCaptionLayoutView ,
screenModeLayoutView ,
externalRouteLayoutView ,
logoLayoutView2
]
let compactLayoutLines = [
compactLayoutLine1 ,
compactLayoutLine2
]
마지막으로 이제 두 가지 레이아웃 구성(전체 너비용 하나, 컴팩트 너비용 하나)이 있으므로 새 BCOVPUIControlLayout
객체를 생성하고 플레이어의 컨트롤 뷰에서 설정할 수 있습니다.
let customLayout = BCOVPUIControlLayout . init ( standardControls : standardLayoutLines ,
compactControls : compactLayoutLines )
playerView ? . controlsView . layout = customLayout
자주 표시하거나 숨겨야 하는 컨트롤이 있는 경우 해당 컨트롤의 레이아웃 보기에서 removed
속성을 설정할 수 있습니다. 컨트롤을 변경한 경우 playerView의 controlView에서 setNeedsLayout
호출하세요.
logoLayoutView1 ? . isRemoved = true
playerView ? . controlsView . setNeedsLayout ( )
또한 여러 일반 BCOVPUIControlLayout
속성을 사용자 정의할 수도 있습니다.
controlBarHeight
컨트롤의 각 행 크기를 설정합니다.horizontalItemSpacing
각 컨트롤 막대의 각 BCOVPUILayoutView
사이의 간격을 설정합니다.compactLayoutMaximumWidth
사용되는 컨트롤 세트를 결정합니다. 컨트롤 뷰가 compactLayoutMaximumWidth
보다 작으면 컴팩트 컨트롤 세트가 사용되고, 그렇지 않으면 표준 컨트롤이 사용됩니다. 표시되는 컨트롤 세트를 변경하려면 새 BCOVPUIControlLayout
생성하고 설치해야 합니다. 언제든지 새로운 컨트롤을 설치할 수 있습니다.
PlayerUI 사용자 정의에 대한 더 많은 예를 보려면 BrightcoveOS GitHub 저장소의 PlayerUI 폴더에 있는 샘플 코드를 살펴보세요.
https://github.com/BrightcoveOS/ios-player-samples
Brightcove Native Player SDK에는 Apple TV의 tvOS 재생을 위한 내장 컨트롤이 포함되어 있습니다. Brightcove Native Player SDK와 함께 내장된 TV Player UI를 사용하는 방법에 대한 자세한 내용은 TV Player 가이드를 참조하세요.
BCOVPlaybackController
의 setAllowsExternalPlayback
속성을 true
로 설정하여 AirPlay 기능을 활성화합니다. AirPlay 장치가 네트워크에서 발견되면 재생 컨트롤에 AirPlay 버튼이 표시됩니다.
현재 IMA는 AirPlay를 지원하는 유일한 광고 플러그인이며 프리롤 및/또는 포스트롤 광고를 사용할 때만 가능합니다. Pulse, SSAI 또는 FreeWheel 광고 플러그인과 함께 AirPlay를 사용하면 예기치 않은 동작이 발생할 수 있습니다.
AirPlay 2도 지원하고 오디오 출력을 위해 여러 장치를 선택할 수 있도록 하려면 몇 가지 추가 작업을 수행해야 합니다. 먼저, routeSharingPolicy
를 설정할 수 있도록 AVAudioSession을 구성해야 합니다. 예를 들어:
do {
try AVAudioSession . sharedInstance ( ) . setCategory ( . playback , mode : . moviePlayback , policy : . longFormVideo )
} catch {
print ( " Error setting AVAudioSession category " )
}
또한 MPRemoteCommandCenter
를 통해 하나 이상의 재생 명령을 구성해야 합니다. 최소한 pauseCommand
와 playCommand
모두 구성하고 싶을 것입니다. 예를 들어:
let center = MPRemoteCommandCenter . shared ( )
center . pauseCommand . addTarget { _ in
playbackController . pause ( )