【问题标题】:How to play video with cookies content in iOS using AVPlayer in Swift?如何在 Swift 中使用 AVPlayer 在 iOS 中播放带有 cookie 内容的视频?
【发布时间】:2018-02-21 06:05:20
【问题描述】:

我已使用以下实现从服务器播放带有 cookie 内容的视频,但它显示带有交叉线的播放图标。我已经参考了link 并迅速进行了以下实施。但我没有得到任何输出:(

func showVideo(url: String) {
  let videoURL = NSURL(string: url)
  var cookiesArray = [HTTPCookie]()
  guard let cookieArray = UserDefaults.standard.array(forKey: 
  Constants.Object.kCookie) as? [[HTTPCookiePropertyKey: Any]] else { 
  return }

  for cookieProperties in cookieArray {
    if let cookie = HTTPCookie(properties: cookieProperties) {
      cookiesArray.append(cookie)
    }
  } 
  let cookieArrayOptions = [AVURLAssetHTTPCookiesKey: cookiesArray]
  let assets = AVURLAsset(url: videoURL! as URL, options: cookieArrayOptions)
  let item = AVPlayerItem(asset: assets)
  videoPlayer = AVPlayer(playerItem: item)

  self.playerController.player =  self.videoPlayer 
  self.playerController.view.frame = self.view.frame
  self.present(self.playerController, animated: true, completion: nil)
  self.playerController.player?.play()
 }

请帮助我,该实现有什么问题。

提前致谢! :)

【问题讨论】:

    标签: cookies swift3 video-streaming avplayer avplayerviewcontroller


    【解决方案1】:

    经过这么多方法,我终于找到了适合我的解决方案:

         func showVideo(url: String) {
          let videoURL = NSURL(string: url)
          let cookiesArray = HTTPCookieStorage.shared.cookies! //Stored Cookies of your request
          let values = HTTPCookie.requestHeaderFields(with: cookiesArray)// Returns a dictionary of header fields corresponding to a provided array of cookies.ex.["Cookie":"your cookies values"]
          let cookieArrayOptions = ["AVURLAssetHTTPHeaderFieldsKey": values]
          let assets = AVURLAsset(url: videoURL! as URL, options: cookieArrayOptions)
          let item = AVPlayerItem(asset: assets)
          videoPlayer = AVPlayer(playerItem: item)
    
          self.playerController.player =  self.videoPlayer 
          self.playerController.view.frame = self.view.frame
          self.present(self.playerController, animated: true, completion: nil)
          self.playerController.player?.play()
         }
    

    【讨论】:

    • 当我在 iOS 13.5.1 上遵循这个答案时,我遇到了崩溃。我可以通过跳过对 requestHeaderFields 的调用来修复它。简而言之,它看起来像这样:
    • var options: [String: Any] = [:] if let cookies = HTTPCookieStorage.shared.cookies { options[AVURLAssetHTTPCookiesKey] = cookies } let assets: AVURLAsset = .init(url: url, options :选项)让项目:AVPlayerItem = .init(资产:资产)
    猜你喜欢
    • 2017-10-08
    • 1970-01-01
    • 1970-01-01
    • 2022-02-03
    • 2014-11-02
    • 1970-01-01
    • 2015-07-26
    • 2017-02-23
    • 1970-01-01
    相关资源
    最近更新 更多