Tester si un fichier est une video flv [Résolu]

Messages postés
20
Date d'inscription
lundi 14 mars 2005
Dernière intervention
29 juillet 2009
- - Dernière réponse : cs_cantador
Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Dernière intervention
27 mars 2018
- 30 avril 2008 à 17:08
bonjour,
connaissez-vous une librairie ou une astuce qui permet de tester si l'en-tete d'un fichier est bien au format flv (le format video de flash)?
Afficher la suite 

Votre réponse

14 réponses

Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Dernière intervention
27 mars 2018
0
Merci
Tu crées un objet TShockwaveFlash et tu lances un Play
en encapsulant tes écritures par un Try Except..
C'est pas top mais faute de grives..

cantador
Commenter la réponse de cs_cantador
Messages postés
4229
Date d'inscription
vendredi 23 juillet 2004
Dernière intervention
3 août 2018
0
Merci
il y a du merle au menu

sinon tu check les 3 premiers octets (caractères) du fichier ... et si c'est "FLV" ...
je te laisse deviner

 
@+
Cirec

<hr siz="" />
Commenter la réponse de Cirec
Messages postés
4229
Date d'inscription
vendredi 23 juillet 2004
Dernière intervention
3 août 2018
0
Merci
Voici un petit exemple :

Const FLVSignature = $1564C46;

Procedure
TForm1.Button1Click(Sender: TObject);
Var
MS : TMemoryStream;
    Sign : Longint;
Begin
  With TMemoryStream.Create Do
  Try
    LoadFromFile('test.flv');
    ReadBuffer(Sign, SizeOf(Sign));

     If Sign = FLVSignature Then ShowMessage('Fichier
Flash');
  Finally
    Free;
  End;
End;

 
@+
Cirec

<hr siz="" />
Commenter la réponse de Cirec
Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Dernière intervention
27 mars 2018
0
Merci
hé cirec, c'est bon le merle !
trop fort..

cantador
Commenter la réponse de cs_cantador
Messages postés
20
Date d'inscription
lundi 14 mars 2005
Dernière intervention
29 juillet 2009
0
Merci
merci ce code me parrait assez optimisé mais au lieu de faire un loadfile, n'est-il pas possible de lire uniquement les 3 premiers octets du fichier?
Commenter la réponse de cs_benus
Messages postés
4229
Date d'inscription
vendredi 23 juillet 2004
Dernière intervention
3 août 2018
0
Merci
ben comment veux tu lire une partie d'un fichier sans le loader

 
@+
Cirec

<hr siz="" />
Commenter la réponse de Cirec
Messages postés
20
Date d'inscription
lundi 14 mars 2005
Dernière intervention
29 juillet 2009
0
Merci
c'etait justement ma question, est-t-il possible de loader uniquement les 3 premiers octets?
Commenter la réponse de cs_benus
Messages postés
4229
Date d'inscription
vendredi 23 juillet 2004
Dernière intervention
3 août 2018
0
Merci
ben c'est ce que je fais ... le fichier est ouvert et je lis les premier caractères et pas plus, puis le fichier est refermé ... on ne peut pas faire moins

ps : dans l'exemple donné je lis les 4 premiers et non les 3 premiers

 
@+
Cirec

<hr siz="" />
Commenter la réponse de Cirec
Messages postés
4304
Date d'inscription
samedi 16 octobre 2004
Dernière intervention
9 mars 2018
0
Merci
function IsFlashVideoFile(const FileName: string): boolean;
var Sign : LongWord;
const FLVSignature = $01564C46;
begin
  Result := false;
  if not FileExists(FileName) then
    Exit;
  with TFileStream.Create(FileName, fmOpenRead) Do
  try
    ReadBuffer(Sign, 4);    Result :Sign FLVSignature;
  finally
    Free;
  end;
end;





<hr size="2" width="100%" />
Commenter la réponse de f0xi
Messages postés
4229
Date d'inscription
vendredi 23 juillet 2004
Dernière intervention
3 août 2018
0
Merci
ah, F0xi m'a grillé au poteau

j'allais faire la même chose pour la poster dans les Snippets

Trop tard

 
@+
Cirec

<hr siz="" />
Commenter la réponse de Cirec
Messages postés
20
Date d'inscription
lundi 14 mars 2005
Dernière intervention
29 juillet 2009
0
Merci
tu es pas loin de la mienne qui pourrait etre ameliorée grandement je pense (je debute avec le language delphi)  :)

function IsFlvFile(FilePath:string):boolean;
Var //MS : TMemoryStream;
    Sign : Longint;
    Extention : string;
Const FLVSignature = $1564C46;
Begin
  result:=false;

  Extention:=ExtractFileExt(FilePath);
  Extention:=StringReplace(Extention,'.','',[rfReplaceAll, rfIgnoreCase]);

  if (FilePath<>'') AND (Extention<>'htm') AND (Extention<>'html')
  AND (Extention<>'css') AND (Extention<>'js') AND (Extention<>'gif')
  AND (Extention<>'jpg') AND (Extention<>'png') AND (Extention<>'txt') then
  begin
    With TMemoryStream.Create Do
    Try
      LoadFromFile(FilePath);

      try
        ReadBuffer(Sign, SizeOf(Sign));
      except
        ShowMessage('cant read: '+FilePath);
      end;
           
      If Sign = FLVSignature Then
      begin
        ShowMessage('Fichier Flash: '+FilePath);
        result:=true;
      end;
    Finally
      Free;
    End;
  end;
End;
Commenter la réponse de cs_benus
Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Dernière intervention
27 mars 2018
0
Merci
Tiens je viens de voir que :
$01564C46
çà donne en texte :




�1;VLF



une explication ?

cantador
Commenter la réponse de cs_cantador
Messages postés
4229
Date d'inscription
vendredi 23 juillet 2004
Dernière intervention
3 août 2018
0
Merci
Ben  est la représentation Hexa de FLV mais inversé ... les octets sont écrits en sens inverse dans un fichier binaire

 
@+
Cirec

<hr siz="" />
Commenter la réponse de Cirec
Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Dernière intervention
27 mars 2018
0
Merci
hoops..
les fichiers binaires c'est vraiment pas mon truc..
mais on ne sait jamais..
merci cirec

cantador
Commenter la réponse de cs_cantador

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.