10 votes

Comment convertir .movpkg en mp4

Je suis en train de diffuser une vidéo (.m3u8) en utilisant 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()

J'ai besoin de sauvegarder la vidéo en streaming dans ma galerie. J'ai remarqué que dans le délégué ci-dessous sauvegarde le chemin de la vidéo en cache.

func urlSession(_ session: URLSession, assetDownloadTask: AVAssetDownloadTask, didFinishDownloadingTo location: URL) {
        // Ne pas déplacer l'asset de l'emplacement de téléchargement
        UserDefaults.standard.set(location.relativePath, forKey: "assetPath")

    }

Quand j'essaie d'obtenir le chemin de l'URL à partir de UserDefaults en utilisant le code suivant,

let path = UserDefaults.standard.value(forKey: "assetPath")

Le résultat est :

Library/com.apple.UserManagedAssets.s9Giec/video_streaming_title_3E90DD91830B8992.movpkg

Je trouve des structures de dossiers .movpkg en réponse à cette question

l'extension est '.movpkg' Comment puis-je convertir la vidéo en mp4 et la sauvegarder dans la galerie.

Note

  • Le fichier movpkg contient des fichiers .frag. Il est acceptable si une réponse fournit un moyen de convertir les fichiers .frag en un fichier mp4.

  • Je peux créer un AVAsset à partir de l'URL .movpkg donc la réponse à la question "Comment convertir un AVAsset en fichier mp4" est peut-être aussi acceptable.

Pour quiconque veut aider, j'ai créé un dépôt ici

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

Vous pouvez essayer de convertir le fichier .movpkg en mp4 après que le téléchargement soit terminé. Notez que le téléchargement de flux HLS n'est pas pris en charge dans le simulateur, donc veuillez exécuter le dépôt sur un vrai appareil.

1voto

Nadav Har'El Points 1591

Selon https://en.wikipedia.org/wiki/HTTP_Live_Streaming, ces "fragments" sont des fragments TS MPEG-2. Vous pouvez simplement concaténer tous ces fragments et lire le résultat dans la plupart des lecteurs vidéo, mais ce ne sera pas un vrai fichier mp4 comme vous le vouliez. Mais cela vaut la peine d'essayer, peut-être le fichier vidéo ".ts" résultant est-il suffisant pour vos besoins. Mais si ce n'est pas suffisant (par exemple, mon streamer préféré fonctionne beaucoup mieux avec des fichiers mp4 qu'avec des) MPEG-2 TS, il est logique de convertir. Je le fais habituellement sous Linux, avec ffmpeg :

ffmpeg -i all.ts -acodec copy -absf aac_adtstoasc -vcodec copy out.mp4

Où "all.ts" est la concaténation de tous les fragments (dans le bon ordre, bien sûr, comme spécifié dans le m3u8 ou souvent dans le nom de fichier), et la sortie ira dans "out.mp4". Cette conversion joue uniquement avec les conteneurs et n'a pas besoin de réencoder la vidéo donc elle est très rapide.

Cette réponse n'est peut-être pas exactement ce que vous cherchez (ce n'est pas du code objective-C ou Swift ou quelque chose que vous pouvez exécuter sur votre iPhone) mais peut-être cela vous donnera-t-il une idée de ce qu'il faut chercher, ou du moins quelque chose que vous pouvez tester sur votre ordinateur de bureau.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X