【问题标题】:Load Avplayer with large amount of data (decrypted output of a local file)加载大量数据的 Avplayer(本地文件的解密输出)
【发布时间】:2021-03-31 11:23:36
【问题描述】:

我正在使用以下代码解密 VideoFile.mp4(CTR/Nopadding 加密文件)并在 Avplayer 中播放。 此代码适用于小文件。但是由于内存问题,它对于大视频文件会崩溃。

如何解决这个问题。请帮忙

guard let content = Bundle.main.url(forResource: "videoFile", withExtension: "mp4") else{
                return
            }
 
  let vidoeData = NSData(contentsOf: content)!
            
   let vidoeDatadencrypted = vidoeData.decryptData(vidoeData as Data, withKey: aeskey.data(using: .utf8))
    
    let tmpFileURL1 = URL(fileURLWithPath:NSTemporaryDirectory()).appendingPathComponent("video").appendingPathExtension("mp4")
            let wasFileWritten1 = (try? vidoeDatadencrypted!.write(to: tmpFileURL1, options: [.atomic])) != nil
    
   if wasFileWritten1{
    let player = AVPlayer(url: tmpFileURL1)
    let playerLayer = AVPlayerLayer(player: player)
    playerLayer.frame = self.view.bounds
    self.view.layer.addSublayer(playerLayer)
    player.play()
   }

更新:

能够使用上述共享代码为较小的文件实现此目标。

如何使用 NSStream 加载 avplayer?

【问题讨论】:

    标签: ios aes avplayer nsstream


    【解决方案1】:

    您需要使用 InputStream 打开文件,将数据块传递给 CommonCrypto lib,将输出块写入 OutputStream 并重复直到文件结束。

    我没有看到任何这样做的指南,但作为参考,我为您找到了几个示例:firstsecondthird

    相关问题可以查看:firstsecond

    【讨论】:

    • 您能否分享代码示例 - 解密一个非常大的文件而不会导致内存崩溃。
    • 它不能在几行中完成。我没有这样的代码,写起来至少需要3-4个小时,但我在答案中提到的例子应该足以实现它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-13
    • 2018-12-19
    • 1970-01-01
    • 2012-03-23
    相关资源
    最近更新 更多