Brightcove memberikan dukungan aktif untuk iOS SDK terbaru pada rilis publik terbaru dari versi iOS berikut:
Brightcove memberikan dukungan pasif untuk versi iOS berikut:
Core SDK dilokalkan untuk bahasa Arab (ar), Inggris (en), Perancis (fr), Jerman (de), Jepang (ja), Korea (ko), Spanyol (es), Cina Sederhana (zh-Hans) dan Tradisional Cina (zh-Hant). Untuk mendapatkan manfaat pelokalan, aplikasi Anda juga harus dilokalkan untuk bahasa dan lokasi yang sama. Lihat bagian Pelokalan Khusus untuk informasi tambahan.
Semua komponen SDK - kerangka inti dan plugin - dirilis dengan nomor versi yang sama. Saat memutakhirkan satu komponen, tingkatkan semua komponen ke versi yang sama.
Untuk proyek yang menggunakan Xcode 12 di Apple Silicon M1 dan Universal Frameworks (.framework), kesalahan build ditampilkan saat membuat proyek untuk simulator arm64.
*ld: building for iOS Simulator, but linking in dylib built for iOS, file for architecture arm64*
Untuk membuat simulator arm64, pastikan arm64
telah ditambahkan ke pengaturan build "Arsitektur yang Dikecualikan" untuk Any iOS Simulator SDK
di tab "Pengaturan Pembuatan" pada target aplikasi Anda.
Rilis 6.10.0 dari Brightcove Player SDK menambahkan subspesifikasi untuk inti dan setiap plugin untuk mendukung XCFrameworks. Nilai default untuk setiap subspesifikasi adalah /XCFramework
.
Nama Podspesifikasi | Nama Subspesifikasi |
---|---|
Brightcove-Pemain-Inti | Brightcove-Pemain-Inti/Kerangka Brightcove-Player-Core/XCFramework |
Brightcove-Pemain-DAI | Brightcove-Player-DAI/Kerangka Brightcove-Player-DAI/XCFramework |
Brightcove-Player-FreeWheel | Roda/Kerangka Bebas Pemain Brightcove Brightcove-Player-FreeWheel/XCFramework |
Brightcove-Pemain-GoogleCast | Brightcove-Player-GoogleCast/Framework Brightcove-Player-GoogleCast/XCFramework |
Brightcove-Pemain-IMA | Brightcove-Player-IMA/Kerangka Brightcove-Player-IMA/XCFramework |
Brightcove-Pemain-Omniture | Brightcove-Pemain-Omniture/Kerangka Brightcove-Player-Omniture/XCFramework |
Brightcove-Pemain-Pulsa | Brightcove-Pemain-Pulsa/Kerangka Brightcove-Player-Pulse/XCFramework |
Brightcove-Pemain-SSAI | Brightcove-Player-SSAI/Kerangka Brightcove-Player-SSAI/XCFramework |
Pengukuran Brightcove-Player-Open | - |
Rilis 6.12.0 dari Brightcove Player SDK memperbarui podspec Brightcove-Player-FreeWheel
dan Brightcove-Player-Omniture
untuk menginstal versi dinamis BrightcovePlayerSDK
.
Nama Podspesifikasi | Jenis Kerangka | Ketergantungan |
---|---|---|
Brightcove-Pemain-Inti | dinamis | - |
Brightcove-Player-DAI (tersedia sejak 6.12.7) | dinamis | Brightcove-Pemain-Inti |
Brightcove-Player-FreeWheel | dinamis | Brightcove-Player-Core untuk iOS, Brightcove-Player-Core untuk tvOS |
Brightcove-Pemain-GoogleCast | statis | Brightcove-Pemain-Inti |
Brightcove-Pemain-IMA | dinamis | Brightcove-Pemain-Inti |
Brightcove-Pemain-Omniture | dinamis | Brightcove-Pemain-Inti |
Brightcove-Pemain-Pulsa | dinamis | Brightcove-Pemain-Inti |
Brightcove-Pemain-SSAI | dinamis | Brightcove-Pemain-Inti, Brightcove-Player-OpenMeasurement (hanya untuk Pengukuran Terbuka) |
Brightcove-Player-OpenMeasurement (tersedia sejak 6.10.0) | dinamis | - |
Dukungan untuk video yang dilindungi FairPlay diintegrasikan ke dalam kerangka inti BrightcovePlayerSDK . Lihat panduan FairPlay untuk detail lengkap tentang penggunaan FairPlay dengan Brightcove Native Player SDK.
Dukungan untuk Subtitle Sidecar diintegrasikan ke dalam kerangka inti BrightcovePlayerSDK . Untuk detail selengkapnya tentang penggunaan Subtitle Sidecar dengan Brightcove Native Player SDK, lihat panduan Subtitle Sidecar.
Sejak rilis 6.0.0, Brightcove Native Player SDK memungkinkan Anda mengunduh video HLS, termasuk video yang dilindungi dengan enkripsi FairPlay, untuk diputar nanti, baik online maupun offline. Lihat panduan pengembang aplikasi untuk detail selengkapnya:
Panduan Pengembang Aplikasi iOS untuk Pengunduhan Video dan Pemutaran Offline dengan FairPlay
Brightcove Player SDK menyediakan paket instalasi untuk iOS dan tvOS sebagai perpustakaan dinamis yang dikemas sebagai Frameworks dan XCFrameworks. Penerapan didukung di iOS 12.0 dan yang lebih baru.
Anda dapat menggunakan CocoaPods untuk menambahkan Brightcove Player SDK ke proyek Anda. Anda dapat menemukan podspec Brightcove-Player-Core
terbaru di sini. Podspec mendukung iOS dan tvOS.
Saat menggunakan Brightcove CocoaPods di proyek Anda, tambahkan source 'https://github.com/brightcove/BrightcoveSpecs.git'
di awal Podfile Anda.
nama.
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 dapat diinstal dengan menambahkan subspesifikasi /Framework
ke pod.
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
Saat memperbarui instalasi Anda, ada baiknya untuk menyegarkan salinan lokal repositori BrightcoveSpecs Anda sehingga Anda memiliki podspec terbaru secara lokal, sama seperti Anda memperbarui repositori master CococaPods Anda. Biasanya jika Anda menjalankan pod update
di Terminal, hal ini akan terjadi secara otomatis, atau sebagai alternatif, Anda dapat memperbarui secara eksplisit dengan pod repo update
.
Untuk menambahkan Brightcove Player SDK ke proyek Anda secara manual:
BrightcovePlayerSDK.framework
atau BrightcovePlayerSDK.xcframework
ke proyek Anda. Pastikan untuk menggunakan versi yang sesuai dengan target Anda, iOS atau tvOS.BrightcovePlayerSDK.framework
/ BrightcovePlayerSDK.xcframework
bash ${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}/BrightcovePlayerSDK.framework/strip-frameworks.sh
. Centang "Jalankan skrip hanya saat menginstal". Ini akan menghapus arsitektur yang tidak diperlukan dari build, yang penting untuk pengiriman App Store. Langkah ini tidak lagi diperlukan saat menggunakan XCFramework.bash ${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}/BrightcovePlayerSDK.framework/strip-frameworks.sh
. Centang "Jalankan skrip hanya saat menginstal". Ini akan menghapus arsitektur yang tidak diperlukan dari build, yang penting untuk pengiriman App Store.arm64
telah ditambahkan ke pengaturan build "Arsitektur yang Dikecualikan" untuk Any iOS Simulator SDK
.Sebagai referensi, berikut adalah semua komponen SDK dan URL terkait untuk membantu Anda menemukan dan mendownload rilis terbaru:
Komponen | URL |
---|---|
Brightcove-Pemain-Inti | https://github.com/brightcove/brightcove-player-sdk-ios/tags |
Brightcove-Pemain-DAI | https://github.com/brightcove/brightcove-player-sdk-ios-dai/tags |
Brightcove-Player-FreeWheel | https://github.com/brightcove/brightcove-player-sdk-ios-fw/tags |
Brightcove-Pemain-GoogleCast | https://github.com/brightcove/brightcove-player-sdk-ios-googlecast/tags |
Brightcove-Pemain-IMA | https://github.com/brightcove/brightcove-player-sdk-ios-ima/tags |
Brightcove-Pemain-Omniture | https://github.com/brightcove/brightcove-player-sdk-ios-omniture/tags |
Brightcove-Pemain-Pulsa | https://github.com/brightcove/brightcove-player-sdk-ios-pulse/tags |
Brightcove-Pemain-SSAI | https://github.com/brightcove/brightcove-player-sdk-ios-ssai/tags |
Untuk menambahkan Brightcove Player SDK ke proyek Anda dengan Swift Package Manager:
https://github.com/brightcove/brightcove-player-sdk-ios.git
Catatan: Hanya XCFramework dinamis yang didukung untuk Swift Package Manager.
Brightcove Player SDK untuk iOS dapat diimpor menggunakan:
import BrightcovePlayerSDK;
Memutar video dengan Brightcove Player SDK untuk iOS:
// ** 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 ( )
}
}
Anda harus menjaga agar pengontrol tidak dilepaskan secara otomatis di akhir metode. Cara umum untuk melakukan ini adalah dengan menyimpan referensi ke pengontrol dalam variabel instan yang kuat.
Sejak versi 5.1.0, Brightcove PlayerUI terintegrasi penuh ke dalam kerangka Core SDK. PlayerUI menyediakan serangkaian kontrol berfitur lengkap untuk pemutaran dan periklanan, langsung dari kotaknya.
PlayerUI cepat diatur, menampilkan kontrol iklan untuk SSAI, Pulse dan FreeWheel, dan dapat disesuaikan dengan membuat tata letak Anda sendiri.
Ikuti panduan di bawah ini untuk menyiapkan kontrol PlayerUI.
Buat properti di UIViewController Anda untuk melacak BCOVPUIPlayerView. BCOVPUIPlayerView akan berisi tampilan Pengontrol Pemutaran dan tampilan kontrol.
// PlayerUI's Player View
var playerView : BCOVPUIPlayerView ?
Buat BCOVPUIBasicControlView, lalu BCOVPUIPlayerView. Di sinilah kami mengasosiasikan Pengontrol Pemutaran (dan semua video yang diputarnya) dengan kontrol.
// 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 )
}
Anda harus menyiapkan tata letak untuk tampilan pemutar, Anda dapat melakukannya dengan Tata Letak Otomatis atau pendekatan Springs & Struts yang lebih lama.
Atur tampilan pemutar agar sesuai dengan wadah video dari tata letak Anda ( videoView
) saat diubah ukurannya.
playerView . frame = videoView . bounds
playerView . autoresizingMask = [ . flexibleHeight , . flexibleWidth ]
Setel translatesAutoresizingMaskIntoConstraints
di BCOVPUIPlayerView ke false
.
playerView . translatesAutoresizingMaskIntoConstraints = false
Kemudian tambahkan batasan untuk tata letaknya; mengatur jangkar atas, kanan, kiri dan bawah BCOVPUIPlayerView Anda agar sama dengan 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 )
] )
Kelas BCOVPUIPlayerViewOptions
memungkinkan Anda menyesuaikan beberapa perilaku BCOVPlayerUI saat inisialisasi. Anda dapat menyesuaikan hal berikut:
jumpBackInterval
Waktu dalam detik pemain akan mencari kembali ketika tombol lompat mundur ditekan.
hideControlsInterval
Waktu dalam detik setelah peristiwa sentuhan terakhir, sebelum kontrol disembunyikan.
hideControlsAnimationDuration
Waktu yang diperlukan dalam hitungan detik agar kontrol dianimasikan hingga disembunyikan.
showControlsAnimationDuration
Waktu yang diperlukan dalam hitungan detik agar kontrol dapat dianimasikan agar terlihat.
learnMoreButtonBrowserStyle
Setelan yang menentukan apakah mengetuk tombol "Pelajari Lebih Lanjut" pada iklan akan menampilkan tautan klik-tayang di browser eksternal (setelan default) atau browser internal.
presentingViewController
Subkelas UIViewController yang digunakan untuk menyajikan pengontrol tampilan lainnya (seperti pengontrol tampilan pilihan teks tertutup).
automaticControlTypeSelection
Apakah Anda ingin BCOVPUIPlayerView
memilih jenis BCOVPUIBasicControlView
secara otomatis berdasarkan jenis media. Jika nilai ini disetel ke true
properti BCOVPUIBasicControlView
yang diteruskan ke penginisialisasi BCOVPUIPlayerView
akan diabaikan.
Aliran Video + Audio
basicControlViewWithVODLayout
basicControlViewWithLiveLayout
basicControlViewWithLiveDVRLayout
Streaming Audio Saja
basicControlViewWithAODLayout
basicControlViewWithLiveAudioLayout
basicControlViewWithLiveDVRAudioLayout
CATATAN: automaticControlTypeSelection
memilih tata letak dari yang disediakan oleh BCOVPlayerUI, sehingga kontrol dan tata letak khusus akan ditimpa; automaticControlTypeSelection
dan kustomisasi UI pemutar tidak kompatibel.
Opsi dapat diatur menggunakan metode berikut:
let manager = BCOVPlayerSDKManager . sharedManager ( )
let playbackController = manager . createPlaybackController ( )
let options = BCOVPUIPlayerViewOptions ( )
options . jumpBackInterval = 5
let playerView = BCOVPUIPlayerView ( playbackController : playbackController ,
options : options )
Tiga tata letak disediakan untuk mendukung berbagai jenis video:
BCOVPUIControlLayout basicVODControlLayout
adalah tata letak dasar untuk streaming video berdasarkan permintaan secara umum.
BCOVPUIControlLayout basicLiveControlLayout
adalah tata letak untuk video langsung.
BCOVPUIControlLayout basicLiveDVRControlLayout
adalah tata letak untuk streaming video langsung dengan kontrol DVR.
Anda biasanya menyetel tata letak baru segera setelah BCOVPUIPlayerView
dibuat, namun Anda juga dapat menyetel tata letak baru kapan saja. Misalnya, Anda dapat menyetel tata letak VOD baru seperti ini:
playerView ? . controlsView . layout = BCOVPUIControlLayout . basicVOD ( )
Selain tata letak default, Anda dapat membuat tata letak yang sangat disesuaikan dengan membuat instance BCOVPUIControlLayout
baru dengan desain Anda sendiri. Namun perlu diperhatikan bahwa automaticControlTypeSelection
memilih tata letak dari yang disediakan oleh BCOVPlayerUI, sehingga kontrol dan tata letak khusus akan ditimpa; automaticControlTypeSelection
dan kustomisasi UI pemutar tidak kompatibel.
Pertama, buat kontrol yang akan masuk ke tata letak Anda menggunakan BCOVPUIBasicControlView layoutViewWithControlFromTag:width:elasticity:
. Setiap kontrol dikemas dalam BCOVPUILayoutView
yang menentukan jarak kontrol.
Anda dapat mengatur width
setiap tampilan tata letak ke lebar default (yang didasarkan pada tipe kontrol), atau Anda dapat menentukan lebar Anda sendiri.
Gunakan argumen elasticity
untuk menentukan seberapa besar tampilan tata letak yang berisi kontrol mengubah lebarnya untuk mengisi bilah kontrol.
Berikut adalah contoh pembuatan berbagai kontrol dasar.
// 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 )
Perhatikan bahwa Anda juga dapat membuat tampilan tata letak kosong, di mana Anda dapat menempatkan tampilan Anda sendiri (logo, kontrol, tidak ada, dll.). Kode ini menunjukkan cara menempatkan logo UIImage
di dalam logoLayoutView1 yang kita buat di atas.
// 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 )
Sekarang terdapat berbagai kontrol yang dikemas dalam tampilan tata letak, mereka diurutkan ke dalam array, yang masing-masing mewakili satu baris kontrol, yaitu bilah kontrol. Perhatikan bahwa Anda dapat memiliki tata letak berbeda untuk orientasi potret dan lanskap, jadi Anda biasanya akan menyiapkan dua susunan bilah kontrol yang berbeda.
Dalam tata letak standar untuk orientasi lanskap, kontrol disusun dalam satu larik, lalu larik tersebut disimpan dalam larik lain yang mewakili seluruh rangkaian kontrol.
let standardLayoutLine1 = [
playbackLayoutView ,
jumpBackButtonLayoutView ,
currentTimeLayoutView ,
timeSeparatorLayoutView ,
durationLayoutView ,
progressLayoutView ,
spacerLayoutView1 ,
logoLayoutView1 ,
spacerLayoutView2 ,
closedCaptionLayoutView ,
screenModeLayoutView ,
externalRouteLayoutView
]
let standardLayoutLines = [ standardLayoutLine1 ]
Dalam tata letak ringkas untuk orientasi potret, dua rangkaian kontrol dibuat, satu untuk setiap baris. Array ini dikemas ke dalam array lain yang mewakili tata letak kompak.
Perhatikan bahwa objek yang sama persis digunakan untuk sebagian besar kontrol di setiap tata letak. Ketika ini selesai, dan Anda beralih antara orientasi potret dan lanskap, objek akan dipindahkan ke posisi barunya menggunakan animasi yang halus.
let compactLayoutLine1 = [
currentTimeLayoutView ,
progressLayoutView ,
durationLayoutView
]
let compactLayoutLine2 = [
playbackLayoutView ,
jumpBackButtonLayoutView ,
spacerLayoutView1 ,
closedCaptionLayoutView ,
screenModeLayoutView ,
externalRouteLayoutView ,
logoLayoutView2
]
let compactLayoutLines = [
compactLayoutLine1 ,
compactLayoutLine2
]
Terakhir, karena kini terdapat dua konfigurasi tata letak (satu untuk lebar penuh, dan satu lagi untuk lebar kompak), Anda dapat membuat objek BCOVPUIControlLayout
baru, dan mengaturnya dalam tampilan kontrol pemutar.
let customLayout = BCOVPUIControlLayout . init ( standardControls : standardLayoutLines ,
compactControls : compactLayoutLines )
playerView ? . controlsView . layout = customLayout
Jika Anda memiliki kontrol yang perlu sering ditampilkan atau disembunyikan, Anda bisa mengatur properti removed
pada tampilan tata letak kontrol tersebut. Ketika Anda telah mengubah kontrol, panggil setNeedsLayout
pada controlView playerView:
logoLayoutView1 ? . isRemoved = true
playerView ? . controlsView . setNeedsLayout ( )
Anda juga dapat menyesuaikan beberapa properti umum BCOVPUIControlLayout
:
controlBarHeight
mengatur ukuran setiap baris kontrol.horizontalItemSpacing
menyetel jarak antara setiap BCOVPUILayoutView
di setiap bilah kontrol.compactLayoutMaximumWidth
menentukan kumpulan kontrol mana yang digunakan. Jika tampilan kontrol lebih kecil dari compactLayoutMaximumWidth
, kumpulan kontrol ringkas akan digunakan, jika tidak, kontrol standar akan digunakan. Untuk mengubah kumpulan kontrol yang ditampilkan, Anda harus membuat dan menginstal BCOVPUIControlLayout
baru. Kontrol baru dapat dipasang kapan saja.
Untuk contoh kustomisasi PlayerUI lainnya, Anda dapat melihat kode contoh di folder PlayerUI di repositori GitHub BrightcoveOS:
https://github.com/BrightcoveOS/ios-player-samples
Brightcove Native Player SDK menyertakan kontrol bawaan untuk pemutaran di tvOS di Apple TV. Untuk detail selengkapnya tentang penggunaan UI Pemutar TV bawaan dengan Brightcove Native Player SDK, lihat panduan Pemutar TV kami.
Aktifkan fungsionalitas AirPlay dengan mengatur properti setAllowsExternalPlayback
di BCOVPlaybackController
Anda ke true
. Tombol AirPlay akan ditampilkan di kontrol pemutaran jika perangkat AirPlay ditemukan di jaringan Anda.
Saat ini, IMA adalah satu-satunya plugin iklan yang mendukung AirPlay dan hanya jika menggunakan iklan pra-putar dan/atau pasca-putar. Menggunakan AirPlay dengan plugin iklan Pulse, SSAI, atau FreeWheel dapat mengakibatkan perilaku yang tidak terduga.
Jika Anda juga ingin mendukung AirPlay 2 dan mengizinkan beberapa perangkat dipilih untuk output audio, Anda harus melakukan beberapa hal tambahan. Pertama, Anda harus mengonfigurasi AVAudioSession agar Anda dapat menyetel routeSharingPolicy
. Misalnya:
do {
try AVAudioSession . sharedInstance ( ) . setCategory ( . playback , mode : . moviePlayback , policy : . longFormVideo )
} catch {
print ( " Error setting AVAudioSession category " )
}
Anda juga perlu mengonfigurasi setidaknya satu perintah pemutaran melalui MPRemoteCommandCenter
. Setidaknya Anda ingin mengonfigurasi pauseCommand
dan playCommand
. Misalnya:
let center = MPRemoteCommandCenter . shared ( )
center . pauseCommand . addTarget { _ in
playbackController . pause ( )