בית פורומים למתכנתים שבינינו

PHP מציאת גובה ורוחב של קובץ FLV

שלום אורח. באפשרותך להתחבר או להירשם
הצג 15 הודעות בעמוד הוסף לדף האישי  דווח למנהל שלח לחבר
נשלח ב-15/9/2011 21:23 לינק ישיר 
PHP מציאת גובה ורוחב של קובץ FLV

כיצד אוכל לדעת את גודל הוידאו בקובץ FLV    למשל   320x240

קראתי את ה file header
אולם לא מצאתי את מידע

(דרך אגב, שם הקובץ הוא   320x240.flv  )









דווח על תוכן פוגעני

סמל אישי
מחובר
נשלח ב-15/9/2011 21:24 לינק ישיר 

דווקא מצאתי מקום שמפרט כיצד לקרא את ה header      
php class

http://www.phpkode.com/source/s/flv-metadata/FLVMetaData.class.php




אין לי מושג כיצד להשתמש בזה , אני צריך רק את הגובה והרוחב.




דדווח על תוכן פוגעני

סמל אישי
מחובר
נשלח ב-15/9/2011 22:02 לינק ישיר 

צדיק האמת:

filesize ("שים מיקום הקובץ עם שם הקובץ")
יחזיר לך גודל הקובץ


filesize ("שים מיקום הקובץ עם שם הקובץ")
יחזיר לך גודל הקובץ




תוקן על ידי אנוני_מוס ב- 15/09/2011 21:56:17




דדווח על תוכן פוגעני

סמל אישי
מנותק
נשלח ב-15/9/2011 22:06 לינק ישיר 

צדיק אמת:

בהצלחה.

להעתיק את המחלקה לקובץ שאתה עובד איתו.
או להשתמש ב 
include
תוריד מהמחלקה את 
private 
כדי שתוכל לגשת למשתנה
$metaData

private $metaData; =>>> var $metaData;

מאתחלים את המחלקה לתוך משתנה
$flv = new FLVMetaData("file name");
מאתחלים את הנתונים לגבי הקובץ
$flv->getMetaData();

מדפיסים את הנתונים שרצית למסך.
echo $flv->metaData["width"];
echo $flv->metaData["height"];



דדווח על תוכן פוגעני

סמל אישי
מנותק
נשלח ב-15/9/2011 22:25 לינק ישיר 

תודה רבה,
אני די חדש ל PHP   ולא מבין בדיוק מה לעשות   (האם מחלקה זה class  ? )

האם תוכלי להראות לי איך בדיוק לעשות את זה.

יש לי כאן קוד לדוגמא,    מה ואיך בדיוק להוסיף ?
בהנחה ששם קובץ הוידאו הוא   myvideo.flv


העורך כאן מעוות את השורות
אפשר להוריד את הקובץ מכאן
http://kikarhashuk.com/upload/flv.txt


*DOCTYPE html>

<!DOCTYPE html>
<html>
<head>
   <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
 

</head>
<body>

<?php


         if (file_exists('deion.txt'))
 {
  $fil = fopen('deion.txt', r);
  $desc = fread($fil, filesize('deion.txt'));
  fclose($fil);
 } 

        print("<center><h1>$desc</h1>");


      //      here i want to show widt and height
  
          ?>
 

</body>
</html>

 





מצ"ב צילום מסך של הקובץ


 




דדווח על תוכן פוגעני

סמל אישי
מחובר
נשלח ב-15/9/2011 22:39 לינק ישיר 
בבקשה

<?php
/**
 *   FLVMetaData - This tiny class is provided to parse FLV file header and
 *   get the most common metadata like the width, height, framerate, duration and etc.
 *   for more information see http://www.adobe.com/devnet/flv/
 *
 *   Note: Metadata fields might be dependent upon the software used to create the FLV.
 *
 * -----------------------------------------------------------------------------
 * LICENSE:
 *
 *   FLVMetaData is free software: you can redistribute it and/or modify
 *   it under the terms of the GNU General Public License as published by
 *   the Free Software Foundation, either version 3 of the License, or
 *   (at your option) any later version.
 *
 *   FLVMetaData is distributed in the hope that it will be useful,
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *   GNU General Public License for more details.
 *
 *   You should have received a copy of the GNU General Public License
 *   along with FLVMetaData.  If not, see <http://www.gnu.org/licenses/>.
 *
 * @author Amin Saeedi, <[email protected]>
 * @copyright Copyright (c) 2009, Amin Saeedi
 * @version 1.0
 *
 */
