Brightcove fournit une prise en charge active du dernier SDK iOS sur la dernière version publique des versions iOS suivantes :
Brightcove fournit une prise en charge passive pour les versions iOS suivantes :
Le SDK Core est localisé en arabe (ar), anglais (en), français (fr), allemand (de), japonais (ja), coréen (ko), espagnol (es), chinois simplifié (zh-Hans) et traditionnel. Chinois (zh-Hant). Pour bénéficier d’une localisation, votre application doit également être localisée dans la même langue et dans les mêmes paramètres régionaux. Consultez la section Localisation personnalisée pour plus d’informations.
Tous les composants du SDK (les frameworks de base et de plugin) sont publiés avec le même numéro de version. Lors de la mise à niveau d'un seul composant, mettez à niveau tous les composants vers la même version.
Pour les projets utilisant Xcode 12 sur Apple Silicon M1 et Universal Frameworks (.framework), une erreur de construction est renvoyée lors de la création du projet pour le simulateur arm64.
*ld: building for iOS Simulator, but linking in dylib built for iOS, file for architecture arm64*
Pour créer un simulateur arm64, assurez-vous arm64
a été ajouté à votre paramètre de construction « Architectures exclues » pour Any iOS Simulator SDK
dans l'onglet « Paramètres de construction » de votre application cible.
La version 6.10.0 du SDK Brightcove Player ajoute des sous-spécifications pour le noyau et chaque plugin afin de prendre en charge XCFrameworks. La valeur par défaut de chaque sous-spécification est /XCFramework
.
Nom de la spécification de pod | Noms des sous-espèces |
---|---|
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 | - |
La version 6.12.0 du SDK Brightcove Player met à jour les spécifications de podspecs Brightcove-Player-FreeWheel
et Brightcove-Player-Omniture
pour installer la version dynamique de BrightcovePlayerSDK
.
Nom de la spécification de pod | Type de cadre | Dépendance |
---|---|---|
Brightcove-Player-Core | dynamique | - |
Brightcove-Player-DAI (disponible depuis 6.12.7) | dynamique | Brightcove-Player-Core |
Brightcove-Player-FreeWheel | dynamique | Brightcove-Player-Core pour iOS, Brightcove-Player-Core pour tvOS |
Brightcove-Player-GoogleCast | statique | Brightcove-Player-Core |
Brightcove-Player-IMA | dynamique | Brightcove-Player-Core |
Brightcove-Player-Omniture | dynamique | Brightcove-Player-Core |
Brightcove-Player-Pulse | dynamique | Brightcove-Player-Core |
Brightcove-Player-SSAI | dynamique | Brightcove-Player-Core, Brightcove-Player-OpenMeasurement (uniquement pour la mesure ouverte) |
Brightcove-Player-OpenMeasurement (disponible depuis 6.10.0) | dynamique | - |
La prise en charge des vidéos protégées par FairPlay est intégrée au framework principal BrightcovePlayerSDK . Reportez-vous au guide FairPlay pour plus de détails sur l'utilisation de FairPlay avec le SDK Brightcove Native Player.
La prise en charge des sous-titres Sidecar est intégrée au framework principal BrightcovePlayerSDK . Pour plus de détails sur l'utilisation des sous-titres Sidecar avec le SDK Brightcove Native Player, reportez-vous au guide des sous-titres Sidecar.
Depuis la version 6.0.0, le SDK Brightcove Native Player vous permet de télécharger des vidéos HLS, y compris celles protégées par le cryptage FairPlay, pour les lire ultérieurement, que ce soit en ligne ou hors ligne. Reportez-vous au guide du développeur d'applications pour plus de détails :
Guide du développeur d'applications iOS pour le téléchargement de vidéos et la lecture hors ligne avec FairPlay
Le SDK Brightcove Player fournit des packages d'installation pour iOS et tvOS sous forme de bibliothèques dynamiques regroupées sous forme de Frameworks et XCFrameworks. Le déploiement est pris en charge sur iOS 12.0 et supérieur.
Vous pouvez utiliser CocoaPods pour ajouter le SDK Brightcove Player à votre projet. Vous pouvez trouver la dernière podspec Brightcove-Player-Core
ici. Le podspec prend en charge iOS et tvOS.
Lorsque vous utilisez Brightcove CocoaPods dans votre projet, ajoutez source 'https://github.com/brightcove/BrightcoveSpecs.git'
au début de votre Podfile.
nom.
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
Le Framework peut être installé en ajoutant la sous-spécification /Framework
au 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
Lors de la mise à jour de votre installation, c'est une bonne idée d'actualiser la copie locale de votre référentiel BrightcoveSpecs afin que vous disposiez localement des dernières spécifications de pod, tout comme vous mettriez à jour votre référentiel principal CococaPods. Généralement, si vous exécutez pod update
dans le terminal, cela se produira automatiquement, ou bien vous pouvez mettre à jour explicitement avec pod repo update
.
Pour ajouter manuellement le SDK Brightcove Player à votre projet :
BrightcovePlayerSDK.framework
ou BrightcovePlayerSDK.xcframework
à votre projet. Assurez-vous d'utiliser la version correspondant à votre cible, iOS ou tvOS.BrightcovePlayerSDK.framework
/ BrightcovePlayerSDK.xcframework
bash ${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}/BrightcovePlayerSDK.framework/strip-frameworks.sh
. Cochez "Exécuter le script uniquement lors de l'installation". Cela supprimera les architectures inutiles de la version, ce qui est important pour la soumission à l'App Store. Cette étape n'est plus nécessaire lors de l'utilisation de XCFramework.bash ${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}/BrightcovePlayerSDK.framework/strip-frameworks.sh
. Cochez "Exécuter le script uniquement lors de l'installation". Cela supprimera les architectures inutiles de la version, ce qui est important pour la soumission à l'App Store.arm64
a été ajouté à votre paramètre de construction « Architectures exclues » pour Any iOS Simulator SDK
.À titre de référence, voici tous les composants du SDK et les URL correspondantes pour vous aider à localiser et télécharger les dernières versions :
Composant | 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 |
Pour ajouter le SDK Brightcove Player à votre projet avec Swift Package Manager :
https://github.com/brightcove/brightcove-player-sdk-ios.git
Remarque : seul le XCFramework dynamique est pris en charge pour Swift Package Manager.
Le SDK Brightcove Player pour iOS peut être importé en utilisant :
import BrightcovePlayerSDK;
Lecture de vidéo avec le SDK Brightcove Player pour 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 ( )
}
}
Vous devez empêcher le contrôleur d'être automatiquement libéré à la fin de la méthode. Une manière courante de procéder consiste à stocker une référence au contrôleur dans une variable d'instance forte.
Depuis la version 5.1.0, Brightcove PlayerUI est entièrement intégré au framework Core SDK. PlayerUI fournit un ensemble complet de commandes pour la lecture et la publicité, dès la sortie de la boîte.
Le PlayerUI est rapide à configurer, affiche les contrôles publicitaires pour SSAI, Pulse et FreeWheel et peut être personnalisé en créant vos propres mises en page.
Suivez les instructions ci-dessous pour configurer les contrôles PlayerUI.
Créez une propriété dans votre UIViewController pour garder une trace de BCOVPUIPlayerView. Le BCOVPUIPlayerView contiendra à la fois la vue du contrôleur de lecture et la vue des contrôles.
// PlayerUI's Player View
var playerView : BCOVPUIPlayerView ?
Créez le BCOVPUIBasicControlView, puis le BCOVPUIPlayerView. C'est là que nous associons le contrôleur de lecture (et donc toutes les vidéos qu'il lit) aux commandes.
// 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 )
}
Vous devrez configurer la mise en page pour la vue du joueur, vous pouvez le faire avec la mise en page automatique ou l'ancienne approche Springs & Struts.
Définissez la vue du lecteur pour qu'elle corresponde au conteneur vidéo de votre mise en page ( videoView
) lors de son redimensionnement.
playerView . frame = videoView . bounds
playerView . autoresizingMask = [ . flexibleHeight , . flexibleWidth ]
Définissez translatesAutoresizingMaskIntoConstraints
sur BCOVPUIPlayerView sur false
.
playerView . translatesAutoresizingMaskIntoConstraints = false
Ajoutez ensuite les contraintes pour la mise en page ; définir les ancres supérieure, droite, gauche et inférieure de votre BCOVPUIPlayerView pour qu'elles soient égales à celles de 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 )
] )
La classe BCOVPUIPlayerViewOptions
vous permet de personnaliser certains comportements de BCOVPlayerUI lors de l'initialisation. Vous pouvez personnaliser les éléments suivants :
jumpBackInterval
Le temps en secondes pendant lequel le joueur recherchera en arrière lorsque le bouton de retour en arrière est enfoncé.
hideControlsInterval
Le temps en secondes après le dernier événement tactile, avant que les contrôles soient masqués.
hideControlsAnimationDuration
Le temps en secondes nécessaire pour que les contrôles s'animent et deviennent masqués.
showControlsAnimationDuration
Le temps en secondes nécessaire pour que les contrôles s'animent et deviennent visibles.
learnMoreButtonBrowserStyle
Paramètre qui détermine si le fait d'appuyer sur le bouton "En savoir plus" sur une annonce affichera le lien de clic dans un navigateur externe (paramètre par défaut) ou dans un navigateur interne.
presentingViewController
La sous-classe UIViewController à utiliser pour présenter d'autres contrôleurs de vue (comme le contrôleur de vue de sélection de sous-titres codés).
automaticControlTypeSelection
Indique si vous souhaitez ou non que BCOVPUIPlayerView
sélectionne automatiquement un type BCOVPUIBasicControlView
en fonction du type de média. Lorsque cette valeur est définie sur true
la propriété BCOVPUIBasicControlView
transmise à l'initialiseur BCOVPUIPlayerView
sera ignorée.
Flux vidéo + audio
basicControlViewWithVODLayout
basicControlViewWithLiveLayout
basicControlViewWithLiveDVRLayout
Flux audio uniquement
basicControlViewWithAODLayout
basicControlViewWithLiveAudioLayout
basicControlViewWithLiveDVRAudioLayout
REMARQUE : automaticControlTypeSelection
choisit les mises en page parmi celles fournies par BCOVPlayerUI, et ainsi, les contrôles et mises en page personnalisés seront écrasés ; automaticControlTypeSelection
et la personnalisation de l’interface utilisateur du lecteur sont incompatibles.
Les options peuvent être définies en utilisant la méthode suivante :
let manager = BCOVPlayerSDKManager . sharedManager ( )
let playbackController = manager . createPlaybackController ( )
let options = BCOVPUIPlayerViewOptions ( )
options . jumpBackInterval = 5
let playerView = BCOVPUIPlayerView ( playbackController : playbackController ,
options : options )
Trois mises en page sont fournies pour prendre en charge différents types de vidéo :
BCOVPUIControlLayout basicVODControlLayout
est une présentation de base pour les flux vidéo généraux à la demande.
BCOVPUIControlLayout basicLiveControlLayout
est une mise en page pour la vidéo en direct.
BCOVPUIControlLayout basicLiveDVRControlLayout
est une mise en page pour les flux vidéo en direct avec des commandes DVR.
Vous définissez généralement une nouvelle mise en page immédiatement après la création de votre BCOVPUIPlayerView
, mais vous pouvez également définir une nouvelle mise en page à tout moment. Par exemple, vous pouvez définir une nouvelle mise en page VOD comme celle-ci :
playerView ? . controlsView . layout = BCOVPUIControlLayout . basicVOD ( )
En plus des mises en page par défaut, vous pouvez créer vos propres mises en page hautement personnalisées en instanciant un nouveau BCOVPUIControlLayout
avec votre propre conception. Notez cependant que automaticControlTypeSelection
choisit les mises en page parmi celles fournies par BCOVPlayerUI et que les contrôles et mises en page personnalisés seront donc écrasés ; automaticControlTypeSelection
et la personnalisation de l’interface utilisateur du lecteur sont incompatibles.
Tout d’abord, créez les contrôles qui iront dans votre mise en page à l’aide de BCOVPUIBasicControlView layoutViewWithControlFromTag:width:elasticity:
. Chaque contrôle est regroupé dans un BCOVPUILayoutView
qui détermine l'espacement des contrôles.
Vous pouvez définir la width
de chaque affichage de mise en page sur la largeur par défaut (qui dépend du type de contrôle) ou vous pouvez spécifier votre propre largeur.
Utilisez l’argument elasticity
pour déterminer dans quelle mesure la vue de présentation contenant le contrôle adapte sa largeur pour remplir la barre de contrôle.
Voici des exemples de création d’une variété de contrôles de base.
// 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 )
Notez que vous pouvez également créer une vue de mise en page vide, dans laquelle vous pouvez placer votre propre vue (logo, contrôle, rien, etc.). Ce code montre comment placer un logo UIImage
dans le logoLayoutView1 que nous avons créé ci-dessus.
// 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 )
Maintenant qu'il existe différents contrôles regroupés dans des vues de mise en page, ils sont classés dans des tableaux, dont chacun représente une seule ligne de contrôles, c'est-à-dire une barre de contrôle. Notez que vous pouvez avoir différentes dispositions pour les orientations portrait et paysage, vous configurerez donc généralement deux tableaux différents de barres de contrôle.
Dans la disposition standard pour l’orientation paysage, les contrôles sont disposés dans un seul tableau, puis ce tableau est stocké dans un autre tableau représentant l’ensemble des contrôles.
let standardLayoutLine1 = [
playbackLayoutView ,
jumpBackButtonLayoutView ,
currentTimeLayoutView ,
timeSeparatorLayoutView ,
durationLayoutView ,
progressLayoutView ,
spacerLayoutView1 ,
logoLayoutView1 ,
spacerLayoutView2 ,
closedCaptionLayoutView ,
screenModeLayoutView ,
externalRouteLayoutView
]
let standardLayoutLines = [ standardLayoutLine1 ]
Dans la disposition compacte pour l’orientation portrait, deux tableaux de contrôles sont créés, un pour chaque ligne. Ces tableaux sont regroupés dans un autre tableau représentant la disposition compacte.
Notez que exactement les mêmes objets sont utilisés pour la plupart des contrôles de chaque disposition. Lorsque cela est fait et que vous basculez entre les orientations portrait et paysage, l'objet sera déplacé vers sa nouvelle position à l'aide d'une animation fluide.
let compactLayoutLine1 = [
currentTimeLayoutView ,
progressLayoutView ,
durationLayoutView
]
let compactLayoutLine2 = [
playbackLayoutView ,
jumpBackButtonLayoutView ,
spacerLayoutView1 ,
closedCaptionLayoutView ,
screenModeLayoutView ,
externalRouteLayoutView ,
logoLayoutView2
]
let compactLayoutLines = [
compactLayoutLine1 ,
compactLayoutLine2
]
Enfin, maintenant qu'il existe deux configurations de mise en page (une pour la pleine largeur et une pour la largeur compacte), vous pouvez créer un nouvel objet BCOVPUIControlLayout
et le définir dans la vue de contrôle du lecteur.
let customLayout = BCOVPUIControlLayout . init ( standardControls : standardLayoutLines ,
compactControls : compactLayoutLines )
playerView ? . controlsView . layout = customLayout
Si vous avez des contrôles que vous devez afficher ou masquer fréquemment, vous pouvez définir la propriété removed
dans la vue Mise en page de ce contrôle. Lorsque vous avez modifié vos contrôles, appelez setNeedsLayout
sur le controlView de playerView :
logoLayoutView1 ? . isRemoved = true
playerView ? . controlsView . setNeedsLayout ( )
Vous pouvez également personnaliser plusieurs propriétés générales BCOVPUIControlLayout
:
controlBarHeight
définit la taille de chaque ligne de contrôles.horizontalItemSpacing
définit l'espacement entre chaque BCOVPUILayoutView
dans chaque barre de contrôle.compactLayoutMaximumWidth
détermine quel ensemble de contrôles est utilisé. Si la vue de contrôle est plus petite que compactLayoutMaximumWidth
, l’ensemble de contrôles compact sera utilisé, sinon les contrôles standard seront utilisés. Pour modifier l'ensemble des contrôles affichés, vous devez créer et installer un nouveau BCOVPUIControlLayout
. De nouveaux contrôles peuvent être installés à tout moment.
Pour plus d'exemples de personnalisation de PlayerUI, vous pouvez consulter l'exemple de code dans le dossier PlayerUI du référentiel BrightcoveOS GitHub :
https://github.com/BrightcoveOS/ios-player-samples
Le SDK Brightcove Native Player comprend des commandes intégrées pour la lecture dans tvOS sur Apple TV. Pour plus de détails sur l'utilisation de l'interface utilisateur intégrée du lecteur TV avec le SDK Brightcove Native Player, consultez notre guide du lecteur TV.
Activez la fonctionnalité AirPlay en définissant la propriété setAllowsExternalPlayback
sur votre BCOVPlaybackController
sur true
. Le bouton AirPlay sera affiché dans les commandes de lecture si des appareils AirPlay sont trouvés sur votre réseau.
Actuellement, IMA est le seul plugin publicitaire qui prend en charge AirPlay et uniquement lors de l'utilisation d'annonces pré-roll et/ou post-roll. L'utilisation d'AirPlay avec les plugins publicitaires Pulse, SSAI ou FreeWheel peut entraîner un comportement inattendu.
Si vous souhaitez également prendre en charge AirPlay 2 et permettre la sélection de plusieurs appareils pour la sortie audio, vous devrez effectuer quelques opérations supplémentaires. Tout d’abord, vous devrez configurer AVAudioSession afin de pouvoir définir le routeSharingPolicy
. Par exemple:
do {
try AVAudioSession . sharedInstance ( ) . setCategory ( . playback , mode : . moviePlayback , policy : . longFormVideo )
} catch {
print ( " Error setting AVAudioSession category " )
}
Vous devrez également configurer au moins une commande de lecture via MPRemoteCommandCenter
. À tout le moins, vous souhaiterez configurer à la fois pauseCommand
et playCommand
. Par exemple:
let center = MPRemoteCommandCenter . shared ( )
center . pauseCommand . addTarget { _ in
playbackController . pause ( )