module inscription newsletter haut de page forum mobile

Ateliers et Formations

[Problème] Soucis de lecture avec FFMPEG

Discussion dans 'Les formats' créé par Scadapop, 29 Juillet 2014.

Tags:
  1. Scadapop

    Points Repaire:
    100
    Recos reçues:
    0
    Messages:
    5
    Appréciations:
    +0 / 0 / -0
    Bien l'bonjour !

    Je m'efforce actuellement de coder en C++ une petite classe qui me permettra de lire des vidéos avec la SFML (J'ai rien trouvé qui le permette, mais si vous avez quelque chose je suis preneur aussi, ça m'évitera de fissurer :D).

    Donc j'ai pris FFMPEG, et après quelques temps, j'ai réussi à récupérer le flux vidéo d'un fichier, à en prendre chaque frame, à convertir la frame au format d'image attendu par la SFML pour ses textures, et à afficher les dites textures.

    Ça marche plutôt pas mal à part que ce petit lecteur rencontre de gros problèmes pour lire certaines vidéos.

    Ce qui se passe dans ces cas, c'est que ça va lire plusieurs frames de manière normale pendant une certaine période (assez variable, mais généralement moins d'une seconde), et puis pouf, il va plus arriver à en lire pendant un petit moment (là aussi assez variable, mais toujours moins d'une seconde).

    C'est à dire que la fonction av_read_frame va me renvoyer 0 pendant plusieurs itérations (le code ne se bloque pas) avant de se remettre à lire des frames correctement.

    Il me semble que la période durant laquelle les frames sont lues et la période durant laquelle le machin bloque sont d'une durée plutôt équivalentes, mais comme ça va très vite c'est pas évident à déterminer.

    J'ai affiché les métadonnées de plusieurs vidéos afin d'essayer de comprendre le pourquoi du comment (Cf. screen joint) et il semblerait que les vidéos ne marchant pas aient un point commun : Pas de valeur "encoder".
    Le souci c'est que comme je suis une bille pour tout ce qui touche à la vidéo, je comprends pas la moitié des paramètres que je vois, et ne saurais donc pas dire si c'est vraiment l'absence d'encodeur qui pose souci, un quelque chose de plus subtile qui m'échappe.

    Cela étant, des logiciels comme VLC parviennent à lire ces vidéos "défectueuses" sans aucun problème. J'en ai conclus qu'en l'absence de certaines données, les lecteurs devaient choisir des valeurs par défaut. Mais comment puis-je faire la même chose via FFMPEG, et surtout comment déterminer proprement quel est le meilleur encodeur potentiel, et sur la base de quelles autres informations ?

    Enfin bref voila, si certains qui s'y connaissent bien pouvaient trouver le courage de jeter un oeil au screen et regarder ce qui à leurs yeux pourrait poser des soucis de lecture, et si éventuellement vous aviez quelques idées ou documents de référence qui pourraient m'aider à le corriger, je vous en saurais gré ;)

    Bonne journée !


    P.S. Quelques infos supplémentaires à propos des données sur le screen :
    - intro3.mp4 est le résultat obtenu après avoir utilisé un logiciel pour découper intro.mp4 (Freemake video converter).
    - intro4.mp4 est le résultat obtenu avec avoir découpé intro2.mp4 via le même logiciel.
    - tut2.mkv est le résultat obtenu après avoir enregistré une partie de tut.mkv via VLC.
     

    Fichiers attachés:

    #1 Scadapop, 29 Juillet 2014
    Dernière édition: 30 Juillet 2014
  2. hammondandco

    So

    Points Repaire:
    7 705
    Recos reçues:
    29
    Messages:
    1 005
    Appréciations:
    +22 / 183 / -3
    Bonjour.
    Aussi intéressant qu'inattendu ici.
    Pour des raisons perso que je t'épargne, ça m'interpelle.

    Peut-on te demander où tu veux en venir ?
     
  3. Scadapop

    Points Repaire:
    100
    Recos reçues:
    0
    Messages:
    5
    Appréciations:
    +0 / 0 / -0
    Et bonjour.

    Je n'ai pas beaucoup de prétentions, pour le moment j'aimerai juste avoir quelque chose qui me permette de lire une vidéo de bout en bout (Audio compris). L'objectif principal étant de pouvoir lancer des vidéos d'intro ou de logo au démarrage d'une appli.

    J'ai déjà implémenté quelques fonctions toutes bêtes de contrôle (lire/pause/stop) et je pense faire une fonction de seek, ainsi qu'un gestionnaire de vidéos pour permettre d'en lire plusieurs, histoire d'enrichir un peu la classe et de couvrir quelques cas d'utilisation mineurs.

    Mais là actuellement, ce que je voudrais c'est pouvoir me dire : Dans la majorité des cas, si j'arrive à lire une vidéo sur VLC ou MPC, alors je peux la lire sur mon appli. Je sais bien que j'arriverai jamais à faire un truc aussi poussé que VLC, et j'en ai pas la prétention, mais si au moins je pouvais avoir une base fiable, ce serait un gros progrès.

    Et bien sûr, si la chose tourne bien, je tâcherai de partager ça avec le reste de la communauté SFML.
     
  4. hammondandco

    So

    Points Repaire:
    7 705
    Recos reçues:
    29
    Messages:
    1 005
    Appréciations:
    +22 / 183 / -3
    OK... intéressant, très intéressant.
    Courageux, et sortant des sentiers (hyper)battus.
    Mais je n'ai pas actuellement le temps de participer sérieusement à cette démarche.
    Apprécierais fort néanmoins d'en voir le résultat.
    Cordialités.
     
Chargement...

Partager cette page