如何将.movpkg转换为mp4

问题描述 投票:10回答:1

我正在使用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()

我需要将流媒体视频保存到图库。我注意到在下面的委托中保存了缓存视频路径。

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")

结果是:

图书馆/ com.apple.UserManagedAssets.s9Giec / video_streaming_title_3E90DD91830B8992.movpkg

我在this question的答案中找到.movpkg文件夹结构

扩展名为'.movpkg'如何将视频转换为mp4并保存到图库。

注意

  • movpkg文件包含.frag文件。如果有任何答案提供了将.frag文件转换为mp4文件的方法,这是可以接受的。
  • 我可以从AVAsset url创建一个.movpkg,所以问题“如何将AVAsset转换为mp4文件”的答案也可以接受。

对于任何想要帮助的人,我在这里创建了一个回购

https://github.com/trungducc/stackoverflow/tree/movpkg-to-mp4

下载完成后,您可以尝试将.movpkg文件转换为mp4。请注意,模拟器中不支持下载HLS流,因此请在真实设备上运行repo。

ios objective-c swift hls
1个回答
1
投票

根据https://en.wikipedia.org/wiki/HTTP_Live_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上运行的任何东西),但它可能会给你一个提示要找的东西,或者至少你可以测试的东西你的桌面。

© www.soinside.com 2019 - 2024. All rights reserved.