LECTURE DES CARACTÉRISTIQUES D'UN FICHIER FLV

Signaler
Messages postés
488
Date d'inscription
samedi 5 avril 2003
Statut
Membre
Dernière intervention
31 mars 2009
-
SA7BOOCH
Messages postés
16
Date d'inscription
mercredi 10 novembre 2004
Statut
Membre
Dernière intervention
26 novembre 2009
-
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/48039-lecture-des-caracteristiques-d-un-fichier-flv

SA7BOOCH
Messages postés
16
Date d'inscription
mercredi 10 novembre 2004
Statut
Membre
Dernière intervention
26 novembre 2009

c'est bon j'ai trouvé une solution à mon problème sur

http://bytes.com/topic/php/answers/9237-hex-floating-point (2éme commentaire).

mon code ressemble à ça en ce moment

private function read_metadata() {

$meta_tags = array(
'duration',
'width',
'height',
'videodatarate',
'canSeekToEnd',
'videocodecid',
'audiodatarate',
'audiocodecid',
'framerate'
);

$buffer = fread($this->fileId, 256);

foreach($meta_tags as $meta_tag) {
$v = $this->getStr($buffer, $meta_tag);
$this->metadata[$meta_tag] = $this->bin2double($v);
}
}

public function get_metadata() {
return $this->metadata;
}

private function hex2bin($hex) {
$l = strlen($hex);
$bin = '';
for ($i=0;$i<$l;$i=$i+2) {
$bin .= chr(hexdec($hex[$i].$hex[$i+1]));
}
return $bin;
}

private function hexreverse($hex) {
$l = strlen($hex);
$bytes = array();
for ($i=0;$i<$l;$i=$i+2) {
$bytes[] = $hex[$i].$hex[$i+1];
}
$reversed_bytes = array_reverse($bytes);
return implode($reversed_bytes);
}

private function bin2double($v) {
$hex = bin2hex($v);
$hex_word = substr($hex, 0, 16);
$reversed_hex = $this->hexreverse($hex_word);
$hex_double = $this->hex2bin($reversed_hex);
$unpacked_double = unpack('d', $hex_double);
return round($unpacked_double[1]);
}

private function getStr($buf, $tag) {
$p = strpos($buf, $tag);
if ($p !== false){
$deb= $p + strlen($tag) + 1;
return substr($buf, $deb);
}
return '';
}

public static function seconds_to_hhmmss($duration) {
return sprintf('%02d:%02d:%02d', floor($duration / 3600), floor(($duration%3600) / 60), $duration % 60);
}
SA7BOOCH
Messages postés
16
Date d'inscription
mercredi 10 novembre 2004
Statut
Membre
Dernière intervention
26 novembre 2009

je m'excuse de vous avoir quité hier sans prévenir,

hier j'était sous Ubuntu 9.0.4 32-bit et ce matin j'utilise fc10.x86_32 et j'ai toujour le même problème :( je coris que je vais installer ffmpeg et utiliser ses commandes pour récupérer automatiquement les durées de mes vidéos

Merci pour votre réactivité
fgth99
Messages postés
5
Date d'inscription
lundi 6 novembre 2006
Statut
Membre
Dernière intervention
25 novembre 2009

..et ca marche aussi sur win32+PHP 5.2.6 (cli)
d:\dev\php\getflvsize>php -f getflvsize.php video3.flv
video3.flv : 258x193 11.500001911889 sec
fgth99
Messages postés
5
Date d'inscription
lundi 6 novembre 2006
Statut
Membre
Dernière intervention
25 novembre 2009

effectivement 1.35595221018E+87 meme en microsecondes ca fait beaucoup...ca doit donc dependre de la plateforme/version php, sur mon linux fc9.x86_64 ca affiche des valeurs correctes.