Apple Fairplay Streaming 샘플 코드 (https://developer.apple.com/streaming/fps/)로 Fairplay 구현을 사용하고 있습니다. 온라인 페어 플레이 스트리밍과 관련된 부분 만 선택하려고했으나 지속성/오프라인 재생. 아래 코드에서 Fairplay가없는 비디오는 정상적으로 재생/일시 정지/탐색하지만, Fairplay 보호 된 비디오를 재생하면 비디오 트랙 만 올바르게 동작합니다.AVPlayer Fairplay HLS가 비디오 일시 중지시 오디오 재생을 멈추지 않습니다.
재생을 일시 중지해도 오디오 재생이 중지되지 않으며 오디오 트랙을 변경해도 이전 오디오 트랙이 중지되지 않으므로 둘 다 함께 재생되며 검색도 작동하지 않습니다.
아래의 도우미 클래스 외에도 Apple 클라이언트의 FairPlay Streaming Server SDK https://developer.apple.com/streaming/fps/에서 제공하는 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'이벤트를 얻을 때해야 할 일과 같은 세부 사항을 알고 싶습니다. 두 번째 WebKitNeedKey 이벤트를 무시할 수 있습니까? 샘플 코드를 제공해 주시겠습니까? – kadina