- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在使用 AVPlayer
流式传输视频 (.m3u8)
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()
我需要将流媒体视频保存到画廊。我注意到在下面的委托(delegate)中保存了缓存视频路径。
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 的答案中找到了 .movpkg 文件夹结构
扩展名是 '.movpkg'
如何将视频转换为 mp4 并保存到图库。
movpkg
文件包含.frag
文件。如果有任何答案提供了一种将 .frag
文件转换为 mp4 文件的方法,这是可以接受的。
我可以从 .movpkg
url 创建一个 AVAsset
,所以“How to convert AVAsset to mp4 file”这个问题的答案也可以接受。
对于任何想要帮助的人,我在这里创建了一个 repo
https://github.com/trungducc/stackoverflow/tree/movpkg-to-mp4
您可以尝试在下载完成后将.movpkg
文件转换为mp4。请注意,模拟器不支持下载 HLS 流,因此请在真实设备上运行 repo。
最佳答案
根据 https://en.wikipedia.org/wiki/HTTP_Live_Streaming ,那些“片段”是 MPEG-2 TS 片段。您可以简单地连接所有这些片段并在大多数视频播放器中播放结果,但它不是您想要的真正的 mp4 文件。但值得测试,也许生成的“.ts”视频文件足以满足您的需求。但它还不够好(例如,我最喜欢的 streamer 使用 mp4 文件比使用 MPEG-2 TS 效果更好),转换确实有意义。我通常在 Linux 中使用 ffmpeg 执行此操作:
ffmpeg -i all.ts -acodec copy -absf aac_adtstoasc -vcodec copy out.mp4
其中“all.ts”是所有片段的串联(当然,按照 m3u8 中指定的正确顺序或通常作为文件名的一部分),输出将转到“out.mp4”。此转换仅与容器一起播放,不需要重新编码视频,因此速度非常快。
这个答案可能不完全是你要找的东西(它不是 objective-C 或 Swift 代码或任何你可以在你的 iPhone 上运行的代码)但也许它会提示你要寻找什么,或者至少是一些东西您可以在桌面上进行测试。
关于ios - 如何将 .movpkg 转换成 mp4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47052154/
我是一名优秀的程序员,十分优秀!