Ankündigung

Einklappen
Keine Ankündigung bisher.

LONGBLOB Video spielt nicht ab.

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • #16
    PHP-Code:
    $db = new PDO('mysql:host=localhost;dbname=test;charset=utf8''root''', [
        
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        
    PDO::ATTR_EMULATE_PREPARES => false
    ]);

    $db->query('
        CREATE TEMPORARY TABLE test (
            id INT NOT NULL AUTO_INCREMENT,
            bin_data BLOB NOT NULL,
            PRIMARY KEY (id)
        )
    '
    );

    $fp fopen('image.jpg''r');

    $stmt $db->prepare('INSERT INTO test (bin_data) VALUES (?)');
    $stmt->bindParam(1$fpPDO::PARAM_LOB);
    $stmt->execute();


    $result $db->query('SELECT bin_data FROM test LIMIT 1');

    header('Content-Type: image/jpeg');
    echo 
    $result->fetch(PDO::FETCH_NUM)[0]; 

    Kommentar


    • #17
      Zunächst mal Danke an alle und ein Like an Hellbringer, denn mit hex gings tatsächlich. Ich hatte nur einen Fehler in der Ausgabe. Allerdings ist das Video damit doppelt so groß in der Datenbank. Gibt es da noch eine Variante, die die Größe so belässt oder nur geringfügig dazuaddiert?
      Der Hintergrund ist, ich muss aus einem Video zwei machen (mp4 und webm). Webm sind nicht soo riesig, aber bei einer max_allowed_packet von 256MB kanns bei größeren Videos schon größer werden. Und die Möglichkeit diesen Wert zu erhöhen besteht nicht.
      Somit möchte ich natürlich Datenbankspeicher sparen wo es nur geht.

      Kommentar


      • #18
        Zitat von SaltLakeCity Beitrag anzeigen
        Zunächst mal Danke an alle und ein Like an Hellbringer, denn mit hex gings tatsächlich. Ich hatte nur einen Fehler in der Ausgabe. Allerdings ist das Video damit doppelt so groß in der Datenbank.
        Nein, ist es nicht. Der HEX-Wert wird ja nur für die Übertragung verwendet. Gespeichert werden Binärdaten.

        Zitat von SaltLakeCity Beitrag anzeigen
        Gibt es da noch eine Variante, die die Größe so belässt oder nur geringfügig dazuaddiert?
        Ich habe zwei genannt. Beide funktionieren. Wird sind jetzt schon bei Posting #18 und drehen uns an der Stelle.

        Hier noch die Variante mit HEX-Werten:

        PHP-Code:
        $db = new PDO('mysql:host=localhost;dbname=test;charset=utf8''root''', [
            
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
            
        PDO::ATTR_EMULATE_PREPARES => false
        ]);

        $db->query('
            CREATE TEMPORARY TABLE test (
                id INT NOT NULL AUTO_INCREMENT,
                bin_data BLOB NOT NULL,
                PRIMARY KEY (id)
            )
        '
        );

        $db->query('INSERT INTO test (bin_data) VALUES (0x' bin2hex(file_get_contents('image.jpg')) . ')');


        $result $db->query('SELECT bin_data FROM test LIMIT 1');

        header('Content-Type: image/jpeg');
        echo 
        $result->fetch(PDO::FETCH_NUM)[0]; 

        Kommentar


        • #19
          Zitat von SaltLakeCity Beitrag anzeigen
          Zunächst weiß ich selbst, dass man Videos und Bilder lediglich als URL abspeichern sollte. Jedewede Diskussionen hierüber heöfen mir bei meiner Frage also nicht.
          Warum machst du es dann? Dieser Thread ist der hunderprozentige Beleg, dass du das auf keinen Fall machen solltest.

          Zitat von hellbringer Beitrag anzeigen
          Nein, ist es nicht. Der HEX-Wert wird ja nur für die Übertragung verwendet. Gespeichert werden Binärdaten.
          max_allowed_packet ist die maximale Query größe, also genau das was Übertragen wird.

          Kommentar


          • #20
            Naja im Kreis drehen wir uns nicht, da es ja jetzt so geht.
            Dennoch wird der File auf der DB größer.
            PHP-Code:
            echo 'REALSIZE: '.filesize($file).' CONTENTSIZE: '.strlen(file_get_contents($file)).' HEXSize: '.strlen(bin2hex(file_get_contents($file))); 
            Ausgabe:
            Code:
             REALSIZE: 36554495 CONTENTSIZE: 36554495 HEXSize: 73108990
            Das wird ja wohl nicht falsch gemssen werden oder?

            An erc. Genau. Wenn ich also zwei Videos übertrage (zwei Felder) sind die 256MB schnell erreicht. Natürlich kann ich die auch nacheinander übertragen. Aber mir wäre am liebsten wenn das auf einmal geht.

            Letzte Frage/n dann nerve ich euch nicht mehr.

            Wie gesagt geht es mit bin2hex. Hier stände noch im Raum ob ich das noch irgendwie komprimieren kann.
            2.te und letzte Frage:
            Video läuft überall nur Apple Iphone und Ipad wollen nicht. Kann ich Apple da noch irgendwie austricksen? Denn ich vermute, es liegt am src="...php" anstelle eben src="...mp4".

            Kommentar


            • #21
              Zitat von SaltLakeCity Beitrag anzeigen
              Wie gesagt geht es mit bin2hex. Hier stände noch im Raum ob ich das noch irgendwie komprimieren kann.
              Verwende ein Prepared Statement statt den Umweg über HEX.

              Zitat von SaltLakeCity Beitrag anzeigen
              Video läuft überall nur Apple Iphone und Ipad wollen nicht. Kann ich Apple da noch irgendwie austricksen? Denn ich vermute, es liegt am src="...php" anstelle eben src="...mp4".[/SIZE][/FONT][/COLOR][/LEFT]
              Eine Adresse ist nur eine Adresse und hat keine Bedeutung. Ob da .php oder .mp4 in der Adresse steht ist den Clients egal. Wichtig ist der Content-Type im HTTP-Header.

              Kommentar


              • #22
                Das steht als header drin
                PHP-Code:
                header('Content-Type: video/mp4');
                //und dann eben der string
                hex2bin($str); 
                Geht überall nur nicht bei Apple. Interessanterweise geht es überall(ausnahme Apple) auch ohne die Headerzeile. Gibt es da gute Lektüre zum richtigen Headeraufbau? Was ich bislang finde ist nur Quark der es noch schlimmer macht.

                Kommentar


                • #23
                  Warum hex2bin? In meinen geposteten Beispielen verwende ich ja auch nirgendwo hex2bin.

                  Und ein echo fehlt da auch.

                  Kommentar


                  • #24
                    Das Echo habe ich vergessen reinzukopieren. Ist im Script schon da (Sonst täte es ja bei allen anderen Geräten nicht gehen)
                    Ja, nur habe ich es ja auch (siehe Post) mit Prepared Statement versucht. Das wird mal gar nix gespeichert. Klar mache ich da was falsch. Obwohl ich nach dem gefundenen im Internet gegangen bin. Ich werde mich damit in jedem Fall noch auseinandersdetzen. Aber im Moment muss es so gehen wie es jetzt (endlich) geht.

                    Kommentar


                    • #25
                      Auch wenn du die Hex-Variante nimmst, brauchst du kein hex2bin(). Siehe mein funktionierendes Beispiel.

                      Kommentar


                      • #26
                        Zitat von SaltLakeCity Beitrag anzeigen
                        Video läuft überall nur Apple Iphone und Ipad wollen nicht. Kann ich Apple da noch irgendwie austricksen? Denn ich vermute, es liegt am src="...php" anstelle eben src="...mp4".
                        Du nimmst den Wert beim Aufruf aus der Datenbank, speicherst den in einer Datei die auf mp4 endet und über den Webserver zugänglich ist, erzeugst eine Url dafür und leitest den Besucher auf diese Url um. Und das Schlimme daran ist, dieser Unsinn ist effektiver, als den Wert mit echo auszugeben.

                        Kommentar


                        • #27
                          Nicht böse sein, aber dann kann ich das Video gleich direkt als mp4 auf dem Server liegen lassen. Das ist Unsinn. Ich will ja gerade keine Dateien erzeugen oder haben. Das MUSS (mit 20 S) als BLOB verfügbar sein.

                          Kommentar


                          • #28
                            Danke nochmal hellbringer. Ich habs mit den Statements tatsächlich hinbekommen. Das Iphoneproblem belibt aber das andere ist geklärt. Danke

                            Kommentar


                            • #29
                              Für das iphone brauch du noch weitere header Angaben wie content-range.
                              Siehe https://mobiforge.com/design-develop...mobile-devices
                              und
                              https://stackoverflow.com/questions/...t-an-mp4-video.

                              Kommentar


                              • #30
                                Zitat von Moorleiche Beitrag anzeigen
                                PHP-Code:
                                 UPDATE vidtable SET mp4=LOAD_FILE('/tmp/...../myvid.mp4'WHERE id=1
                                https://www.w3resource.com/mysql/str...e-function.php
                                Ich frage mich wieso dieser Lösungsvorschlag einfach ignoriert wird

                                Kommentar

                                Lädt...
                                X