AppleのFairplayストリーミングサンプルコードhttps://developer.apple.com/streaming/fps/でFairplayの実装を使用していますが、オンラインフェアプレーストリーミングに関連する部分のみを選択しようとしました。オフライン再生。以下のコードでは、Fairplayのないビデオは通常再生/一時停止/シークしますが、Fairplayの保護されたビデオを再生すると、ビデオトラックのみが正しく動作します。AVPlayer Fairplay HLSは、ビデオが一時停止してもオーディオ再生を停止しません
再生を一時停止してもオーディオ再生は停止しません。オーディオトラックを変更しても前のオーディオトラックは停止しないため、両方が一緒に再生され、シークも機能しません。
以下、このヘルパークラスのほかに、私はFairPlayのストリーミングサーバSDK https://developer.apple.com/streaming/fps/のAppleのクライアントのサンプルコードからAssetLoaderDelegate
とAssetPlaybackManager
を持っていると私はDRMキープロバイダのためのSPC/CKCを処理するコードを更新しました。
FPSストリーミング用のオーディオを処理するコードの重要な部分を実装していませんでしたか?私を正しい方向に向けることができますか?どうもありがとう。
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
}
}
また、必要に応じてAssetLoaderDelegate
とAssetPlaybackManager
にコードを提供することもできます。
iOSアプリケーションでFairPlayコンテンツを再生するコードが必要です。あなたは問題を解決するのに私を助けてくれますか? – Saty
Fairplay Streaming Server SDKの一部としてAppleが提供するクライアントアプリケーションのサンプルコードがあります:https://developer.apple.com/streaming/fps/これが出発点です。 –
@MartinKoles:禁止されているエラーが表示されているため、developer.apple.com/streaming/fpsからサンプルコードをダウンロードすることができません。私たちは、ブラウザを越えて動作するはずのプレーヤを実装しようとしており、暗号化されたコンテンツを再生する必要があります。私は 'WebKitNeedKey'イベントを取得したときに行う必要があるような詳細を知りたいので、2番目のWebKitNeedKeyイベントを無視できますか?もしあなたが持っている場合は、サンプルコードを提供していただけますか? – kadina