Tester si un fichier est une video flv

Résolu
Signaler
Messages postés
20
Date d'inscription
lundi 14 mars 2005
Statut
Membre
Dernière intervention
29 juillet 2009
-
Messages postés
4720
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
31 juillet 2021
-
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)?

14 réponses

Messages postés
4720
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
31 juillet 2021
14
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
Messages postés
3826
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
10 mai 2021
46
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="" />
Messages postés
3826
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
10 mai 2021
46
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="" />
Messages postés
4720
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
31 juillet 2021
14
hé cirec, c'est bon le merle !
trop fort..

cantador
Messages postés
20
Date d'inscription
lundi 14 mars 2005
Statut
Membre
Dernière intervention
29 juillet 2009
1
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?
Messages postés
3826
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
10 mai 2021
46
ben comment veux tu lire une partie d'un fichier sans le loader

 
@+
Cirec

<hr siz="" />
Messages postés
20
Date d'inscription
lundi 14 mars 2005
Statut
Membre
Dernière intervention
29 juillet 2009
1
c'etait justement ma question, est-t-il possible de loader uniquement les 3 premiers octets?
Messages postés
3826
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
10 mai 2021
46
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="" />
Messages postés
4202
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
37
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%" />
Messages postés
3826
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
10 mai 2021
46
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="" />
Messages postés
20
Date d'inscription
lundi 14 mars 2005
Statut
Membre
Dernière intervention
29 juillet 2009
1
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;
Messages postés
4720
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
31 juillet 2021
14
Tiens je viens de voir que :
$01564C46
çà donne en texte :




�1;VLF



une explication ?

cantador
Messages postés
3826
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
10 mai 2021
46
Ben  est la représentation Hexa de FLV mais inversé ... les octets sont écrits en sens inverse dans un fichier binaire

 
@+
Cirec

<hr siz="" />
Messages postés
4720
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
31 juillet 2021
14
hoops..
les fichiers binaires c'est vraiment pas mon truc..
mais on ne sait jamais..
merci cirec

cantador