class FLVMetaData {
    private $buffer;
    var $metaData;
    private $fileName;
    private $typeFlagsAudio;
    private $typeFlagsVideo;

    public $VCidMap = array(
      2=>"Sorenson H.263",
      3=>"Screen Video",
      4=>"VP6",
      5=>"VP6 with Alpha channel",
    );      //Video Codec ID(s)

    public $ACidMap = array(
      "Linear PCM, platform endian",
      "ADPCM",
      "MP3",
      "Linear PCM, little endian",
      "Nellymoser 16-kHz Mono",
      "Nellymoser 8-kHz Mono",
      "Nellymoser",
      "G.711 A-law logarithmic PCM",
      "G.711 mu-law logarithmic PCM",
      "reserved",
      "AAC",
      "Speex",
      14=>"MP3 8-Khz",
      15=>"Device-specific sound"
    );      //Audio Codec ID(s)

/**
 *  CONSTRUCTOR : initialize class members
 *
 * @param string $flv : flv file path
 */
    public function  __construct($flv) {
        $this->fileName = $flv;
        $this->metaData = array(
        "duration"=>null,
        "size"=>null,
        "framerate"=>null,
        "width"=>null,
        "height"=>null,
        "videodatarate"=>null,
        "audiodatarate"=>null,
        "audiodelay"=>null,
        "audiosamplesize"=>null,
        "audiosamplerate"=>null,
        "audiocodecid"=>null,
        "videocodecid"=>null,
        "version"=>null,
        "headersize"=>0
        );
    }

/**
 * Dumps Metadata of FLV
 */
    public function dumpMetaData(){
        echo "FLV Version: <strong>".$this->metaData["version"]."</strong><br />";
        echo "Duration : <strong>".$this->metaData["duration"]."</strong> Second(s) <br />";
        echo "File Size: <strong>".number_format(($this->metaData["size"]/pow(1024,2)) , 2)."</strong> MB<br />";
        echo "Width: <strong>".$this->metaData["width"]."</strong> Pixel(s)<br />";
        echo "Height: <strong>".$this->metaData["height"]."</strong> Pixel(s)<br />";
        echo "Framerate: <strong>".number_format($this->metaData["framerate"],2)."</strong> FPS<br />";
        echo "Video Data Rate: <strong>".number_format($this->metaData["videodatarate"])."</strong> Kbps<br />";
        echo "Audio Data Rate: <strong>".number_format($this->metaData["audiodatarate"])."</strong> Kbps<br />";
        echo "Audio Delay: <strong>".$this->metaData["audiodelay"]."</strong> Second(s)<br />";
        echo "Audio Codec ID: <strong>".$this->metaData["audiocodecid"]."</strong><br />";
        if(is_numeric($this->metaData["audiocodecid"])){
            echo "Audio Format: <strong>".$this->ACidMap[$this->metaData["audiocodecid"]]."</strong><br />";
        }
        echo "Video Codec ID: <strong>".$this->metaData["videocodecid"]."</strong><br />";
        if(is_numeric($this->metaData["videocodecid"])){
            echo "Video Format: <strong>".$this->VCidMap[$this->metaData["videocodecid"]]."</strong><br />";
        }
        echo "Header Size: <strong>".$this->metaData["headersize"]."</strong> Byte(s)<br />";
    }

/**
 * Gets metadata of FLV file
 *
 * @return array $this->metaData : matadata of FLV
 */
    public function getMetaData(){
        if(!file_exists($this->fileName)){
            echo "Error! {$this->fileName} does not exist.<br />";
            return false;
        }
        if(!is_readable($this->fileName)){
            echo "Error! Could not read the file. Check the file permissions.<br />";
            return false;
        }
        $f = @fopen($this->fileName,"rb");
        if(!$f){
            echo "Unknown Error! Could not read the file.<br />";
            return;
        }
        $signature = fread($f,3);
        if($signature != "FLV"){
            echo "Error! Wrong file format.<br />";
            return false;
        }
        $this->metaData["version"] = ord(fread($f,1));
        $this->metaData["size"] = filesize($this->fileName);

        $flags = ord(fread($f,1));
        $flags = sprintf("%'04b", $flags);
        $this->typeFlagsAudio = substr($flags, 1, 1);
        $this->typeFlagsVideo = substr($flags, 3, 1);

        for ($i=0; $i < 4; $i++) {
            $this->metaData["headersize"] += ord(fread($f,1)) ;
        }

        $this->buffer = fread($f, 400);
        fclose($f);
    if(strpos($this->buffer, "onMetaData") === false){
            echo "Error! No MetaData Exists.<br />";
            return false;
        }  

        foreach($this->metaData as $k=>$v){
            $this->parseBuffer($k);
        }

        return $this->metaData;
    }

/**
 * Takes a field name of metadata, retrieve it's value and set it in $this->metaData
 *
 * @param string $fieldName : matadata field name
 */
    private function parseBuffer($fieldName){
        $fieldPos = strpos($this->buffer, $fieldName);  //get the field position
        if($fieldPos !== false){
            $pos = $fieldPos + strlen($fieldName) + 1;  
            $buffer = substr($this->buffer,$pos);

            $d = "";
            for($i=0; $i < 8;$i++){
                $d .= sprintf("%08b", ord(substr($buffer,$i,1)));
            }

            $total = self::bin2Double($d);
            $this->metaData[$fieldName] = $total;
        }
    }

/**
 * Calculates double-precision value of given binary string
 * (IEEE Standard 754 - Floating Point Numbers)
 *
 * @param string binary data $strBin
 * @return Float calculated double-precision number
 */
    public static function bin2Double($strBin){
            $sb = substr($strBin, 0, 1);    // first bit is sign bit
            $exponent = substr($strBin, 1, 11); // 11 bits exponent
            $fraction = "1".substr($strBin, 12, 52);    //52 bits fraction (1.F)

            $s = pow(-1, bindec($sb));
            $dec = pow(2, (bindec($exponent) - 1023));  //Decode exponent

            if($dec == 2047){
                if($fraction == 0){
                    if($s==0){
                        echo "Infinity";
                    }else{
                        echo "-Infinity";
                    }
                }else{
                    echo "NaN";
                }
            }

            if($dec > 0 && $dec < 2047){
                $t = 1;
                for($i=1 ; $i <= 53; $i++){
                    $t += ((int)substr($fraction, $i, 1)) * pow(2, -$i);    //decode significant
                }
                $total = $s * $t * $dec ;
                return  $total;
            }
            return false;
    }
}

