我正在使用.m3u8播放视频( 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")
结果是:
Library/com.apple.UserManagedAssets.s9Giec/video_streaming_title_3E90DD91830B8992.movpkg
我在this question的答案中找到了this question文件夹结构
扩展为'.movpkg'
,如何将视频转换为mp4并保存到图片库。
备注
movpkg
文件包含.frag
文件。如果有任何答案,则可以接受提供将.frag
文件转换为mp4文件的方法。AVAsset
url中创建一个.movpkg
,因此对于“如何将AVAsset转换为mp4文件”的问题的回答也可能是可以接受的。对于任何想帮忙的人,我在这里创建了一个回购程序
https://github.com/trungducc/stackoverflow/tree/movpkg-to-mp4
下载完成后,您可以尝试将.movpkg
文件转换为mp4文件。请注意,在模拟器中不支持下载HLS流,因此请在实际设备上运行repo。
发布于 2019-04-10 12:37:07
根据Streaming的说法,这些“片段”是MPEG-2 TS片段.您可以简单地连接所有这些片段并在大多数视频播放器中播放结果,但它将而不是成为您想要的真正的mp4文件。但这是值得测试的,也许产生的".ts“视频文件足够满足您的需要。但是它还不够好(例如,我最喜欢的流线器在mp4文件中的工作要比使用MPEG-2 TS好得多),所以进行转换是有意义的。我通常在Linux中这样做,使用ffmpeg:
ffmpeg -i all.ts -acodec copy -absf aac_adtstoasc -vcodec copy out.mp4
其中"all.ts“是所有片段的连接(当然,按照m3u8中指定的顺序,或者通常作为文件名的一部分),输出将转到"out.mp4”。这种转换只是对容器进行播放,不需要重新编码视频,所以它非常快。
这个答案可能不是你想要的(它不是客观的C或者Swift代码,或者你可以在你的iPhone上运行的任何东西),但也许它会给你一个提示,你要寻找什么,或者至少你可以在桌面上测试一些东西。
https://stackoverflow.com/questions/47052154
复制相似问题