none
Dateien von Clientrechner ausführen RRS feed

  • Frage

  • Hallo,

    ich schreibe zur Zeit an einer Verwaltungssoftware herum. Einige Nutzer haben sich nun geäußert, das sie gerne eine Art Musikdashboard haben möchten. Dabei ist die Grundlegende Idee, das die Nutzer nur die Pfade der Dateien auf den Clientrechnern bekannt machen und man dann die Datei aus den Musikpanel startet mit den Standartprogramm, welches im Betriebssystems hinterlegt wurde. Ist so etwas möglich? Ich könnte mir vorstellen, das es da Sicherheitsbedenken gibt. 

    Alternativ habe ich überlegt, das man Onlinespeicher wie Onedrive, GoogleDrive passend anzapft. Wäre das damit möglich. 

    Ich würde gerne die Musik direkt auf den Clientrechner starten. Ein Player auf meiner Seite zu integrieren, ist vermutlich einfacher, aber das würde ja auch bedeuten, das ich mehr Datentraffic habe, oder nicht? Also einmal den Stream zu meiner Webseite und dann von der Webseite zum Client. 

    Ich habe mich mit den Thema noch nie befasst und eine Suche brachte mich nicht unbedingt weiter. Außer das dies wohl keine typische Anforderung ist, da ich nichts finden konnte. Könnte aber auch sein, das ich die falschen Schlagworte verwendet habe.

    Für Anregungen wäre ich sehr Dankbar. 

    Lg Uriel

    Freitag, 28. Juni 2019 07:45