שים את המחלקה הזאת בדף שאתה הולך לעבוד איתו.
אחר כך
קוד להפעיל את המחלקה
שים שם קובץ מתאים כולל מיקומו בשרת
$flv = new FLVMetaData("file.flv");
פונקציה זאת מכניסה את הנתונים של קובץ פלאש לתוך משתנה
$flv->getMetaData();

מספיס רוחב למסך
echo $flv->$metaData("width");
מדפיס גובה למסך
echo $flv->$metaData("height");

קח את כל הקוד הזה רק תשנה את שם הקובץ פלאש ותן מיקום מתאים וזה ידפיס לך למסך רוחב גובה
תוריד את כל מה שכתבתי בעברית

בהצלחה



תוקן על ידי אנוני_מוס ב- 15/09/2011 22:46:35




דדווח על תוכן פוגעני

מנותק
נשלח ב-15/9/2011 22:49 לינק ישיר 

תודה, 
אכן צדיקי אמת יש פה.

דרך אב, כיצד הצלחת להדביק את הטקסט בלי שיתעוות.  ?

בתגובה מעליך ניסיתי לעשות זאת ללא הצלחה.



דדווח על תוכן פוגעני

סמל אישי
מחובר
נשלח ב-15/9/2011 22:59 לינק ישיר 

