IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Contribuez Discussion :

FFplayer (player video universel)


Sujet :

Contribuez

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    486
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 486
    Points : 875
    Points
    875
    Par défaut FFplayer (player video universel)
    FFP_17 est un projet WD17+ qui montre comment effectuer l'encapsulation du player video universel FFplay.exe, lequel doit être copié dans le dossier "Exe" du projet.
    Vous pouvez télécharger FFplay.exe ici
    https://ffmpeg.org/ffplay.html

    Le code est basé sur le projet FFMeg de Fabrice Bellard qui fonctionne sur tous les OS et en mode console sous Windows.

    Faire fonctionner une console comme une fenêtre interne dans un projet WinDev est quelque chose de très compliqué.
    Tout doit être programmé avec L'API bas niveau et la documentation du mode console est très difficile à trouver.

    Tous les formats video, y compris ceux pour internet, sont supportés.

    Si ce projet fonctionne bien, j'ai l'intention d'écrire une capture video basée sur FFMpeg pour faciliter la création de tutoriaux pour le web.

    Merci de votre retour pour que je puisse corriger ou améliorer ce projet.

    Note : vous pouvez tout tester en mode GO, il est inutile d'inclure toutes les DLLs du framework WinDev en mode compilé car FFplay.exe est déjà bien assez gros.
    Il n'y a aucun codec a installer car tout est dans l'exécutable.
    Fichiers attachés Fichiers attachés

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    486
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 486
    Points : 875
    Points
    875
    Par défaut
    Une nouvelle version est disponible.

    Cette version ajuste la vitesse de détection de FFplay en fonction de l'ordinateur hôte.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    486
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 486
    Points : 875
    Points
    875
    Par défaut
    Une nouvelle version est disponible

    Dans certains cas la fenêtre FFplay ne pouvait pas être détectée car son titre ne correspondait pas exactement à celui de la vidéo.

    La console n'apparait plus sur la barre des tâches, ce qui évite de la fermer par inadvertance.

    L'affichage des valeurs de progression HH:MM:SS ainsi que la barre de progression n'étaient pas actualisés correctement.

  4. #4
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2003
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 180
    Points : 275
    Points
    275
    Par défaut
    bonjour,

    cette version est bcp moins bien, en effet la fenêtre du player n'est dans la fenêtre de l'app (elle est en dehors, devant et plus grande) la fenêtre d'infos du film est aussi visible à côté de la fenêtre du player
    Cordialement JeAn-PhI

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    486
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 486
    Points : 875
    Points
    875
    Par défaut
    Dans la fonction ci-dessous, essayez d'augmenter la valeur de Sleep(5),
    par exemple Sleep(100)
    En ce qui me concerne j'ai une machine très rapide, aussi je pense que dans votre cas la temporisation est trop courte.
    Merci de m'indiquer la valeur susceptible de marcher sur votre config.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    FUNCTION CreatePlayerProcess(LOCAL sVideo is string)
    hWnd is system int = 0
    sExeName is string = ExePath() + "ffplay.exe"
    sCmdLine is string = " -autoexit " + sVideo
    lpClassName is string ASCIIZ on MAX_PATH = Complete("SDL_app", MAX_PATH, 0)
    lpNull is string ASCIIZ on 2 = Complete("", 2, 0)
    sVideo = Trim(sVideo, Quote)
    
    nTickMax is unsigned int = GetTickCount() + 2000
    
    pid is unsigned int = ExeRun(sExeName + sCmdLine, exeActive, exePID)
    IF pid THEN
    	WHILE hWnd = 0
    		Sleep(5)
    		// Detect console
    		hConsole is system int = FindWindow("ConsoleWindowClass", sExeName)
    		IF hConsole THEN
    			MoveWindow(hConsole, 0, -512, 979, 512, 0)
    			// Detect FFplay
    			hWnd = DetectFFplay(sVideo)
    		END
    		IF GetTickCount() > nTickMax THEN BREAK // Avoid infinite loop
    	END
    END
    
    gP.hConsole = 0
    IF gP.hStdOutput THEN
    	bRet is boolean = API(KERNEL32, "FreeConsole")
    END
    
    IF hWnd THEN
    	IF hConsole THEN
    		gP.hConsole = hConsole
    		
    		OldStyle is unsigned int = GetWindowLongPtr(gP.hConsole, GWL_EXSTYLE)
    		SetWindowLongPtr(gP.hConsole, GWL_EXSTYLE, OldStyle | WS_EX_TOOLWINDOW)
    		SetWindowLongPtr(gP.hConsole, GWL_HWNDPARENT, gP.hMain)	
    		
    		//IF AttachConsole(pif.dwProcessId) THEN
    		IF AttachConsole(pid) THEN
    			gP.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE)
    			bRet = GetConsoleScreenBufferInfo(gP.hStdOutput, &gP.bif) //Get console row and column
    			ReadDuration()
    		END	
    	END
    END
    RESULT hWnd

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    486
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 486
    Points : 875
    Points
    875
    Par défaut
    Ok, je viens d'installer la version WD26 et je constate le même problème que vous.

    Par contre tout fonctionne avec la 17 et la 25, je vais donc voir ce qui a changé avec la dernière version de WinDev (je suis en 100j)

    MAJ:
    Je pense que c'est un problème de cache, car la deuxième fois çà fonctionne, donc normalement en augmentant la temporisation initiale on devrait pouvoir y remédier.
    Je continue mes test en 26...

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    486
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 486
    Points : 875
    Points
    875
    Par défaut
    JeAn-Phi

    Effectivement c'est un problème de temporisation lors de la détection de la fenêtre FFplay dans la fonction DetectFFplay

    Essayez d'ajuster la valeur de Sleep(?) et SVP dites moi la valeur minimum qui fonctionne chez vous, merci !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    FUNCTION DetectFFplay(LOCAL sVideo is string)
    hWnd is system int = 0
    szClass is string ASCIIZ on MAX_PATH   
    szCaption is string ASCIIZ on MAX_PATH
    
    nTickMax is unsigned int = GetTickCount() + 5000
    
    hTry is system int = GetTopWindow(0)
    WHILE hTry
    	Sleep(5)
    	GetClassNameA(hTry, szClass, MAX_PATH)
    	IF szClass = "SDL_app" THEN
    		GetWindowTextA(hTry, &szCaption, MAX_PATH)
    		IF Contains(szCaption, sVideo) THEN 
    			//zTrace(">"+szCaption+"<")
    			hWnd = hTry
    			BREAK
    		END
    	END
    	hTry = GetWindow(hTry, GW_HWNDNEXT)
    	IF GetTickCount() > nTickMax THEN BREAK // Avoid infinite loop
    END
    RESULT hWnd

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    486
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 486
    Points : 875
    Points
    875
    Par défaut
    Après avoir testé FFplay avec la 26, je dois dire que la WD26 est beaucoup moins réactive que ma WD17, surtout lorsqu'on déplace la fenêtre d'un écran à l'autre en configuration multi-écran ou lorsque plusieurs fenêtres sont ouvertes en même temps.
    Le z-order des fenêtres filles de type WS_EX_TOOLWINDOW n'est pas respecté.
    Les appels a l"API bas niveau sont moins rapide, ce qui explique en partie les problèmes pour détecter les handles de fenêtres externes, c'est là qu'on mesure les limites du p-code par rapport au code compilé natif.
    Le framework c'est encore alourdi et on ne peut pas désactiver depuis l'environnement les DLLs inutiles (télémétrie par exemple).
    Sinon je trouve l'environnement plus sympa qu'en 25...

    Autre problème de taille avec la version WD26, le contenu de la fenêtre vidéo disparaît lorsqu'on déplace la fenêtre WinDev !!!!
    Rien de tel avec toutes les versions antérieures.

  9. #9
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2003
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 180
    Points : 275
    Points
    275
    Par défaut
    bonjour

    le "Sleep(5)" fonctionne très bien
    par contre le déplacement de la fenêtre n'est pas fluide, la fenêtre du lecteur suit la fenêtre de l'application avec un décalage que je n'avais pas dans une version précédente fonctionnelle pour moi.
    Cordialement JeAn-PhI

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    486
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 486
    Points : 875
    Points
    875
    Par défaut
    JeAn-Phi

    Merci de votre retour, la dernière version est disponible sur le site de dépôt (car je ne peux plus modifier le premier post de cette discussion), désormais le Sleep(5) n'est plus nécessaire et j'ai ajouté quelques fonctions supplémentaires.

  11. #11
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2003
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 180
    Points : 275
    Points
    275
    Par défaut
    ok je vais continuer à tester avec la version présente sur le site de dépôt et je vous un retour.

    je viens de faire un test avec la version présente sur le site de dépôt et je suis à la situation suivante

    le lecteur (ffplay) s'ouvre séparément de la fenêtre de l'app et la vidéo est bien lu correctement => 1er plan
    la fenêtre d'info de lecture en cours (ffplay) s'ouvre aussi => 2nd plan
    la fenêtre de l'app est là mais elle ne contient pas le lecteur comme c'était le cas précédemment => 3ème plan
    Cordialement JeAn-PhI

Discussions similaires

  1. Player video flash avec choix de la résolution
    Par elekaj34 dans le forum Flash
    Réponses: 0
    Dernier message: 23/06/2011, 10h51
  2. soucis avec player Video
    Par glenouve dans le forum ActionScript 3
    Réponses: 0
    Dernier message: 10/05/2008, 08h59
  3. Player Video avec SilverLight 1.0
    Par BigWill dans le forum Silverlight
    Réponses: 19
    Dernier message: 15/04/2008, 11h05
  4. Player video - Lenteur de chargement
    Par d.w.d dans le forum Vidéo
    Réponses: 3
    Dernier message: 08/02/2008, 11h20
  5. [FLASH MX2004 PRO] Créer un player Video
    Par MELANIE12 dans le forum Flash
    Réponses: 9
    Dernier message: 24/11/2004, 20h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo