يوفر Brightcove دعمًا نشطًا لأحدث إصدار iOS SDK على أحدث إصدار عام لإصدارات iOS التالية:
يوفر Brightcove دعمًا سلبيًا لإصدارات iOS التالية:
تمت ترجمة Core SDK للغة العربية (ar)، والإنجليزية (en)، والفرنسية (fr)، والألمانية (de)، واليابانية (ja)، والكورية (ko)، والإسبانية (es)، والصينية المبسطة (zh-Hans) والتقليدية. الصينية (zh هانت). للحصول على فائدة الترجمة، يجب أيضًا ترجمة تطبيقك لنفس اللغة والإعدادات المحلية. راجع قسم الترجمة المخصصة للحصول على معلومات إضافية.
يتم إصدار جميع مكونات 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
في علامة التبويب "إعدادات البناء" لهدف التطبيق الخاص بك.
يضيف الإصدار 6.10.0 من Brightcove Player SDK مواصفات فرعية للنواة وكل مكون إضافي لدعم XCFrameworks. القيمة الافتراضية لكل مواصفات فرعية هي /XCFramework
.
اسم بودسبيك | أسماء المواصفات الفرعية |
---|---|
Brightcove-Player-Core | Brightcove-Player-Core/Framework Brightcove-Player-Core/XCFramework |
Brightcove-Player-DAI | Brightcove-Player-DAI/Framework Brightcove-Player-DAI/XCFramework |
Brightcove-Player-FreeWheel | Brightcove-Player-FreeWheel/Framework Brightcove-Player-FreeWheel/XCFramework |
Brightcove-Player-GoogleCast | Brightcove-Player-GoogleCast/Framework Brightcove-Player-GoogleCast/XCFramework |
Brightcove-Player-IMA | Brightcove-Player-IMA/Framework Brightcove-Player-IMA/XCFramework |
Brightcove-Player-Omniture | Brightcove-Player-Omniture/Framework Brightcove-Player-Omniture/XCFramework |
Brightcove-Player-Pulse | Brightcove-Player-Pulse/Framework Brightcove-Player-Pulse/XCFramework |
Brightcove-Player-SSAI | Brightcove-Player-SSAI/Framework Brightcove-Player-SSAI/XCFramework |
Brightcove-Player-OpenMeasurement | - |
يقوم الإصدار 6.12.0 من Brightcove Player SDK بتحديث مواصفات podspecs Brightcove-Player-FreeWheel
و Brightcove-Player-Omniture
لتثبيت الإصدار الديناميكي من BrightcovePlayerSDK
.
اسم بودسبيك | نوع الإطار | التبعية |
---|---|---|
Brightcove-Player-Core | متحرك | - |
Brightcove-Player-DAI (متاح منذ 6.12.7) | متحرك | Brightcove-Player-Core |
Brightcove-Player-FreeWheel | متحرك | Brightcove-Player-Core لنظام iOS، Brightcove-Player-Core لنظام تشغيل tvOS |
Brightcove-Player-GoogleCast | ثابت | Brightcove-Player-Core |
Brightcove-Player-IMA | متحرك | Brightcove-Player-Core |
Brightcove-Player-Omniture | متحرك | Brightcove-Player-Core |
Brightcove-Player-Pulse | متحرك | Brightcove-Player-Core |
Brightcove-Player-SSAI | متحرك | Brightcove-Player-Core, Brightcove-Player-OpenMeasurement (فقط للقياس المفتوح) |
Brightcove-Player-OpenMeasurement (متوفر منذ 6.10.0) | متحرك | - |
تم دمج دعم مقاطع الفيديو المحمية بواسطة FairPlay في إطار عمل BrightcovePlayerSDK الأساسي. ارجع إلى دليل FairPlay للحصول على التفاصيل الكاملة حول استخدام FairPlay مع Brightcove Native Player SDK.
تم دمج دعم Sidecar Subtitles في إطار عمل BrightcovePlayerSDK الأساسي. للحصول على تفاصيل كاملة حول استخدام Sidecar Subtitles مع Brightcove Native Player SDK، راجع دليل Sidecar Subtitles.
منذ الإصدار 6.0.0، تسمح لك Brightcove Native Player SDK بتنزيل مقاطع فيديو HLS، بما في ذلك تلك المحمية بتشفير FairPlay، لتشغيلها لاحقًا، سواء عبر الإنترنت أو دون الاتصال بالإنترنت. راجع دليل مطور التطبيق للحصول على التفاصيل الكاملة:
دليل مطور تطبيقات iOS لتنزيل الفيديو وتشغيله دون الاتصال بالإنترنت باستخدام FairPlay
يوفر برنامج Brightcove Player SDK حزم التثبيت لنظامي التشغيل iOS وtvOS كمكتبات ديناميكية مجمعة كإطارات عمل و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
بالجراب.
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 الخاص بك بحيث يكون لديك أحدث مواصفات podspecs محليًا، تمامًا كما تفعل مع مستودع CococaPods الرئيسي الخاص بك. عادةً، إذا قمت بتشغيل 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
. حدد "تشغيل البرنامج النصي فقط عند التثبيت". سيؤدي هذا إلى إزالة البنى غير الضرورية من الإصدار، وهو أمر مهم لتقديم متجر التطبيقات. لم تعد هذه الخطوة ضرورية عند استخدام XCFramework.bash ${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}/BrightcovePlayerSDK.framework/strip-frameworks.sh
. حدد "تشغيل البرنامج النصي فقط عند التثبيت". سيؤدي هذا إلى إزالة البنى غير الضرورية من الإصدار، وهو أمر مهم لتقديم متجر التطبيقات.arm64
إلى إعداد إنشاء "البنيات المستبعدة" Any iOS Simulator SDK
.كمرجع، إليك جميع مكونات SDK وعناوين URL المقابلة لمساعدتك في تحديد موقع أحدث الإصدارات وتنزيلها:
عنصر | عنوان URL |
---|---|
Brightcove-Player-Core | https://github.com/brightcove/brightcove-player-sdk-ios/tags |
Brightcove-Player-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-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 |
Brightcove-Player-Pulse | https://github.com/brightcove/brightcove-player-sdk-ios-pulse/tags |
Brightcove-Player-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
ملاحظة: يتم دعم XCFramework الديناميكي فقط لبرنامج Swift Package Manager.
يمكن استيراد 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 على عرض وحدة التحكم في التشغيل وعرض عناصر التحكم.
// 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
وتخصيص واجهة المستخدم للمشغل غير متوافقين.
يمكن ضبط الخيارات باستخدام الطريقة التالية:
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
وتخصيص واجهة المستخدم للمشغل غير متوافقين.
أولاً، قم بإنشاء عناصر التحكم التي ستدخل في تخطيطك باستخدام 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
على عنصر التحكم الخاص بـ 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 المدمجة مع Brightcove Native Player SDK، راجع دليل مشغل التلفزيون الخاص بنا.
قم بتمكين وظيفة 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 ( )