Ankündigung

Einklappen
Keine Ankündigung bisher.

Video in Datenbank speichern und wieder auslesen

Einklappen

Neue Werbung 2019

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

  • Video in Datenbank speichern und wieder auslesen

    Hallo Forum,

    folgendes Problem:

    Ich habe via Formular ( Input type File ) ein Mp4 Video in die Datenbank hochgeladen (MySql Datenbank longblob Feld ) das hat soweit gut funktioniert.

    Nun habe ich das Problem mit dem Auslesen aus der Datenbank, die Daten werden zwar ausgelesen aber ich kann Sie nicht wiedergeben mit dem Video Tag. Gibt es da eine Decodierung die man beachten muss wie bei den Bildern ? Wer weis eventuell Bescheid ?

    Für Hilfe bedanke ich mich im voraus !

  • #2
    Tipp: Speichere Dateien niemals in der Datenbank. Das ist Murks.
    Tutorials zum Thema Technik:
    https://pilabor.com
    https://www.fynder.de

    Kommentar


    • #3
      Zitat von Andreas Beitrag anzeigen
      Tipp: Speichere Dateien niemals in der Datenbank. Das ist Murks.
      Könntest du das etwas ausführen - warum ist das murks?

      Kommentar


      • #4
        Ich möchte jetzt hier nicht über Sinn oder Unsinn von Bildern und Videos in der Datenbank zu speichern debattieren. Viel mehr würde mich wundernehmen wer sich damit auskennt und eventuell eine Lösung für das Problem kennt. Die Meinungen betreffend abspeichern von grossen Datenmengen gehen weit auseinander und sollen nicht Gegenstand meiner Fragestellung sein.

        Kommentar


        • #5
          Seiteninfo zum "ist das Murks": https://www.php.de/forum/webentwickl...79#post1209079
          The string "()()" is not palindrom but the String "())(" is.

          Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
          PHP.de Wissenssammlung | Kein Support per PN

          Kommentar


          • #6
            Zitat von Augustus Beitrag anzeigen
            Nun habe ich das Problem mit dem Auslesen aus der Datenbank, die Daten werden zwar ausgelesen aber ich kann Sie nicht wiedergeben mit dem Video Tag. Gibt es da eine Decodierung die man beachten muss wie bei den Bildern ? Wer weis eventuell Bescheid ?
            Zeige doch mal dein Code dazu, den du verwendest.

            Kommentar


            • #7
              PHP-Code:
              <?php
              session_start
              ();




              include 
              "datenbankverbindung.php";
              $stmt $dbv->prepare ("SELECT video, videotype FROM  geschaeft WHERE id_geschaeft=7 ");



              $stmt->bind_param
              (

              "s",

              $_POST['id_geschaeft']

              );


              $stmt->execute();



              $stmt->bind_result
              (

              $_POST['video'],
              $_POST['videotype']


              );


              $stmt->fetch();


              $video $_POST['video'];
              $_SESSION['video'] = $video ;
              $videotype $_POST['videotype'];


              echo 
              "<video controls="controls" width="300" height="200" preload="preload">";

              echo 
              "< source  src=  "$video"  type = video / mp4;  Codecs = "avc1.4D401E,mp4a.40.2">";
              echo 
              "< source  src = "$video"  type = video / webm; Codecs = "vp8.0vorbis" > ";
              echo 
              "< source  src = "$video"  type = video / ogg;  Codecs = "theora,vorbis" > " ;

              echo
              "</video>";

              ?>

              Kommentar


              • #8
                Wenn du das Video im Filesystem hättest und nur den Pfad in der DB könntest du es so in der Art machen.

                Aber so: brauchst du wohl eine zweite PHP Datei die das dann per header() ausliefert und du als source auf diese PHP dann verweist. zB http://stackoverflow.com/a/20022692 oder was zB Tante G. sonst noch so hergibt als Ansatz/Beispiel für dich.

                The string "()()" is not palindrom but the String "())(" is.

                Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                PHP.de Wissenssammlung | Kein Support per PN

                Kommentar


                • #9
                  Also wie gesagt, soll das Video in der Datenbank gespeichert werden ( Longblob - Feld ), was ja auch funktioniert, hochgeladen über das Input Feld type File, wird das Video aus einem definierten Ordner für Videos in die Datenbank hochgeladen. Das Auslesen der gespeicherten Videodaten funktioniert soweit auch, aber sie werden nicht wiedergegeben mit dem Player. Wenn ich mir die Daten ausgeben lasse mit print_r sehe ich viele sonderbare Zeichen, schwarze vierecke mit ? drinn, da bin ich mir nicht sicher ob die dahin gehören ? Das gleiche Problem hatte ich mal mit Bildern, das Problem wurde aber gelöst über ein encoding

                  PHP-Code:
                           echo '<td id="bild">';



                                   if (
                  $_SESSION['bildtyp']== 'image/jpeg')

                                      {
                                         echo 
                  '<img src="data:image/jpeg;base64 , '.base64_encode($_SESSION['bilder']).'" /> ';
                                      }
                                      else
                                      {
                                         echo 
                  '<img src="data:image/png;base64 , '.base64_encode($_SESSION['bilder']).'" /> ';
                                      }




                          echo
                  '</td>' 

                  Da frage ich mich, das müsste doch für Videos auch möglich sein oder ?

                  Kommentar


                  • #10
                    Aber das hast du gelesen?

                    Zitat von hausl Beitrag anzeigen
                    Aber so: brauchst du wohl eine zweite PHP Datei die das dann per header() ausliefert und du als source auf diese PHP dann verweist. zB http://stackoverflow.com/a/20022692 oder was zB Tante G. sonst noch so hergibt als Ansatz/Beispiel für dich.
                    Ich weiß nicht ob es sinnvoll ist eine was weiß ich wie große Videodatei als "base64-Text" in den Quelltext zu drücken.


                    The string "()()" is not palindrom but the String "())(" is.

                    Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                    PHP.de Wissenssammlung | Kein Support per PN

                    Kommentar


                    • #11
                      Also ob die hochgeladene Datei auf base64 beruht weiss ich nicht, bei Bildern scheint es so zu sein ! Mit dem Input type File wird das ausgewählte Video in die Datenbank geladen, was ja auch funktioniert !

                      Kommentar


                      • #12
                        Problem gelöst mit encode64, vielen Dank für eure Tipps !

                        PHP-Code:
                        echo "<video controls="controls" width="300" height="200" preload="preload">";
                        echo 
                        '<Source src="data:video/mp4;base64 , '.base64_encode($_SESSION['video']).'" /> ';

                        echo
                        "</video>"

                        Kommentar


                        • #13
                          Das gleiche Prinzip wie bei Bildern:

                          HTML-Code:
                          <img src="picture.php?id=13" alt="">
                          PHP-Code:
                          $data get_jpeg_binary_from_database($_GET['id']);
                          header('Content-Type: image/jpeg');
                          echo 
                          $data
                          HTML-Code:
                          <video width="640" height="480" controls>
                              <source src="movie.php?id=37&type=mp4" type="video/mp4">
                              <source src="movie.php?id=37&type=ogg" type="video/ogg">
                          Your browser does not support the video tag.
                          </video>
                          PHP-Code:
                          if ($_GET['type'] == 'mp4') {
                              
                          $data get_mp4_binary_from_database($_GET['id']);
                              
                          header('Content-Type: video/mp4');
                              echo 
                          $data;
                          }
                          if (
                          $_GET['type'] == 'ogg') {
                              
                          $data get_ogg_binary_from_database($_GET['id']);
                              
                          header('Content-Type: video/ogg');
                              echo 
                          $data;

                          Nur bei Videos hat man schnell Probleme durch die Datenmenge. Bilder sind in der Regel im kleinen Megabyte-Bereich. Bei Videos kann das schon in die Gigabyte gehen, und dann kommt man mit diesem Ansatz nicht mehr weit, weil schnell der Arbeitsspeicher ausgeht.

                          Von daher ist es wesentlich komplizierter sowas mit einer Datenbank zu lösen und sollte wirklich nur dann gemacht werden, wenn die Vorteile die Nachteile überwiegen.

                          Kommentar


                          • #14
                            Zitat von Augustus Beitrag anzeigen
                            Problem gelöst mit encode64, vielen Dank für eure Tipps !

                            PHP-Code:
                            echo "<video controls="controls" width="300" height="200" preload="preload">";
                            echo 
                            '<Source src="data:video/mp4;base64 , '.base64_encode($_SESSION['video']).'" /> ';

                            echo
                            "</video>"
                            Ein Video in die Session zu speichern ist doch vollkommener Wahnsinn! Willst du den Server zugrunde richten, oder was ist da die Absicht?

                            Kommentar


                            • #15
                              Klar, Belastungstest ! ...........Nein, Spass bei Seite, war nur eine Spielerei ! Aber Danke um deine Sorge !

                              Kommentar

                              Lädt...
                              X