J'utilise l'implémentation de Fairplay selon l'exemple de code Fairplay Streaming d'Apple au https://developer.apple.com/streaming/fps/, bien que j'ai essayé de ne choisir que les parties liées à la diffusion en ligne Fairplay, pas la persistance/lecture hors ligne. Dans le code ci-dessous une vidéo sans Fairplay joue/pause/recherche normalement, mais quand je joue une vidéo protégée par Fairplay, seule la piste vidéo se comporte correctement. La suspension de la lecture n'arrêtera pas la lecture audio, la modification de la piste audio n'arrêtera pas la piste audio précédente, donc les deux jouent ensemble et peut-être que la recherche ne fonctionne pas non plus.AVPlayer Fairplay HLS n'arrêtera pas la lecture audio lorsque la vidéo est en pause
Outre cette classe d'aide ci-dessous, j'ai AssetLoaderDelegate
et AssetPlaybackManager
à partir de l'exemple de code client d'Apple FairPlay Streaming Server SDK https://developer.apple.com/streaming/fps/ et je l'ai mis à jour le code pour gérer la CPS/CKC pour notre fournisseur de clés DRM. Ai-je manqué d'implémenter une partie importante du code pour gérer l'audio pour le streaming FPS? Pouvez-vous s'il vous plaît me diriger dans la bonne direction? Merci beaucoup.
class PlayHelper {
static let shared = PlayHelper()
fileprivate var playerViewController: PlayerViewController?
init() {
AssetPlaybackManager.sharedManager.delegate = self
}
// Play video without DRM
func playVideo(from urlString: String, at context: UIViewController) {
guard let videoURL = URL(string: urlString) else {
Log.error("Video URL can't be created from string: \(urlString)")
return }
let player = AVPlayer(url: videoURL)
let playerViewController = PlayerViewController()
playerViewController.player = player
context.present(playerViewController, animated: true) {
playerViewController.player?.play()
}
}
// Play FPS video
func playFpsVideo(with asset: AVURLAsset, at context: UIViewController) {
// Cleanup, should be done when playerViewController is actually dismissed
if self.playerViewController != nil {
// The view reappeared as a results of dismissing an AVPlayerViewController.
// Perform cleanup.
AssetPlaybackManager.sharedManager.setAssetForPlayback(nil)
self.playerViewController?.player = nil
self.playerViewController = nil
}
let item = AVPlayerItem(asset: asset)
let player = AVPlayer(playerItem: item)
// Customize player
player.appliesMediaSelectionCriteriaAutomatically = true
let playerViewController = PlayerViewController()
playerViewController.player = player
self.playerViewController = playerViewController
context.present(playerViewController, animated: true) {
playerViewController.player?.play()
}
}
// Stop video
func stop() {
// Cleanup, should be done when playerViewController is dismissed
if self.playerViewController != nil {
// Results of dismissing an AVPlayerViewController, perform cleanup
AssetPlaybackManager.sharedManager.setAssetForPlayback(nil)
self.playerViewController?.player = nil
self.playerViewController = nil
}
}
}
// MARK: - Extend `PlayHelper` to conform to the `AssetPlaybackDelegate` protocol
extension PlayHelper: AssetPlaybackDelegate {
func streamPlaybackManager(_ streamPlaybackManager: AssetPlaybackManager, playerReadyToPlay player: AVPlayer) {
player.play()
}
func streamPlaybackManager(_ streamPlaybackManager: AssetPlaybackManager, playerCurrentItemDidChange player: AVPlayer) {
guard let playerViewController = playerViewController, player.currentItem != nil else { return }
playerViewController.player = player
}
}
Je peux aussi fournir le code dans AssetLoaderDelegate
et AssetPlaybackManager
si nécessaire.
Je veux que le code joue au contenu FairPlay dans l'application iOS. Pourriez-vous s'il vous plaît m'aider à résoudre le problème? – Saty
Il existe un bon exemple de code de l'application client fournie par Apple dans le cadre du SDK Fairplay Streaming Server: https://developer.apple.com/streaming/fps/ Cela devrait être votre point de départ. –
@MartinKoles: Je ne parviens pas à télécharger l'exemple de code à partir de developer.apple.com/streaming/fps, car il montre une erreur interdite. Nous essayons de mettre en œuvre un lecteur qui devrait fonctionner à travers les navigateurs et il devrait jouer le contenu crypté. Je voudrais savoir les détails comme ce que nous devons faire quand nous obtenons l'événement «WebKitNeedKey», pouvons-nous ignorer le deuxième événement WebKitNeedKey. Pourriez-vous s'il vous plaît fournir l'exemple de code si vous avez? – kadina