【问题标题】:How to convert .movpkg to mp4如何将 .movpkg 转换为 mp4
【发布时间】:2017-11-01 09:54:25
【问题描述】:

我正在使用 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 文件的方法,这是可以接受的。

  • 我可以从.movpkg url 创建一个AVAsset,因此问题“如何将 AVAsset 转换为 mp4 文件”的答案也可以接受。

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

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

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

【问题讨论】:

标签: ios objective-c swift http-live-streaming


【解决方案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”。这种转换只是与容器一起播放,不需要重新编码视频,因此速度非常快。

这个答案可能不是您正在寻找的(它不是 Objective-C 或 Swift 代码,也不是您可以在 iPhone 上运行的任何东西)但也许它会给您一个提示,或者至少给您一些提示您可以在桌面上进行测试。

【讨论】:

  • 感谢您的回答。我在下载 HLS 时知道 .ts 文件,但这些 .frag 文件不知道。我尝试像处理.ts 文件一样检查和转换这些文件,但它不起作用。据我了解,在下载.ts文件后,他们将它们转换为另一种类型的文件并保留为.frag文件。
  • 有趣。也许 Apple 转而使用“分段 mp4”——例如参见 bitmovin.com/hls-news-wwdc-2016。根据我读到的一些资料(我自己没看过),您实际上可以将所有片段以正确的顺序连接在一起(例如,Linux 的猫),并最终得到一个有效的 mp4 文件。你试过了吗?
  • 我没有尝试过,但听起来很有意义:)。稍后我会尝试告诉你结果。再次感谢您的建议。
  • 有没有人在 Swift 中成功实现过这个?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-19
  • 2014-12-01
相关资源
最近更新 更多