2016-06-30 10 views
-2

Ich habe eine Web-Anwendung konzentriert sich auf das Abspielen von Videos. Es verwendet einen Kolben API, um die Metadaten zu bedienen. Ich möchte in der Lage sein, einen lokalen Dateipfad für ein Video an den Client zu übergeben und dem Client das Abspielen dieses Videos zu ermöglichen. Da Sie nicht nur eine lokale Datei laden können, wie kann ich die Datei dem Browser bereitstellen? Ich weiß, es gibt einfachhttpserver, aber ich habe Dateien überall.Serve lokale Videodateien für VLC-Plugin mit Python

Wie kann ich es einrichten, so dass ich das vlc-Plugin wie in diesem Beitrag Open video stream on VLC Player through the browser verwenden kann?

UPDATE

Dies ist kein Duplikat. Ich frage, wie kann ich eine Datei von einem Client bereitgestellten Dateipfad bereitstellen. Dies kann ein beliebiger Ort sein, nicht nur ein Verzeichnis von statischen css/html/js-Dateien, die ich bedienen möchte. Da der Client den Dateipfad vom Server bezieht, kann ich überprüfen, ob die Datei zugestellt werden darf.

UPDATE 2

immer noch nicht glauben, dass dies ein Duplikat ist, wie es für den Verzehr durch ein bestimmtes Plug-in ist, vlc web plugin. Ich habe versucht, send_from_directory zu verwenden, aber es hat nicht funktioniert. Hoffentlich macht es das klarer. Wenn send_from_directory das Richtige ist, was ist mein Fehler hier?

Auf Python ist mein Endpunkt wie folgt (unter Verwendung von Kolben-geruhsame):

from flask import Blueprint, send_from_directory 
from flask_restful import Api, Resource 

class VideoServer(Resource): 

    def get(self, filepath): 
     path, file = os.path.split(filepath) 
     return send_from_directory(path, file) 

base_blueprint.add_resource(VideoServer, '/video_server/<string:filepath') 

Auf der Seite js:

let videourl = config.api_server + '/video_server/' + filepath 
let $video = $("<object>", {type: "application/x-vlc-plugin", data: videourl}); 
let $param = $("<param>", {name: "movie", value: videourl}); 
let $embed = $("<embed>", {type: "application/x-vlc-plugin", autoplay: "yes", loop: "no", target: videourl}); 
$video.append($param); 
$video.append($embed); 
$("#mydiv").append($video); 
$("#mydiv").load(); 
+1

'send_from_directory' ist was Sie wollen, genau wie die doppelte Frage. – dirn

+0

Dieses * ist * ein Duplikat. Lesen Sie die Antworten zu der verknüpften Frage. – davidism

+0

Ich aktualisierte meinen Beitrag mit dem Code einschließlich versuchen, 'send_from_directory' zu verwenden – postelrich

Antwort

0

Für diese Art von Aufgabe, die ich einen echten Server empfehlen würde (im Gegensatz zu Python Simplehttpserver oder Kolben Embedded Dev Server).

Also, vielleicht nginx?

+0

Gut das Problem ist, dass die Liste der Videodateien dynamisch auf Benutzereingabe basiert und ein realer Server eine statische Konfiguration – postelrich

+0

hat, konnten Sie nginx dienende Dateien von einem Ordner haben , und erstellen Sie einen symbolischen Link in diesem Ordner auf die Videodatei dynamisch –

+0

ich könnte aber das ist nicht sehr robust, wenn ich diese Anwendung plattformübergreifend verteilen möchte. Wäre das ein Problem, wenn die Nginx bereits separat laufen? – postelrich