TL;DR
Je veux convertir fMP4 fragments de TS les segments (HLS) que les fragments sont écrits à l'aide de FFmpeg sur un appareil iOS.
Pourquoi?
Je suis en train de réaliser en direct de téléchargement sur iOS, tout en conservant une parfaite HD copie locale.
Ce que j'ai essayé
-
Rolling
AVAssetWriter
s où chacun écrit pendant 8 secondes, puis la concaténation de la MP4s ensemble via FFmpeg.Ce qui s'est passé - Il y a des soubresauts de l'audio et de la vidéo à la fois. J'ai identifié 3 raisons à cela.
1) préparation de la surface des cadres pour l'audio, écrit par l'encodeur AAC créer des lacunes.
2) étant donné que les images vidéo sont de 33,33 ms de long, et de trames audio 0.022 ms de long, il est possible pour eux de ne pas s'aligner à la fin d'un fichier.
3) L'absence de cadre précis d'encodage présent sur Mac OS, mais n'est pas disponible pour iOS Détails Ici
-
FFmpeg multiplexage un grand uniquement à la vidéo MP4 fichier audio raw dans TS les segments. Le travail a été basé sur le Kickflip SDK
Ce qui s'est passé - à Chaque fois dans un tout en un audio uniquement les fichier téléchargés, avec pas de vidéo que ce soit. Jamais en mesure de le reproduire en interne, mais il était assez dérangeant pour nos utilisateurs lorsqu'ils n'ont pas d'enregistrer ce qu'ils ont pensé qu'ils ont fait. Il y avait aussi des questions précises de la recherche sur la finale de segments, presque comme le TS segments ont été incorrectement horodaté.
Ce que je pense maintenant
Apple pousse fMP4 lors de la WWDC de cette année (2016) et je n'avais pas regardé beaucoup à tous avant que. Depuis un fMP4 fichier peut être lu, et a joué alors qu' il a été écrit, j'ai pensé qu'il serait possible pour FFmpeg pour transcoder le fichier tel qu'il a été écrit ainsi, aussi longtemps que nous attendions envoyer les octets de FFmpeg jusqu'à ce que chaque fragment à l'intérieur du fichier est terminé.
Cependant, je ne suis pas assez familier avec la Version de l'API C, je n'ai utilisé que brièvement à l'intérieur de tentative de #2.
Ce que j'ai besoin de vous
- Est-ce une solution viable? Est ce que quelqu'un assez familiers avec fMP4 savoir si je peux réellement accomplir cette mission?
- Comment vais-je savoir que
AVFoundation
a terminé l'écriture d'un fragment dans le fichier pour que je puisse pipe dans FFmpeg? - Comment puis-je récupérer des données à partir d'un fichier sur le disque, morceau à la fois, la passer dans FFmpeg et avoir cracher TS les segments?