我使用AVPlayer
let url = URL(string: "http:myUrl.m3u8")
let player = AVPlayer(url: url!)
let playerLayer = AVPlayerLayer(player: player)
playerLayer.frame = videoView.bounds
playerLayer.backgroundColor = UIColor.purple.cgColor
videoView.layer.addSublayer(playerLayer)
player.play()
我需要将流式视频保存到图库。我注意到在下面的委托中保存了缓存视频路径。
func urlSession(_ session: URLSession, assetDownloadTask: AVAssetDownloadTask, didFinishDownloadingTo location: URL) {
// Do not move the asset from the download location
UserDefaults.standard.set(location.relativePath, forKey: "assetPath")
}
当我尝试使用以下代码从UserDefaults获取url路径时,
let path = UserDefaults.standard.value(forKey: "assetPath")
结果是:
的答案中找到.movpkg文件夹结构库/ com.apple.UserManagedAssets.s9Giec / video_streaming_title_3E90DD91830B8992.movpkg
扩展名为'.movpkg'
如何将视频转换为mp4并保存到图库。
movpkg
文件包含.frag
个文件。如果有任何答案提供了将.frag
文件转换为mp4文件的方法,则可以接受。
我可以从AVAsset
网址创建.movpkg
,因此问题“如何将AVAsset转换为mp4文件”的答案也可以接受。
对于任何想要帮助的人,我在这里创建了一个回购
https://github.com/trungducc/stackoverflow/tree/movpkg-to-mp4
下载完成后,您可以尝试将.movpkg
文件转换为mp4。请注意,模拟器中不支持下载HLS流,因此请在真实设备上运行repo。
答案 0 :(得分:1)
根据https://en.wikipedia.org/wiki/HTTP_Live_Streaming,这些“片段”是MPEG-2 TS片段。您可以简单地将所有这些片段连接起来,并在大多数视频播放器中播放结果,但不是将是您想要的真正的mp4文件。但是值得测试,也许生成的“ .ts”视频文件足以满足您的需求。 但这还不够好(例如,与MPEG-2 TS相比,我最喜欢的流媒体对mp4文件的处理要好得多),转换确实有意义。我通常在Linux中使用ffmpeg进行此操作:
ffmpeg -i all.ts -acodec复制-absf aac_adtstoasc -vcodec复制out.mp4
其中“ all.ts”是所有片段的连接(当然,按照正确的顺序,如m3u8中指定的那样,或者通常作为文件名的一部分),输出将转到“ out.mp4”。这种转换仅在容器中进行,不需要重新编码视频,因此非常快。
此答案可能与您要查找的内容不完全相同(不是客观的C或SWIFT代码或您可以在iPhone上运行的任何内容),但它可能会提示您要查找的内容,或者至少是您要查找的内容可以在您的桌面上进行测试。