2017-09-22 4 views
1

Ich versuche, meinem Videoplayer in Kivy Untertitel von einer URL hinzuzufügen. Das habe ich bisher gemacht. Zuerst habe ich nur noch den Untertitel Link auf die Eigenschaft, genau wie ich den Quell-Link für das VideoHinzufügen von Kommentaren/Untertiteln zu Kivy Videoplayer in Python

VideoPlayer: 
    source: root.vid_source 
    options: {'allow_stretch': True, 'eos': 'loop'} 
    annotations: root.subs_source ## This doesnt work 

Nach der Kivy Dokumentation hinzufügen, würde ich eine ‚jsa‘ Datei mit Liste wie diese erfordern Ich nehme

[ 
    {"start": 0, "duration": 2, 
    "text": "This is an example of annotation"}, 
    {"start": 2, "duration": 2, 
    "bgcolor": [0.5, 0.2, 0.4, 0.5], 
    "text": "You can change the background color"} 
] 

aber die Quelle Link enthält Text dieses Format (ein Wörterbuch mit den wichtigsten ‚Titel‘ ist, was ich brauche)

{"captions":[{"duration":1961,"content":"When you have 21 minutes to speak,","startOfParagraph":true,"startTime":1610},{"duration":2976,"content":"two million years seems\nlike a really long time.","startOfParagraph":false,"startTime":3595} 

Also habe ich eine neue Klasse, die Untertitel in der gegebenen zu analysieren Format

class Subtitles: 

    def __init__(self, url): 
     self.parsed_subs = [] 
     req = UrlRequest(url, self.got_subtitles) 

    def got_subtitles(self, req, results): 
     self.parsed_subs = [{"start":sub["startTime"],"duration":sub["duration"], "text": sub["content"]} for sub in results['captions']] 

    def get_subtitles(self): 
     return self.parsed_subs 

mit Änderungen an meiner Kv-Datei folgende

#:import playerapp playerapp 

VideoPlayer: 
    ....... 
    #### str conversion since it says it accepts only string#### 
    annotations: str(playerapp.Subtitles(root.subs_source).get_subtitles()) 

Aber es hat nicht funktioniert.

Nach dem Quellcode auf einem Blick nimmt für VideoPlayer- ich sehe, dass, während die Videoplayer-Initialisierung es self._annotations_labels schafft, die es mit auffüllt, was von VideoAnnotation Klasse zurückgegeben wird, so vielleicht irgendwie muß ich die self._annotations_labels die oben parsed_subs nach innen setzen, aber ich bin hier verwirrt.

Antwort

0

Ich habe eine Problemumgehung für das Problem verwaltet. Erstens funktionierte das UrlRequest nicht, weil ich dies außerhalb der Kivy App benutzte und es sich herausstellte, dass es nicht so funktioniert. Also habe ich die Urlib-Bibliothek benutzt, oder vielleicht könntest du die Anfragen-Bibliothek benutzen, und das war es, der Fehler, den ich gemacht habe. Auch nach dem Parsing habe ich die Datei in einer Datei "subtitles.jsa" gespeichert, was die Eigenschaft "Annotations" erfordert und jetzt funktioniert.