Tag: avkit

用AirPlay 2播放AES加密影片的坑

TL; DR 如果在透过Airplay 2播放AES加密影片的时候,发现无法正确的呼叫到实作的AVAssetResourceLoaderDelegate,以至于没有正确加入授权(存取凭证)而无法下载影片播放时,只需重新读取的HLS影片来源URL scheme客制化即可。 前言 为了防止正版影片被盗用,影片在传输前就会先加密好,才传送给使用者端解密,观看。常用的保护方式如透过数位版权管理(DRM),或依据进阶加密标准(高级加密标准,AES)加密,而这篇文章就是谈谈在客户端AES解密影片时用AirPlay2投影所遇到的坑! 使用AVAssetResourceLoaderDelegate AVAssetResourceLoaderDelegate(后面简化成“ ARL委托”)是Apple的AVKit中读取到AVURLAsset资源时,通知应用程序端处理的委派模式(代理模式)。理论上,当AVKit需要您的应用程序“植入”去读取资源(影片,m3u8档案或字幕档案)时,就会去呼叫resourceLoader(_:shouldWaitForLoadingOfRequestedResource :),这时候app就可以加入读取所需的授权验证(例如:auth token),来让你的服务端能够验证您的资源读取需求,并回传你所需要的资源档案。 替换成客制化方案的流程: 读取master播放列表(master.m3u8) 让一开始读取的master.m3u8 URL方案在应用端从https cplp成cplp ( https://example.com/master.m3u8 –> cplp ://example.com/master.m3u8),而因为这个客制化的cplp URL方案,就会让ARL委托被触发,并通过resourceLoader(_:shouldWaitForLoadingOfRequestedResource :)能够被顺利的调用到,但这里只需要去获得master.m3u8档案并回传给loadingRequest即可,不需要其他的处理。 注意:若不确定原始先使用的协议会是 http 或 https 的话,可以通过“加入前缀”的方式去改成客制化sheme,例如在scheme前面加上 my ,则 http 就会变成 myhttp ,而 https 就会变成 myhttps 。如此一来,想要还原原本的方案,只需要可移除的前缀即可。 读取index播放列表(index.m3u8) 因为master.m3u8的URL被窜改成客制化的URL方案,所以一来根据HLS(http live stream)的规则,master中的index.m3u8连结也就会自动变成cplp://example.com/index .m3u8,并且成功让ARL代表也被呼叫。 但因为密钥将链接放置在index.m3u8的缘故,则​​需要更进一步的将成为“#EXT-X-KEY:METHOD = AES-128,URI =” https://example.com/key “”给换成“#EXT-X-KEY:METHOD = AES-128,URI =” ckey ://example.com/key””(注意这里的自定义方案“ […]

AVPlayerViewController不播放本地video

我在我的项目中添加了一个DemoVideo.mp4,并将其添加到复制资源文件。 但是,当我运行该应用程序,它不会播放我的video。 这是我的方法。 private func setUpAndPlayVideo() { guard let videoPath = Bundle.main.path(forResource: "DemoVideo.mp4", ofType: nil) else { return } let videoURL = NSURL(string: videoPath) let player = AVPlayer(url: videoURL! as URL) playerViewController = AVPlayerViewController() playerViewController.player = player playerViewController.view.frame = self.videoPlayerView.bounds self.videoPlayerView.addSubview(playerViewController.view) playerViewController.showsPlaybackControls = false playerViewController.player?.play() } 我在viewDidAppear方法中调用此方法,但它显示此。

iPhone模拟器播放video,真正的设备不会

我正在Xcode 7.2上的Swift中构build一个应用程序 我添加了一个video到我的ViewController。 代码如下: import UIKit import AVKit import AVFoundation class GymViewController: UIViewController { var playerViewController = AVPlayerViewController() var playerView = AVPlayer() let fileFemaleURL = NSURL(fileURLWithPath:"/Users/marienkoen/Documents/AppDevelopment/ROZsport/ROZsport/GymFemale-2434.m4v") override func viewDidLoad() { super.viewDidLoad() } @IBAction func playButtonPressed(sender: AnyObject) { playerView = AVPlayer(URL: fileFemaleURL) playerViewController.player = playerView self.presentViewController(playerViewController, animated: true){ self.playerViewController.player?.play() } 在模拟器中运行应用程序时,我可以播放此video,但在真实设备上无法运行。 我在这里错过了什么?

AVPlayerViewController使用纯audioAVPlayer

刚开始与AVKit,我想播放一些audio。 在Mastering Modern Media Playback中使用新的AVPlayerViewController会很好,所以我有一个现成的播放/暂停/searchUI。 我基本上有一个容器视图的故事板,有一个embedded到AVPlayerViewController的segue。 然后我使用: override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { if (segue.identifier == "embedAudio") { var playerViewController:AVPlayerViewController = segue.destinationViewController as AVPlayerViewController playerViewController.player = AVPlayer(URL: NSURL(string: "http://dts.podtrac.com/redirect.mp3/files.serialpodcast.org/sites/default/files/podcast/1420057326/serial-s01-e01.mp3")) } } 它embedded很好,并播放,但它有一个大的黑色的QuickTime符号video将是。 我想知道是否有办法让它看起来更像音乐或播客应用程序。