מעתיקים לא משנה איזה מידע מכל אתר אינטרנט.

הולכים לכל תוכנה טקסט פשוטה כמו של windows מדביקים שם את מה שהעתקנו
ואז כל קוד ה HTML שנימצא נחמק כי תוכנת טקסט פשוטה לא יודעת לפענח אותו.
מסמנים מחדש את כל הטקסט עושים העתק והדבק איפה שאתה רוצה. רק שעכשיו זה בלי כל ה HTML שהיה כאשר העתקת את זה מאתרים באינטרנט.



דדווח על תוכן פוגעני

מנותק
נשלח ב-15/9/2011 23:01 לינק ישיר 

ודרך אגב צדיק האמת זה רבנו נחמן...

דרך אגב האתר הזה בנוי על PHP עם ניהול תוכן וכו..

תוקן על ידי צדיק_האמת ב- 14/11/2011 23:03:36




דדווח על תוכן פוגעני

מנותק
נשלח ב-15/9/2011 23:19 לינק ישיר 

עשיתי כפי שאמרת  וקיבלתי הודעת שגיאה
Parse error: syntax error, unexpected ';', expecting T_FUNCTION in /home/content/68/7775968/html/kikarhashuk/php/flv.php on line 216


בשורה 216 יש את ת סיום ה PHP     ?>

שזה מייד לאחר ה מחלקה 

if($dec > 0 && $dec < 2047){
                $t = 1;
                for($i=1 ; $i <= 53; $i++){
                    $t += ((int)substr($fraction, $i, 1)) * pow(2, -$i);    //decode significant
                }
                $total = $s * $t * $dec ;
                return  $total;
            }
            return false;
    }




דדווח על תוכן פוגעני

סמל אישי
מחובר
נשלח ב-15/9/2011 23:23 לינק ישיר 

בשורה 216 יש את ת סיום ה PHP     ?>

תוריד את כל השורה הזאת.



דדווח על תוכן פוגעני

מנותק
נשלח ב-15/9/2011 23:29 לינק ישיר 

העברתי את הקלאס להתחלה
הוספתי עוד  {

ונראה שזה בסדר
אבל קיבלתי הודעת שגיאה אחרת

Fatal error: Method name must be a string in /home/content/68/7775968/html/kikarhashuk/php/flv.php on line 216

להלן שורות 216 ו-217

echo $flv->$metaData("width");
echo $flv->$metaData("height");

 

מצ"ב צילום מסך





דדווח על תוכן פוגעני

סמל אישי
מחובר
נשלח ב-15/9/2011 23:33 לינק ישיר 

echo $flv->$metaData("width");
echo $flv->$metaData("height");

אופס טעיתי בכתיבת המשתנה תהפוך את זה לככה

echo $flv->$metaData["width"];
echo $flv->$metaData["height"];








דדווח על תוכן פוגעני

מנותק
נשלח ב-15/9/2011 23:43 לינק ישיר 

שיניתי את ה  {  }   ל   [ ]
וקיבלתי את השגיאה הבאה

Fatal error: Cannot access empty property in /home/content/68/7775968/html/kikarhashuk/php/flv.php on line 216



דדווח על תוכן פוגעני

סמל אישי
מחובר
נשלח ב-15/9/2011 23:46 לינק ישיר 

מתנצל שוב טעות

echo $flv->metaData["width"];
echo $flv->metaData["height"];

תעתיק את זה



דדווח על תוכן פוגעני

מנותק
נשלח ב-15/9/2011 23:54 לינק ישיר 

יואוו אני לא מבינה כלום עם כל הסמלים האלה באמצע.. :) חח העיקר שיהיה לכם בהצלחה..



דדווח על תוכן פוגעני

סמל אישי
מנותק
   
בית > פורומים > אינטרנט ומחשבים > למתכנתים שבינינו > PHP מציאת גובה ורוחב של קובץ FLV
מנהל לחץ כאן לנעילת האשכול
הוסף לעמוד האישי  דווח למנהל שלח לחבר
1 2 לדף הבא סך הכל 2 דפים.

bholext