【问题标题】:NSData 2 Video URL?NSData 2 视频网址?
【发布时间】:2016-01-28 06:02:05
【问题描述】:

需要将视频文件转换为 NSData,然后再转换回可播放的 URL。 NSData 部分如下:

let videoNSD = NSData(contentsOfURL: videoPreview!)
// videoNSD is uploaded to cloud and then retrieved.. 

func playNSDataVideoPreview(videoNSD: NSData)
{
    // how to play in AVPlayer?
    let playerController = AVPlayerViewController()

    let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
    let documentsDirectory = paths[0]

    let filePath = documentsDirectory + "/" + "nsdfile-1234.mp4"
    let nsdURL = NSURL(fileURLWithPath: filePath)

    videoNSD.writeToURL(nsdURL, atomically: true)

    mediaPlayer = AVPlayer(URL: nsdURL)
    playerController.player = mediaPlayer

    mediaPlayer.play()
}

在 AVPlayer 中播放的最佳做法是什么?

谢谢...

【问题讨论】:

  • 视频太大怎么办?不只是 RAM 吗?
  • 这适用于小型 sn-p 视频。我将添加代码以限制..感谢您的提醒..
  • 最好下载为文件,然后在播放器中从文件中打开
  • 同意.. 如何将 NSData 文件转换为 AVPlayer 可用的格式?

标签: nsdata nsurl


【解决方案1】:

首先,我建议上传/下载为文件(来自文件句柄)而不是数据(NSData),因为视频可能比 RAM 大(想象一部电影)。

要使用 Alamofire 下载文件,您可以使用来自 https://github.com/Alamofire/Alamofire#downloading 的示例代码

Alamofire.download(.GET, "http://httpbin.org/stream/100") { temporaryURL, response in
    let fileManager = NSFileManager.defaultManager()
    let directoryURL = fileManager.URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)[0]
    let pathComponent = response.suggestedFilename

    return directoryURL.URLByAppendingPathComponent(pathComponent!)
}

下载有文件后,可以直接使用AVPlayer(URL URL: NSURL)

如果您只有视频的 NSData 并想播放它,请先将其保存为文件,然后使用您保存的 URL(文件位置)创建 AVPlayer

YOURVIDEODATA.writeToURL(URL_WHERE_TO_SAVE,atomically: true)

然后再次使用AVPlayer(URL: URL_WHERE_TO_SAVE)

【讨论】:

    猜你喜欢
    • 2016-12-30
    • 2013-09-10
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多