Alle Antworten

  • Hi 

    Falls deine Verwaltungssoftware eine Website ist (ASP.NET), hängt es davon ab, wie du diese Seite präsentierst. Ruft der Client die Site mit einem normalen Webbrowser ab, wird das (...eine Software auf dem Client-Rechner starten, Zugriff auf lokale Verzeichnisse...) meines Wissens nicht gehen.

    Das alles würde nur gehen, wenn du einen eigenen Browser (Desktop-App mit Webbrowser-Steuerelement) bei deinen Kunden installierst...

    Ich frage mich nur, ob es nicht einfacher wäre, die Möglichkeiten von Html5 zu nutzen. Ob das auch mit Onedrive oder anderen Onlinespeichern funktioniert, wage ich zu bezweifeln, das hängt von den unterstützten Protokollen ab.

    Wo die (mp3,...)-Dateien physikalisch liegen, ist dann eigentlich egal, solange sie per http/s erreichbar sind. Wollen Clients ihre Musik auch anderen Teilnehmern bereitstellen, bedarf es natürlich einer gemeinsam erreichbaren Quelle (Webserver). Der Upload von Musikdateien sollte auch immer vom Client durchgeführt werden, aus rechtlichen Gründen. Ich würde den Zugriff auf diesen (Musik)Server vorsichtshalber zusätzlich limitieren (auf deine zugelassenen Clients).

    Der Traffic entsteht in jedem Fall zwischen dem Server, der die Musikdateien ausliefert und dem Client. 

    Gruß

    Nachtrag/Ergänzung:

    Ich würde gerne die Musik direkt auf den Clientrechner starten. Ein Player auf meiner Seite zu integrieren, ist vermutlich einfacher, aber das würde ja auch bedeuten, das ich mehr Datentraffic habe, oder nicht? Also einmal den Stream zu meiner Webseite und dann von der Webseite zum Client. 

    Wenn der Client Musik hören soll, muss der Player immer beim Client gestartet werden. Den Player auf deiner Seite zu integrieren/starten bringt nur dann was, wenn deine Clients im Nachbarzimmer sitzen und deine Boxen ausreichend Leistung haben.

    Wie und woher der Player seine Daten bezieht, ist eine andere Frage (siehe auch Html5 Audio, in jedem modernen Browser integriert). ich würde das aus verschiedenen Erwägungen nicht über den "Verwaltungs-Server" machen. Eine einfache Website/VM/Strato etc. reicht vermutlich vielleicht schon aus. Wenn man Dritt-Software ohne besondere Einbuße bei Komfort oder Leistung vermeiden kann, ist das nebenbei immer besser. (KISS)

    • Bearbeitet K. Pater Sonntag, 30. Juni 2019 16:36
    Sonntag, 30. Juni 2019 11:53
  • Hi Uriel,
    diese Anforderung ist nicht abwegig. VLC z.B. unterstützt eine derartige Arbeitsweise (wenn ich Deine Vorstellung richtig verstanden habe). Realisiert wird das mit einem Streaming-Server. Der Streaming-Server greift direkt auf die Dateien zu, d.h. die Zugriffspfade müssen in seinem Zugriffsbereich liegen (z.B. auf der Festplatte des Rechners mit dem Streaming-Server oder auch in freigegebenen Verzeichnissen im Netz des Streaming-Servers). Der Streaming-Server kann neben dem Stream auch eine Web-Oberfläche bereitstellen. Über diese Web-Oberfläche kann dann der Nutzer die Bereitstellung von Streams starten und mit der passenden Software diese Stream konsumieren (z.B. VLC). Wenn der Nutzer selbst Dateien als Stream bereitstellen will (z.B. Musik oder Videos), dann muss er diese Dateien dem Streaming-Server bereitstellen, z.B. hochladen in einen Bereich, auf den der Streaming-Server zugreifen kann.

    --
    Best Regards / Viele Grüße
    Peter Fleischer (former MVP for Developer Technologies)
    Homepage, Tipps, Tricks

    Sonntag, 30. Juni 2019 15:31
  • Hallo Uriel,

    wenn der User selbst einen Ordner/Datei auswählt ist das sicher möglich. Hier mal ein einfaches Beispiel mit einer Datei

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8" />
        <meta name="viewport" content="width=device-width" />
        <title>Player</title>
    </head>
    <body style="background-color: #2f2f2f; min-height: 100vH;">
        
        <input type="file" id="files" />
        <video id="myVideo" controls autoplay></video>
    
        <script>
            function handleFileSelect(evt) {
    
                var file = evt.target.files[0];
          
                var reader = new FileReader();
                reader.onload = function(){
                    var dataURL = reader.result;
                    var output = document.getElementById('myVideo');
                    output.src = dataURL;
                };
                reader.readAsDataURL(file);
            }
          
            document.getElementById('files').addEventListener('change', handleFileSelect, false);
          </script>
    
    </body>
    </html>

    Es gibt auch die Möglichkeit einen ganzen Ordner mit Dateien auszulesen, dafür gibt es die FileSystemDirectoryReader

    Ich persönlich würde mich einfach nach einem fertigen Player umschauen.


    Gruß Thomas
    13 Millionen Schweine landen jährlich im Müll
    Dev Apps von mir: UWP Segoe MDL2 Assets, UI Strings


    Montag, 1. Juli 2019 12:45
  • Jetzt hatte ich doch lust auf mehr :) Einfach den Code als Html Datei speichern

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8" />
        <meta name="viewport" content="width=device-width" />
        <title>Player</title>
    
        <style>
            .container{
                display: grid;
                grid-template-columns:1fr 300px;
                height: 100vh;
                width: 100vw;
            }
            .containerLeft{
                grid-column: 1;
                background-color: #2f2f2f;
            }
            .containerRight{
                grid-column: 2;
                background-color: white;
            }
        </style>
    </head>
    <body>
        
        <div class="container">
            <div class="containerLeft">
                <video id="myVideo" style="width: 100%; height: 100vh;" controls autoplay></video>
            </div>
            <div class="containerRight">
                <input type="file" id="picker" webkitdirectory directory multiple  />
                <br />
                <ul id="listing"></ul>
            </div>
        </div>
    
        <script>
            var entries = [];
    
            document.getElementById("picker").addEventListener("change", function (res){
                let output = document.getElementById("listing");
                let files = event.target.files;
    
                for (let i=0; i<files.length; i++) {
                    let file = files[i];
    
                    if (file.type.startsWith('audio') || file.type.startsWith('video'))
                    {
                        let x = entries.push(file);
                        let item = document.createElement("li");
                        item.onclick = function() { playItem(x); };
                        item.innerHTML = file.name;
                        output.appendChild(item);
                    }
                };
    
            }, false);
    
            function playItem(id){
                var reader = new FileReader();
                reader.onload = function(){
                    var dataURL = reader.result;
                    var output = document.getElementById('myVideo');
                    output.src = dataURL;
                };
                reader.readAsDataURL(entries[id-1]);
            }
          </script>
    
    </body>
    </html>

    Etwas doof finde ich das ich dem Player das File als Base64 string zur Verfügung stelle. Mit einem Blob hatte ich keinen erfolg


    Gruß Thomas
    13 Millionen Schweine landen jährlich im Müll
    Dev Apps von mir: UWP Segoe MDL2 Assets, UI Strings


    Montag, 1. Juli 2019 15:35
  • Hallo. Danke für eure Antworten. 

    Wunsch wäre es, das ich ggf. einfach einen Link wie "c:\meine Musik\tolles lied 21.mp3" oder so ähnlich mit den Standardprozess aus Windows starte. Ich würde dann nur den Pfad und ggf. ein paar Tags/Metainformationen speichern wollen. Ähnliches hätte ich auch mit Bildern und Videos vor. Nach weiteren Überlegungen, wäre es ggf. auch cool, wenn die Webseite entsprechende Player/Betrachter mit anbietet. 

    Ich möchte ungerne eine Protokoll oder ähnliches implementieren müssen. So einfach und simpel wie möglich. Die Nutzer sind ganz normale Nutzer ohne Kontakt, da mit der Hürde der Anmeldung, jeder die Webseite nutzen können soll. Alles mit zusätzlichen Installationen würde viele Nutzer überfordern. 


    Mittwoch, 3. Juli 2019 08:00
  • Ich glaube der Tipp mit HTML5 Audio geht in die richtige Richtung :). 
    Mittwoch, 3. Juli 2019 08:04
  • Hallo

    mir ist immer noch nicht ganz klar, welche Infrastruktur unterstellt werden darf.

    Falls es, wie ich annehme, eine ASP.NET Webanwendung ist, auf die deine Clients übers Internet oder aus dem Intranet mit einem Webbrowser zugreifen, musst du dir keine Gedanken machen, ob du auf deren Rechner irgendeine Datei/Prozess starten kannst. Das geht meines Wissens nicht. Die bekannten Webbrowser erlauben das nicht. Alleine über

     <input type="file"...>

    kann (s. Antwort von Thomas) der Anwender eine Datei auswählen und benutzen. Es ist aber diese Benutzeraktion notwendig und du kannst das nicht initiieren.

    Wenn es sich nun um eine geschlossene Benutzergruppe innerhalb einer Firma/Intranet handelt, kannst du ja (wie schon erwähnt) einen eigenen Browser basteln, der sich nur im Intranet bewegen darf. Den kannst du dann so basteln, dass er "so was" darf.

    Ansonsten müssen die Musikdateien an einem Ort (Server) liegen, den der Client (Webbrowser) über einen Link erreichen kann und der diese Dateien über ein Protokoll bereitstellt, welches dein Browser verarbeiten kann. Wer diese Dateien abrufen darf, ist noch eine andere Frage, ob das nur der "Uploader" ist oder auch die "KollegInnen".

    Und noch einmal, einen Player brauchst du nicht verteilen. Jeder moderne, HTML5-fähige Browser hat alles an Bord, was benötigt wird.

    Meiner Meinung nach sollten die Ressourcen (Fotos, Videos, Musikdateien) zentral gehostet werden. Der Upload muss von den Clients gemacht werden.

    Nebenbei, wollen die Clients nur ihre lokale Musik hören, würde ich Spotify empfehlen ;-)

    Gruß

     

    • Als Antwort markiert UrielMhezzek Sonntag, 7. Juli 2019 12:48
    • Tag als Antwort aufgehoben UrielMhezzek Sonntag, 7. Juli 2019 12:48
    Mittwoch, 3. Juli 2019 11:10
  • Hallo,

    ich hoffe ich beantworte jetzt deine Frage korrekt. 

    Infrastruktur: Es wird eine ASP Blazor Seite werden. Ich möchte bestenfalls keinen Datentransfer für Videos und Musik über meine Webseite laufen lassen. Effektiv soll nicht anderes passieren, als hätte der Nutzer bei sich im Dateisystem die Datei gedoppelclickt. Idealerweise möchte ich dann aber genau diese Datei dann über einen Player/Viewer, der auf meiner Webseite visualisiert wird, angezeigt bekommen. 

    Hintergrund sind zum einen die Kosten für Datentransfer und Speicherplatz und zum anderen die rechtlichen Probleme wie Copyrights, die ich mit einen solchen verfahren damit auf den Nutzer übertrage. Zudem viele der vermutlich verwendeten Bilder und gerade die verwendete Musik urheberrechtlich geschützt sind und damit dann auch viele Copyrightprobleme auftreten dürften.

    Es handelt sich bei den Nutzern eine offene Community. Also muss ich auch mit radikalen und illegalen Aktionen rechnen :(. Diese will ich aber größtenteils ausschießen. Wenn dies nur durch einen Upload zu bewerkstelligen ist, wird es die Funktion nicht geben. Das Risiko gehe ich als Hobbyentwickler für eine Hobbywebseite nicht ein. 

    Lg Uriel

    Sonntag, 7. Juli 2019 12:56
  • Hallo,

    also, falls das folgende Szenario richtig ist, ..:

    Client A spielt Musik ab. Nun soll die Community also mitbekommen, was A gerade so hört und der Titel, den A hört, soll auf dem "Musik-Dashboard" sichtbar werden.

    Ein anderer Client B will das nun auch hören. Dazu klickt er auf den Titel und es soll sich die Musik bei ihm automatisch abspielen.

    Falls das Szenario also so stimmt:

    Dann ist entscheidend, dass die Daten, die ein Musikstück repräsentieren (also die MP3-was-auch-immer-Datei), bei beiden Clients vorhanden sein müssen, ansonsten irgendwie von A nach B kommen müssen.

    Sobald du dazwischen hängst (beim Datentransfer der mp3-Datei), hast du meines Erachtens schnell ein rechtliches Problem. Also fallen die Optionen "Streaming über deinen Server" und "Upload auf deinen Server" vermutlich weg.

    Bliebe so etwas wie ein Peer-2-Peer Netz übrig, mit dem du aber nichts zu tun hast oder zu tun haben willst und das du nicht über deine Webseite (völlig egal womit erstellt ->Blazor) steuern kannst.

    Wenn deine Clients also keinen Spezialbrowser verwenden, sehe ich persönlich da kaum einen Weg das irgendwie umzusetzen. Denn selbst damit dürfte es nur funktionieren, wenn entsprechende Freigaben bei den Clients (Richtlinien, Firewalls, ...) vorhanden sind. Was vermutlich reichlich Supportanfragen bescheren dürfte.

    Das Kernproblem ist also, wie kommen Daten (mp3/4/x-Dateien) von A nach B ohne dass das über deinen Server läuft. Zu publizieren, was A gerade hört, erscheint mir dagegen unproblematisch und auch machbar. Die eigene Musik auf dem eigenen Rechner zu hören, dazu gab es ja auch schon einen Vorschlag.

    Gruß

    Sonntag, 7. Juli 2019 17:14
  • Hallo, 

    du scheinst dich sehr an der Verbreitung der Dateien aufzuhängen. Das ist unnötig. Der Nutzer wird die Dateien nicht frei geben oder verbreiten wollen. Zumindest nicht über meine Webseite. Da dies nur eine Sekundärfunktion ist und zusammen mit anderen Funktionen der Webseite quasi ein Paket bilden. Jeder Nutzer hat da seine eigene Kombination. Viele von uns arbeiten zur Zeit Internet. Im Normalfall werden Nutzer ihre Paket allein zusammenstellen und dann in kleinen Meetings nutzen, wobei die Webseite alle notwendigen Informationen parat halten soll. 

    Die Dateien werden nur von den Nutzer benutzt, der sie auch besitzt. Eine Verteilung ist unerwünscht. Sie sollen nicht verteilt werden. Mir geht es wirklich nur um das Abrufen lokaler Dateien. Mehr nicht. Ich glaube, so wie es weiter oben erwähnt wird, ist meine Frage vermutlich schon beantwortet. Erste Tests konnte ich aus Zeitmangel noch nicht machen.

    Lg 

    Sonntag, 7. Juli 2019 19:14