Laden...

Videos direkt aus der SQL-Datenbank per WPF (MVVM) abspielen oder nicht?

Erstellt von LukeEarthWalker vor 6 Jahren Letzter Beitrag vor 6 Jahren 2.524 Views
L
LukeEarthWalker Themenstarter:in
13 Beiträge seit 2018
vor 6 Jahren
Videos direkt aus der SQL-Datenbank per WPF (MVVM) abspielen oder nicht?

verwendetes Datenbanksystem: <SQL per Server Management Studio 17>

Hallo zusammen,
ich habe ein kleines Programm gebastelt womit man über eine GUI (alles nach Model View ViewModel) Videos in eine Datenbank speichern und bearbeiten kann. Mit Bearbeiten meine ich nur angaben machen zum Titel, Videobeschreibung und Kategorie.
Nun wollte ich die Videos abspielen und benutze bisher die MediaElement-Klasse dafür.
Mit dieser kann ich problemlos Files von der Festplatte auswählen und abspielen.

Bevor ich ein Video abspiele muss ich ja die Quelle über den Verbleib des Videos angeben und da ist mein Knackpunkt. Ich kann an dieser Stelle nur ein File von der Felstplatte auswählen.
Aber ich würde gerne die Videos aus der Datenbank abspielen, hat da jemand eine Idee zur Umsetzung?

Meine Idee 1:
Das byte[]-Array welches das File "hält" irgendwie als Quelle verfügbar machen.

Meine Idee 2:
Das Video-File erstmal von der Datenbank runterladen, auf einem Datenträger zwischenspeichern und abspielen, danach File wieder löschen.

Hat jemand Ideen zur Herangehensweise an dieses Problem?

Freibier für alle!

286 Beiträge seit 2011
vor 6 Jahren

Es ist schon eine schlechte Idee größere Fotos direkt in eine DB zu schreiben, aber direkt ganze Videos? Klingt nach einem eher schlechten Konzept.

Grundsätzlich: Solche Media-Elemente speicherst du wenn überhaupt idR als byte-Array, die kannst du dann in die DB schreiben bzw. daraus lesen. Das ginge also rein theoretisch.

Praktisch ist ein Video einfach zu groß für eine DB, welche darunter garantiert in die Knie gehen wird.
Speichere die Videos lieber irgendwo (lokal, NAS, CloudServer) und leg in deine DB nur eine Referenz wo das Video liegt.
Und von da aus, kannst du dann auch problemlos einen Stream öffnen.

Beste Grüße
emuuu

2+2=5( (für extrem große Werte von 2)

L
LukeEarthWalker Themenstarter:in
13 Beiträge seit 2018
vor 6 Jahren

Danke für deine Ideen zu diesem Thema.
Ich habe keine Wahl das anders zu machen.
Wenn es nach mir ginge, ich habe fünf andere Ideen zur Umsetzung, aber ich soll es mit der Datenbank machen... 😦

Mit dem Byte-Array habe ich ja schon umgesetzt, ein Upload steht in dem Programm zur Verfügung. Es wird dann in der Datenbank als varbinary(max) gespeichert.

Freibier für alle!

16.842 Beiträge seit 2008
vor 6 Jahren

Wer entscheidet denn sowas, dass Videos in eine Datenbank gehören?
Whew...

Alles größer 10 MB gehört definitiv auf ein Dateisystem und nicht direkt in die Datenbank.
Moderne Datenbanken wie MongoDB haben dafür sogar eine extra Funktionalität: GridFS

Im SQL Server gibts mittlerweile auch den FILESTREAM Typ.
Es ist aber viel einfacher die Datei direkt auf ein Dateisystem zu packen und in der DB nur zu referenzieren; das ist auch der übliche Weg und einfacher zu skalieren.

L
LukeEarthWalker Themenstarter:in
13 Beiträge seit 2018
vor 6 Jahren

Ja, du sprichst mir von der Seele 😃
Ich hatte auch schon darüber nachgedacht einen Streamserver zu verwenden,
aber ich denke das ist wie mit Kanonen auf Spatzen geschossen.

Freibier für alle!

286 Beiträge seit 2011
vor 6 Jahren

Ich habe keine Wahl das anders zu machen.

Es gibt viele Dinge wo ich akzeptieren kann, wenn man mit irgendwelchen bescheuerten Anforderungen arbeiten muss.

Aber Videos direkt in eine DB speichern (am besten noch MS Access als pseudo-DB) ist einfach eine schlechte Idee und wird in vielen Anwendungsfällen auch nicht funktionieren. Und imho hat ein Entwickler bei Sachen die dermaßen dämlich sind die Aufgabe, es der beauftragenden Partei vernünftig zu vermitteln.
Sollte auch in deinem Sinne sein, da selbst, wenn es nicht deine Idee war, wird dir die schlechte Performance deiner Lösung angelastet werden. Und diese wird mit hoher Wahrscheinlichkeit schlecht sein.

2+2=5( (für extrem große Werte von 2)

16.842 Beiträge seit 2008
vor 6 Jahren

Wozu ein Stream Server? Wieso nicht einfach einen typischen CDN?
Die sind genau dafür da.

Und ob aus Architektursicht nun ein CDN einfach nur ein Dateisystem ist oder wirklich eine Software, ist wurst.

L
LukeEarthWalker Themenstarter:in
13 Beiträge seit 2018
vor 6 Jahren

Ne CDN nicht, es ist eine Desktop-Anwendung.
Immer nur ein User pro Anwendung und pro PC.
Aber sonst auf jeden Fall.

Freibier für alle!

16.842 Beiträge seit 2008
vor 6 Jahren

Und wo soll die Datenbank liegen?

L
LukeEarthWalker Themenstarter:in
13 Beiträge seit 2018
vor 6 Jahren

Innerhalb des Firmennetzwerkes auf einem Server.

Freibier für alle!

16.842 Beiträge seit 2008
vor 6 Jahren

Dann hast Du den Satz hier übersehen? Oder verstehst ihn nicht?

Und ob aus Architektursicht nun ein CDN einfach nur ein Dateisystem ist oder wirklich eine Software, ist wurst.

L
LukeEarthWalker Themenstarter:in
13 Beiträge seit 2018
vor 6 Jahren

Nicht kapiert 😃
...bin Azubi, mach mich nicht fertig 😃

Freibier für alle!

2.298 Beiträge seit 2010
vor 6 Jahren

Aufbauend auf alles bisher gesagte, ist eventuell folgendes ein Ansatz für dich:
*Videos auf Filesystem (natürlich auf dem Intranet-Server) *Datenbank nur für Indizierung, Videobeschreibung und Details

Wird ein neues Video abgelegt ergeben sich also die 2 Schritte: Speichern des Videos und Speichern der Indizierungsinformationen.

Bei Aufruf aus der Clientanwendung kann der Benutzer ein Video auswählen (auf Basis der Indizierungsinformationen) und zum Abspielen wird das Video vom Filesystem geladen.

Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |

L
LukeEarthWalker Themenstarter:in
13 Beiträge seit 2018
vor 6 Jahren

Großen Dank!
Ich werde versuchen es so umzusetzen wie du beschrieben hast.

Freibier für alle!