So Steuern Sie die youtube-flash-player mit c#?
Mein Ziel ist es, eine open-source-YouTube-player kann gesteuert werden über Globale Medien-Tasten.
Das Globale key Problem ich habe es erfasst, aber die Kommunikation zwischen YouTube-player und meinen Windows-Forms-Anwendung einfach nicht aus irgendeinem Grund arbeiten.
Bisher dies ist, was ich habe:
private AxShockwaveFlashObjects.AxShockwaveFlash player;
player.movie = "http://youtube.googleapis.com/v/9bZkp7q19f0"
...
private void playBtn_Click(object sender, EventArgs e)
{
player.CallFunction("<invoke name=\"playVideo\" returntype=\"xml\"></invoke>");
}
Leider gibt:
"Error HRESULT E_FAIL has been returned from a call to a COM component."
Was bin ich? Sollte ich Sie laden eine andere URL?
Die Dokumentation Staaten, die den YouTube-player verwendet ExternalInterface-Klasse zur Kontrolle von JavaScript oder AS3 so sollte es mit c#.
AKTUALISIERT:
Methode zum einbetten des players: http://www.youtube.com/watch?v=kg-z8JfOIKw
Auch versucht, den JavaScript-API in das WebBrowser-Steuerelement, aber kein Glück (Spieler einfach nicht reagieren, um JavaScript-Befehle, versuchte sogar zu setzen WebBrowser.url
zu einem arbeiten demo alle, dass es mir gelungen ist, das onYouTubePlayerReady()
Feuer mit den einfachen eingebettete Objekt version )
Ich denke, es könnte einige Sicherheits-Probleme, die ich bin, zu beaufsichtigen, weiß nicht.
UPDATE 2:
fond-Lösung, siehe mein Antwort unten.
beide ausprobiert, keiner hat funktioniert... Hast du es geschafft es zum laufen zu bringen?
Nee sorry, nur einige Dinge, die ich habe versucht, bei der Arbeit mit COM. Ich vermute, dass du es auf x86-als auch und versucht. Auch Feuer bis ProcessMonitor (sysinternals) und verfolgen Sie die Registrierungsschlüssel, die es Abfragen. Vielleicht einige Hinweise geben.
Ich werde versuchen, den Teig habe ich keine Erfahrung bei der Verfolgung der registry, was muss ich suchen?
Dies ist, was ich gern : reg:"HKLM\SOFTWARE\Microsoft\CTF\KnownClasses" RegOpenKey NAME NICHT GEFUNDEN
InformationsquelleAutor Stefan Rogin | 2012-11-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es klingt wie Ihr versucht, die Adobe Flash verwenden, wie Sie Ihre Schnittstelle; dann die übergabe bestimmter Variablen zurück, die in C#.
Ein Beispiel wäre dieses:
In Flash; erstellen Sie eine Schaltfläche,... Actionscript:
Dann Visual Studio-Sie müssen nur fügen Sie den COM-Objekt-Referenz: Shockwave Flash Object
Dann stellen Sie das embed-zu wahren;
Dann innerhalb von Visual Studio sollten Sie in der Lage zu gehen, um Eigenschaften; fscommand finden. Der fscommand wird Ihnen erlauben, körperlich verbinden Sie den Wert aus dem Flash-Film.
Sammelt; dann verwenden Sie einfach
e.command
unde.arg
zum Beispiel, um die gesammelten Artikel etwas tun.Dann fügen Sie diese an den Event-Handler;
Und boom senden Sie die Daten vom Flash in Visual Studio. Keine Notwendigkeit für eine verrückte schwierig sockets.
On a side note, wenn Sie Flash in Visual Studio-der Schlüssel ist, um sicherzustellen, es ist "einbetten auf wahr gesetzt ist." Das wird halten alle die Pfad-Verweise in das Flash-Objekt; zu vermeiden miscalling auf falsche Pfade.
Ich bin mir nicht sicher, ob das ist die Antwort, die Ihr sucht; oder Ihre Frage beantwortet. Aber ohne weitere details über dein Ziel /Fehler. Ich kann mir nicht helfen.
Hoffe, das hilft. Der erste Teil sollte eigentlich Ihnen zeigen, der beste Weg, um das einbetten der Shockwave in Visual Studio.
Stellen Sie sicher, fügen Sie die korrekte Referenz:
Finden Richtige Objekt;
Hoffe, das hilft.
Es klingt wie Sie nicht einbetten, ist es richtig; so können Sie den Anruf zu tätigen. Wenn ich mich ein bisschen falsch; oder ist es das, was du meintest:
Wenn Ihr Schwierigkeiten Ryk hatte einen post eine Weile zurück; mit einer Methode zum einbetten von YouTube-videos:
... Oder
Die Sie finden können, der thread hier:
https://stackoverflow.com/questions/2547101/purify-embedding-youtube-videos-method-in-c-sharp
Ich entschuldige mich, wenn mein Beitrag erscheint fragmentiert; aber ich konnte nicht sagen, ob es war die Referenz die variable, die Methode oder embed, was Ihnen Schwierigkeiten. Hoffe wirklich, dass dies hilft; oder geben Sie mir mehr details, und ich werde zwicken meine Antwort entsprechend.
C# , ActionScript-Kommunikation:
Dann in C#; fügen Sie eine Instanz des ActiveX-Steuerelements und fügen Sie den Inhalt in einen Konstruktor.
ActionScript-Kommunikation zu C#:
Dann die XML angezeigt werden soll:
Dann Parsen der XML-Code im event-handler und rufen Sie die C# - Funktion lokal.
Nun sind Sie beide die Weitergabe der Daten hin und her. Das ist ein einfaches Beispiel; aber durch die Verwendung der ActionScript-Kommunikation sollten Sie keine Probleme, unter Verwendung der nativen API.
Hoffe, das ist hilfreicher. Sie können erweitern Sie auf diese Idee durch eine utility-Klasse für die Wiederverwendung. Offensichtlich ist der obige code hat einige Einschränkungen, aber ich hoffe es Punkte, die Sie in die richtige Richtung. War, die Richtung, in die Sie versuchten, zu gehen? Oder habe ich noch den Punkt verpassen?
Erstellen Sie einen neuen Flash-Film; in ActionScript 3. Dann auf den ersten frame; Anwendung der unten:
Also, was genau ist das Skript machen? Es ist unter Verwendung der nativen API und der Verwendung von ActionScript-Kommunikation. So wird im folgenden werde ich brechen jede Zeile.
Ohne Linie, dass YouTube nicht die Interaktion mit dem Objekt.
Kann man nicht einfach im laden einen Film in dem Film; so werden wir einen variable Objekt. Sie laden eine spezielle .swf-Datei enthält den Zugang zu diesen codes. Die unten, die genau das tut. So können Sie den Zugriff auf die API.
Wir verweisen nun auf die Google-API per deren Dokumentation.
Aber um eigentlich mit unserer Sache; wir müssen warten, bis es komplett initialisiert ist. Also die Ereignis-Listener warten; so wissen wir, wenn wir weitergeben können, Befehlen es.
Den
onLoaderInit
Funktion ausgelöst werden, bei der Initialisierung. Dann ist es erste Aufgabe wird es seinmy_loader
um die Liste anzuzeigen, so dass das video angezeigt wird.Den
addChild(my_loader);
ist, was geladen wird; diemy_player = my_loader.content;
speichert eine Referenz für den einfachen Zugriff auf das Objekt.Obwohl es initialisiert wurde; Sie warten sogar noch weiter... Sie verwenden
my_player.addEventListener("onReady", onPlayerReady);
zu warten und hören für diejenigen, die benutzerdefinierte Ereignisse. Die wird es später eine Funktion zu behandeln.Nun muss der Spieler bereit ist, für die Basis-Konfiguration;
Oben Funktion startet die sehr einfache manipulation. Dann die Letzte Zeile
my_player.loadVideoById("_OBlgSz8sSM",0);
auf das jeweilige video.Dann auf der Bühne; man konnte zwei Tasten und bewerben:
Was würde Ihnen eine Funktionalität von Wiedergabe und pause. Einige zusätzliche Elemente, die Sie verwenden könnten, unsere:
Halten Sie im Verstand diese nicht verwendet werden können oder genannt, bis er vollständig initialisiert ist. Aber mit, dass, mit der früheren Methode sollte ermöglichen Sie, um layout das Ziel, und tatsächlich die übergabe von Variablen zwischen den beiden für die manipulation.
Hoffentlich das hilft.
auch scheint es, dass die
fscommand
können verwendet werden zum senden von Daten aus dem flash zu c#, aber nicht zurück. Ich brauche ein 2-Wege-Kommunikation system, von daher kann ich Befehle senden, um den flash-player. Auch würde ich gerne verwenden, wenn möglich, das ursprüngliche youtube-player-api, als wäre es leichter zu pflegen.In diesem Fall können Sie mithilfe von ActionScript-Kommunikation-Datei; diese können Sie über die Native API. Aber dann pass auf C# also es kann lokal behandelt werden. Werde ich Bearbeiten, meine Reaktion zu reflektieren, was ich meine; ich will hinzufügen, nach unten.
ja, dass ist es, was ich bin versucht, aber ich denke, dass der YouTube-player hat bereits diese eingebettet und verwendet es zur Kommunikation mit JavaScript oder anderen AS3/AS2 Scripte, aber der flashPlayer.CallFunction gibt mir eine Fehlermeldung.
Die Art, wie ich beschrieben funktionieren sollte; YouTube tatsächlich nutzt eine spezielle Datei, die zur Laufzeit geladen. Dann verwenden Sie einfach die Loader-Klasse, die es erlauben, ein beliebiges YouTube-video-player. Ich werde zu meinen editierten post...
InformationsquelleAutor Greg
Ich würde damit beginnen, indem Sie sicher, dass javascript sprechen können, um Ihre flash-app.
stellen Sie sicher, dass:
allowScriptAccess="sameDomain"
Satz in dem einbetten (aus http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/external/ExternalInterface.html#includeExamplesSummary).sollten Sie überprüfen, ob html->flash funktioniert; dann C->html; und nach und nach arbeiten bis zu C->you-tube-Komponente. Sie haben eine Menge von möglichen Fehlerquellen zwischen C-und die you-tube-Komponente gerade jetzt, und es ist schwer, alle von Ihnen zur gleichen Zeit.
AxShockwaveFlash
Komponente. So, jetzt werde ich versuchen, zu c->flash und sehen, wie es geht. c->youtube gescheitertwenn Sie das tun können C->JS und JS->flash wie es scheint, muss es ein Missverständnis der you-tube-Komponente. Ich bin mir ziemlich sicher, dass, wenn Sie nicht kontrollieren konnte Ihre flash-Komponente von flash, jemand würde von jetzt bemerkt haben 🙂 viel Glück!
Der WebBrowser ist JS nicht richtig funktioniert , so webBrowserJS->Flash war kein gehen (beschriebenen Probleme in Frage). Auch C#->webBrowserJS->flash war der falsche Weg zu gehen. Ich habe es geschafft, c#->flash zu arbeiten, und veröffentlichen eine vollständige Antwort bald.
ah, das ist schade. mein Spezialgebiet ist ganz auf das flash-Ende des Spektrums, so mein feedback war meistens, um herauszufinden, wenn ich könnte jede Unterstützung... sorry, ich konnte nicht mehr hilfreich
keine Sorge, feedback war hilfreich 🙂
InformationsquelleAutor dtudury
Nach viel versucht und Kopf-hämmern, ich habe eine Lösung gefunden:
Scheint, dass die
Error HRESULT E_FAIL...
passiert, wenn der flash nicht ganz verstehen, die angeforderte flash-call. Auch für die youtube-externe api zu arbeiten, die js-api muss aktiviert werden:Als ich sagte, in der Frage das ganze Programm ist open source, so finden Sie den vollständigen code in bitbucket.
Irgendwelche Tipps, Anregungen oder Mitarbeiter werden hoch geschätzt.
Die komplette Lösung:
Hier ist die komplette Anleitung für die Einbindung von und die Interaktion mit den YouTube-player oder flash-Objekt.
Nachdem Sie die video-tutorial
legen Sie die flash player -
FlashCall
Ereignis um die Funktion, die den Griff der flash->c# Interaktion (in meinem Beispiel ist esYTplayer_FlashCall
)die generierten `InitializeComponent()` sollte sein:
das FlashCall-Ereignis-handler
diese lösen des flash->c# Kommunikation
Aufruf der flash-externe Funktionen (c#->flash):
, indem Youtube-event-Handler:
Nutzung ab:
Funktionen
YTplayer_CallFlash
,YTplayer_FlashCall
sollte für jeden flash-C# Kommunikation mit kleineren Anpassungen, wie derYTplayer_CallFlash
's switch (Befehl).Leider, ich wusste bereits, dass Informationen aus der online-Forschung, bevor die Zeit der Antwort und es war nicht spezifisch für mein problem. siehe Abschnitt: "die Antwort auf die Frage" von stackoverflow Beantwortung guide
Schön, na wenigstens haben Sie es jetzt gelöst.
Sie schrieb
parceDelimitedString
stattparseDelimitedString
danke, Problem ist nun behoben
InformationsquelleAutor Stefan Rogin
Dieser überfragt mich für eine Anzahl von Stunden.
Nur hinzufügen, aktivieren Sie JS, um Ihre URL:
http://www.youtube.com/v/9bZkp7q19f0?version=3&enablejsapi=1
CallFunction funktioniert gut für mich jetzt! Auch das entfernen von nicht benötigten Raum in dem Aufruf.
js api
muss aktiviert sein"InformationsquelleAutor Aaron Gibson