Brightcove ให้การสนับสนุน iOS SDK ล่าสุดใน iOS เวอร์ชันสาธารณะล่าสุดต่อไปนี้:
Brightcove ให้การสนับสนุนแบบพาสซีฟสำหรับ iOS เวอร์ชันต่อไปนี้:
Core SDK ได้รับการแปลเป็นภาษาอารบิก (ar), อังกฤษ (en), ฝรั่งเศส (fr), เยอรมัน (de), ญี่ปุ่น (ja), เกาหลี (ko), สเปน (es), จีนตัวย่อ (zh-Hans) และตัวเต็ม จีน (zh-Hant) เพื่อให้ได้รับประโยชน์จากการแปลเป็นภาษาท้องถิ่น แอปของคุณจะต้องได้รับการแปลเป็นภาษาและสถานที่เดียวกันด้วย ดูส่วนการแปลแบบกำหนดเองสำหรับข้อมูลเพิ่มเติม
ส่วนประกอบ SDK ทั้งหมด - เฟรมเวิร์กหลักและปลั๊กอิน - ได้รับการเผยแพร่โดยมีหมายเลขเวอร์ชันเดียวกัน เมื่ออัปเกรดส่วนประกอบเดียว ให้อัปเกรดส่วนประกอบทั้งหมดเป็นเวอร์ชันเดียวกัน
สำหรับโปรเจ็กต์ที่ใช้ Xcode 12 บน Apple Silicon M1 และ Universal Frameworks (.framework) ข้อผิดพลาดในการสร้างจะถูกส่งกลับเมื่อสร้างโปรเจ็กต์สำหรับเครื่องจำลอง arm64
*ld: building for iOS Simulator, but linking in dylib built for iOS, file for architecture arm64*
หากต้องการสร้างสำหรับเครื่องจำลอง arm64 ตรวจสอบให้แน่ใจว่าได้เพิ่ม arm64
ลงในการตั้งค่าบิลด์ "สถาปัตยกรรมที่ยกเว้น" สำหรับ Any iOS Simulator SDK
ในแท็บ "การตั้งค่าบิลด์" ของเป้าหมายแอปพลิเคชันของคุณ
Brightcove Player SDK รุ่น 6.10.0 เพิ่มข้อกำหนดย่อยสำหรับคอร์และปลั๊กอินแต่ละตัวเพื่อรองรับ XCFrameworks ค่าเริ่มต้นสำหรับแต่ละข้อกำหนดย่อยคือ /XCFramework
ชื่อพอดสเปก | ชื่อข้อมูลจำเพาะย่อย |
---|---|
Brightcove-ผู้เล่น-Core | Brightcove-Player-Core/Framework Brightcove-ผู้เล่น-Core/XCFramework |
Brightcove-ผู้เล่น-DAI | Brightcove-Player-DAI/กรอบงาน Brightcove-ผู้เล่น-DAI/XCFramework |
Brightcove-ผู้เล่น-FreeWheel | Brightcove-ผู้เล่น-FreeWheel/Framework Brightcove-ผู้เล่น-FreeWheel/XCFramework |
Brightcove-เครื่องเล่น-GoogleCast | Brightcove-ผู้เล่น-GoogleCast/Framework Brightcove-ผู้เล่น-GoogleCast/XCFramework |
Brightcove-ผู้เล่น-IMA | Brightcove-Player-IMA/Framework Brightcove-ผู้เล่น-IMA/XCFramework |
Brightcove-ผู้เล่น-Omniture | Brightcove-Player-Omniture/กรอบงาน Brightcove ผู้เล่น Omniture/XCFramework |
ไบรท์โคฟ-เพลเยอร์-พัลส์ | Brightcove-Player-Pulse/กรอบงาน Brightcove-ผู้เล่น-พัลส์/XCFramework |
Brightcove-ผู้เล่น-SSAI | Brightcove-Player-SSAI/กรอบงาน Brightcove-ผู้เล่น-SSAI/XCFramework |
Brightcove-ผู้เล่น-OpenMeasurement | - |
Brightcove Player SDK รุ่น 6.12.0 อัปเดตข้อมูลจำเพาะของ Brightcove-Player-FreeWheel
และ Brightcove-Player-Omniture
เพื่อติดตั้ง BrightcovePlayerSDK
เวอร์ชันไดนามิก
ชื่อพอดสเปก | ประเภทกรอบงาน | การพึ่งพาอาศัยกัน |
---|---|---|
Brightcove-ผู้เล่น-Core | พลวัต | - |
Brightcove-Player-DAI (มีตั้งแต่ 6.12.7) | พลวัต | Brightcove-ผู้เล่น-Core |
Brightcove-ผู้เล่น-FreeWheel | พลวัต | Brightcove-Player-Core สำหรับ iOS Brightcove-Player-Core สำหรับ tvOS |
Brightcove-เครื่องเล่น-GoogleCast | คงที่ | Brightcove-ผู้เล่น-Core |
Brightcove-ผู้เล่น-IMA | พลวัต | Brightcove-ผู้เล่น-Core |
Brightcove-ผู้เล่น-Omniture | พลวัต | Brightcove-ผู้เล่น-Core |
ไบรท์โคฟ-เพลเยอร์-พัลส์ | พลวัต | Brightcove-ผู้เล่น-Core |
Brightcove-ผู้เล่น-SSAI | พลวัต | Brightcove-ผู้เล่น-Core, Brightcove-Player-OpenMeasurement (สำหรับการวัดแบบเปิดเท่านั้น) |
Brightcove-Player-OpenMeasurement (มีตั้งแต่ 6.10.0) | พลวัต | - |
การสนับสนุนวิดีโอที่ได้รับการคุ้มครองโดย FairPlay ได้รับการรวมเข้ากับเฟรมเวิร์กหลัก ของ BrightcovePlayerSDK โปรดดูคู่มือ FairPlay สำหรับรายละเอียดทั้งหมดเกี่ยวกับการใช้ FairPlay กับ Brightcove Native Player SDK
การรองรับ Sidecar Subtitles รวมอยู่ในเฟรมเวิร์กหลัก ของ BrightcovePlayerSDK สำหรับรายละเอียดทั้งหมดเกี่ยวกับการใช้คำบรรยาย Sidecar กับ Brightcove Native Player SDK โปรดดูคู่มือคำบรรยาย Sidecar
ตั้งแต่รีลีส 6.0.0 Brightcove Native Player SDK อนุญาตให้คุณดาวน์โหลดวิดีโอ HLS รวมถึงวิดีโอที่ได้รับการป้องกันด้วยการเข้ารหัส FairPlay เพื่อเล่นในภายหลัง ไม่ว่าจะออนไลน์หรือออฟไลน์ โปรดดูรายละเอียดทั้งหมดจากคู่มือนักพัฒนาแอป:
คู่มือนักพัฒนาแอพ iOS สำหรับการดาวน์โหลดวิดีโอและการเล่นแบบออฟไลน์ด้วย FairPlay
Brightcove Player SDK มีแพ็คเกจการติดตั้งสำหรับ iOS และ tvOS ในรูปแบบไลบรารีไดนามิกที่บรรจุเป็น Frameworks และ XCFrameworks รองรับการใช้งานบน iOS 12.0 ขึ้นไป
คุณสามารถใช้ CocoaPods เพื่อเพิ่ม Brightcove Player SDK ให้กับโปรเจ็กต์ของคุณได้ คุณสามารถค้นหาพ็อดสเปค Brightcove-Player-Core
ล่าสุดได้ที่นี่ podspec รองรับทั้ง iOS และ tvOS
เมื่อใช้ Brightcove CocoaPods ในโปรเจ็กต์ของคุณ ให้เพิ่ม source 'https://github.com/brightcove/BrightcoveSpecs.git'
ที่จุดเริ่มต้นของ Podfile ของคุณ
ชื่อ.
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 ได้โดยผนวกข้อกำหนดย่อย /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
เมื่ออัปเดตการติดตั้ง เป็นความคิดที่ดีที่จะรีเฟรชสำเนาในเครื่องของพื้นที่เก็บข้อมูล BrightcoveSpecs ของคุณเพื่อให้คุณมีพ็อดสเปคล่าสุดในเครื่อง เช่นเดียวกับที่คุณอัปเดตพื้นที่เก็บข้อมูลหลัก CococaPods ของคุณ โดยทั่วไปหากคุณเรียกใช้ pod update
ใน Terminal สิ่งนี้จะเกิดขึ้นโดยอัตโนมัติ หรือคุณสามารถอัปเดตอย่างชัดเจนด้วย pod repo update
หากต้องการเพิ่ม Brightcove Player SDK ให้กับโปรเจ็กต์ของคุณด้วยตนเอง:
BrightcovePlayerSDK.framework
หรือ BrightcovePlayerSDK.xcframework
ให้กับโปรเจ็กต์ของคุณ ตรวจสอบให้แน่ใจว่าใช้เวอร์ชันที่สอดคล้องกับเป้าหมายของคุณ, iOS หรือ tvOSBrightcovePlayerSDK.framework
/ BrightcovePlayerSDK.xcframework
bash ${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}/BrightcovePlayerSDK.framework/strip-frameworks.sh
ทำเครื่องหมายที่ "เรียกใช้สคริปต์เมื่อติดตั้งเท่านั้น" การดำเนินการนี้จะลบสถาปัตยกรรมที่ไม่จำเป็นออกจากรุ่น ซึ่งเป็นสิ่งสำคัญสำหรับการส่ง App Store ขั้นตอนนี้ไม่จำเป็นอีกต่อไปเมื่อใช้ XCFrameworkbash ${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}/BrightcovePlayerSDK.framework/strip-frameworks.sh
ทำเครื่องหมายที่ "เรียกใช้สคริปต์เมื่อติดตั้งเท่านั้น" การดำเนินการนี้จะลบสถาปัตยกรรมที่ไม่จำเป็นออกจากรุ่น ซึ่งเป็นสิ่งสำคัญสำหรับการส่ง App Storearm64
ลงในการตั้งค่าบิลด์ "สถาปัตยกรรมที่ยกเว้น" สำหรับ Any iOS Simulator SDK
ต่อไปนี้เป็นส่วนประกอบ SDK ทั้งหมดและ URL ที่เกี่ยวข้องเพื่อช่วยคุณค้นหาและดาวน์โหลดรุ่นล่าสุด:
ส่วนประกอบ | URL |
---|---|
Brightcove-ผู้เล่น-Core | https://github.com/brightcove/brightcove-player-sdk-ios/tags |
Brightcove-ผู้เล่น-DAI | https://github.com/brightcove/brightcove-player-sdk-ios-dai/tags |
Brightcove-ผู้เล่น-FreeWheel | https://github.com/brightcove/brightcove-player-sdk-ios-fw/tags |
Brightcove-เครื่องเล่น-GoogleCast | https://github.com/brightcove/brightcove-player-sdk-ios-googlecast/tags |
Brightcove-ผู้เล่น-IMA | https://github.com/brightcove/brightcove-player-sdk-ios-ima/tags |
Brightcove-ผู้เล่น-Omniture | https://github.com/brightcove/brightcove-player-sdk-ios-omniture/tags |
ไบรท์โคฟ-เพลเยอร์-พัลส์ | https://github.com/brightcove/brightcove-player-sdk-ios-pulse/tags |
Brightcove-ผู้เล่น-SSAI | https://github.com/brightcove/brightcove-player-sdk-ios-ssai/tags |
วิธีเพิ่ม Brightcove Player SDK ให้กับโปรเจ็กต์ของคุณด้วย Swift Package Manager:
https://github.com/brightcove/brightcove-player-sdk-ios.git
หมายเหตุ: Swift Package Manager รองรับเฉพาะ XCFramework แบบไดนามิก
Brightcove Player SDK สำหรับ iOS สามารถนำเข้าได้โดยใช้:
import BrightcovePlayerSDK;
การเล่นวิดีโอด้วย Brightcove Player SDK สำหรับ 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 ( )
}
}
คุณต้องป้องกันไม่ให้คอนโทรลเลอร์ถูกปล่อยออกมาโดยอัตโนมัติเมื่อสิ้นสุดเมธอด วิธีทั่วไปในการทำเช่นนี้คือการจัดเก็บข้อมูลอ้างอิงไปยังคอนโทรลเลอร์ไว้ในตัวแปรอินสแตนซ์ที่แข็งแกร่ง
ตั้งแต่เวอร์ชัน 5.1.0 Brightcove PlayerUI ได้รับการรวมเข้ากับเฟรมเวิร์ก Core SDK โดยสมบูรณ์ PlayerUI มีชุดควบคุมที่มีคุณลักษณะครบถ้วนสำหรับการเล่นและการโฆษณาทันทีที่แกะกล่อง
PlayerUI ตั้งค่าได้อย่างรวดเร็ว แสดงส่วนควบคุมโฆษณาสำหรับ SSAI, Pulse และ FreeWheel และสามารถปรับแต่งได้โดยการสร้างเค้าโครงของคุณเอง
ปฏิบัติตามคำแนะนำด้านล่างเพื่อตั้งค่าส่วนควบคุม PlayerUI
สร้างคุณสมบัติใน UIViewController ของคุณเพื่อติดตาม BCOVPUIPlayerView BCOVPUIPlayerView จะมีทั้งมุมมองของ Playback Controller และมุมมองการควบคุม
// 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 ]
ตั้งค่า translatesAutoresizingMaskIntoConstraints
บน BCOVPUIPlayerView เป็น 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 )
โปรดทราบว่าคุณสามารถสร้างมุมมองเลย์เอาต์ว่างๆ ลงในนั้นได้ ซึ่งคุณสามารถวางมุมมองของคุณเองได้ (โลโก้ การควบคุม ไม่มีอะไรเลย ฯลฯ) รหัสนี้แสดงวิธีวางโลโก้ UIImage
ภายใน logoLayoutView1 ที่เราสร้างไว้ด้านบน
// 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
ในมุมมองเค้าโครงของตัวควบคุมนั้นได้ เมื่อคุณเปลี่ยนการควบคุมแล้ว ให้เรียก setNeedsLayout
บน controlView ของ playerView:
logoLayoutView1 ? . isRemoved = true
playerView ? . controlsView . setNeedsLayout ( )
คุณยังสามารถปรับแต่งคุณสมบัติ BCOVPUIControlLayout
ทั่วไปหลายประการได้:
controlBarHeight
กำหนดขนาดของตัวควบคุมแต่ละแถวhorizontalItemSpacing
ตั้งค่าระยะห่างระหว่าง BCOVPUILayoutView
แต่ละรายการในแถบควบคุมแต่ละแถบcompactLayoutMaximumWidth
กำหนดว่าจะใช้ชุดควบคุมใด ถ้ามุมมองการควบคุมมีขนาดเล็กกว่า compactLayoutMaximumWidth
ชุดการควบคุมแบบกะทัดรัดจะถูกใช้ มิฉะนั้น จะใช้การควบคุมมาตรฐาน หากต้องการเปลี่ยนชุดการควบคุมที่แสดง คุณต้องสร้างและติดตั้ง BCOVPUIControlLayout
ใหม่ สามารถติดตั้งการควบคุมใหม่ได้ตลอดเวลา
สำหรับตัวอย่างเพิ่มเติมของการปรับแต่ง PlayerUI คุณสามารถดูโค้ดตัวอย่างได้ในโฟลเดอร์ PlayerUI ของที่เก็บ BrightcoveOS GitHub:
https://github.com/BrightcoveOS/ios-player-samples
Brightcove Native Player SDK มีตัวควบคุมในตัวสำหรับการเล่นใน tvOS บน Apple TV สำหรับรายละเอียดทั้งหมดเกี่ยวกับการใช้ TV Player UI ในตัวกับ Brightcove Native Player SDK โปรดดูคู่มือ TV Player ของเรา
เปิดใช้งานฟังก์ชัน AirPlay โดยการตั้งค่าคุณสมบัติ setAllowsExternalPlayback
บน BCOVPlaybackController
ของคุณให้เป็น true
ปุ่ม AirPlay จะแสดงในส่วนควบคุมการเล่นหากพบอุปกรณ์ AirPlay บนเครือข่ายของคุณ
ปัจจุบัน IMA เป็นปลั๊กอินโฆษณาเพียงตัวเดียวที่สนับสนุน AirPlay และเฉพาะเมื่อใช้โฆษณาตอนต้นและ/หรือหลังตอนเท่านั้น การใช้ AirPlay กับปลั๊กอินโฆษณา Pulse, SSAI หรือ FreeWheel อาจส่งผลให้เกิดการทำงานที่ไม่คาดคิด
หากคุณต้องการรองรับ AirPlay 2 และอนุญาตให้เลือกอุปกรณ์หลายเครื่องสำหรับเอาต์พุตเสียง คุณจะต้องทำบางสิ่งเพิ่มเติม ขั้นแรก คุณจะต้องกำหนดค่า AVAudioSession เพื่อให้คุณสามารถตั้ง routeSharingPolicy
ได้ ตัวอย่างเช่น:
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 ( )