Comment contrôler le youtube flash player avec c#?
Mon but est de faire de l'open source lecteur YouTube qui peut être contrôlée par les médias mondiaux clés.
La clé globale problème je l'ai eu couverts, mais la communication entre le lecteur YouTube et mon application Windows Forms juste ne fonctionne pas pour une raison quelconque.
Jusqu'à présent c'est ce que j'ai:
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>");
}
Malheureusement, cela renvoie:
"Error HRESULT E_FAIL has been returned from a call to a COM component."
Ce qui me manque? Dois-je charger une URL différente?
La documentation états YouTube joueur utilise classe ExternalInterface de le contrôler à partir de JavaScript ou AS3 donc il devrait fonctionner avec c#.
Mis à JOUR à:
Méthode utilisée pour intégrer le lecteur: http://www.youtube.com/watch?v=kg-z8JfOIKw
Aussi essayé d'utiliser la JavaScript API dans le contrôle WebBrowser, mais pas de chance (le joueur n'a tout simplement pas répondre à des commandes JavaScript, essayé même de définir WebBrowser.url
à un travail de démonstration, tout ce que j'ai réussi est d'obtenir le onYouTubePlayerReady()
à feu à l'aide de la simple objet incorporé version )
Je pense qu'il pourrait y avoir quelques problèmes de sécurité que je suis la supervision, je ne sais pas.
Mise à JOUR 2:
friands solution, voir mon réponse ci-dessous.
- Tous les CPU 64bit peut-être pour votre application?
- essayé les deux, aucun n'a fonctionné... Avez-vous réussi à le faire fonctionner?
- Nah désolé, juste certaines choses que j'ai essayé lors du travail avec COM. Je devine que vous définissez pour x86 ainsi et essayé. Aussi le feu jusqu'à ProcessMonitor (sysinternals) et de suivre les clés de registre c'est l'interrogation. Peut donner quelques conseils.
- Je vais essayer, de pâte, je n'ai aucune expérience dans le suivi de la base de registre, que dois-je chercher?
- C'est ce que j'affectionne : reg:"HKLM\SOFTWARE\Microsoft\FCT\KnownClasses" RegOpenKey NOM n'est PAS TROUVÉ
- désolé je n'ai pas une réponse réelle, il y aura BEAUCOUP de touches de défilement, vous aurez besoin de regarder à travers eux, de trouver des trucs en se référant à ShockwaveFlash (refusé, notfound etc) et ensuite suivre ceux-ci. désolé je ne peux pas être plus précis, que je ne connais pas la réponse complète. Il est généralement quelque chose de pas enregistrés correctement, ou un 32/64bit installer incompatibilité
Vous devez vous connecter pour publier un commentaire.
Il semble que votre essayez d'utiliser Adobe Flash sur votre interface, puis passer certaines variables en C#.
Un exemple serait celui-ci:
En Flash; créer un bouton... Actionscript:
Visual Studio, vous avez juste besoin d'ajouter de l'objet COM référence: Shockwave Flash Object
Puis définissez les incorporer à true;
Puis à l'intérieur de Visual Studio, vous devriez être en mesure d'aller à Propriétés; trouver la fonction fscommand. La fonction fscommand vous permettra de connecter physiquement à la valeur de l'animation Flash.
Qui recueille; ensuite, il suffit d'utiliser
e.command
ete.arg
par exemple pour avoir le collectées point de faire quelque chose.Puis l'ajouter au Gestionnaire d'événements;
Et boom c'est la transmission de ses données à partir de Flash dans Visual Studio. Pas besoin de tout fou difficile sockets.
Sur une note de côté, si vous avez Flash à l'intérieur de Visual Studio, la clé est de s'assurer que c'est "embed est définie sur true." Qui va contenir toutes les références de chemin à l'intérieur de l'Objet Flash, pour éviter toute miscalling aux mauvais chemins.
Je ne suis pas sûr si c'est la réponse à votre recherche, ou des réponses à votre question. Mais sans plus de détails sur votre objectif ou de l'erreur. Je ne peux pas vous aider.
Espère que cette aide. La première partie devrait effectivement vous montrer la meilleure façon d'intégrer votre onde de Choc dans Visual Studio.
Assurez-vous d'ajouter la référence:
De trouver un objet;
Espère que ça aide.
Il semble que vous n'êtes pas à l'intégrer correctement; donc vous pouvez faire l'appel à elle. Si je suis un peu tromper; ou est-ce ce que vous vouliez dire:
Si votre avoir de la difficulté à Ryk a un post quelque temps auparavant; avec une méthode d'intégration de vidéos YouTube:
Ou...
Que vous pouvez trouver le fil ici:
https://stackoverflow.com/questions/2547101/purify-embedding-youtube-videos-method-in-c-sharp
Je ne m'excuse si mon post apparaît fragmenté; mais je ne pouvais pas dire si c'était la référence, la variable, la méthode, ou l'incorporer a été l'origine de difficultés. Vraiment espérons que cette aide; ou de me donner plus de détails et je vais peaufiner ma réponse en conséquence.
C# pour ActionScript Communication:
Puis en C#; ajoutez une instance du contrôle ActiveX et ajoutez le contenu dans un Constructeur.
ActionScript Communication C#:
Puis le XML doit apparaître:
Puis parser le XML dans le gestionnaire d'événements et d'invoquer le C# fonction localement.
Maintenant, ils sont à la fois la transmission des données d'avant en arrière. C'est un exemple de base; mais en utilisant le code ActionScript de Communication, vous ne devriez pas avoir de problèmes en utilisant l'API native.
Espère que c'est plus utile. Vous pouvez développer cette idée par une classe utilitaire pour une réutilisation. Évidemment, le code ci-dessus a certaines limites; mais j'espère qu'il vous mène dans la bonne direction. A cette direction que vous essayez d'aller? Ou ai-je encore à côté de la question?
Créer une nouvelle animation Flash; en ActionScript 3. Alors sur la première image; appliquer le ci-dessous:
C'est quoi exactement ce script en train de faire? C'est en utilisant l'API native et à l'aide d'ActionScript Communication. Donc, ci-dessous, je vais décomposer chaque ligne.
Sans que la ligne de YouTube ne sera pas interagir avec l'objet.
Vous ne pouvez pas il suffit de charger un film dans le film; nous allons donc créer une variable Objet. Vous devez charger un de spécial .swf qui contiendra l'accès à ces codes. Le ci-dessous; est juste que. Ainsi, vous pouvez accéder à l'API.
Nous maintenant de référence de l'API de Google pour leur documentation.
Mais dans le but de travailler à notre objet, nous avons besoin d'attendre qu'il soit complètement initialisé. Ainsi, le Écouteur d'Événement va attendre; donc, nous savons que lorsque l'on peut passer des commandes.
La
onLoaderInit
fonction sera déclenchée lors de l'initialisation. Puis c'est la première tâche seramy_loader
pour afficher la liste, de sorte que la vidéo s'affiche.La
addChild(my_loader);
est ce qui va charger l'un; lamy_player = my_loader.content;
permettra de stocker une référence pour faciliter l'accès à l'objet.Si elle a été initialisé; vous devez attendre encore plus loin... Vous utilisez
my_player.addEventListener("onReady", onPlayerReady);
d'attendre et d'écouter celles des événements personnalisés. Ce qui permettra plus tard, une fonction pour gérer.Maintenant, le joueur est prêt pour la configuration de base;
La fonction ci-dessus commence très de base de la manipulation. Puis la dernière ligne
my_player.loadVideoById("_OBlgSz8sSM",0);
est le référencement de la vidéo en particulier.Ensuite sur votre scène, vous pouvez créer deux boutons et d'appliquer:
Qui vous donnera une lecture et pause de la fonctionnalité. Quelques éléments supplémentaires que vous pourriez utiliser notre:
Garder à l'esprit ceux qui ne peuvent pas être utilisées ou appelé jusqu'à ce qu'il a été entièrement initialisé. Mais l'utilisation de cette; avec la méthode antérieure devrait vous permettre à la disposition de l'objectif et fait passer des variables entre les deux pour la manipulation.
Espérons que cette aide.
fscommand
peut être utilisé pour envoyer des données de la mémoire flash de c#, mais pas de retour. J'ai besoin d'une 2 voies système de communication, afin que je puisse envoyer des commandes pour le lecteur flash. Aussi, je tiens à les utiliser si possible de l'original. lecteur youtube api, comme il serait plus facile à maintenir.J'aimerais commencer par vous assurer que javascript peut parler à votre flash app.
assurez-vous d'avoir:
allowScriptAccess="sameDomain"
ensemble dans l'incorporer (à partir de http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/external/ExternalInterface.html#includeExamplesSummary).vous devez valider que html->flash fonctionne, C->html; et graduellement jusqu'à C->you-tube-composant. vous avez beaucoup de potentiel de points de défaillance entre le C et le you-tube-composant en ce moment et il est difficile de les prendre toutes en même temps.
AxShockwaveFlash
composant. Alors maintenant, je vais essayer d'obtenir c->flash et voir comment il va. c->youtube a échouéAprès beaucoup d'essais et de la tête à coups de marteau, j'ai trouvé une solution:
Semble que le
Error HRESULT E_FAIL...
se produit lorsque le flash ne marche pas comprendre la demande flash appel. Aussi pour le youtube api externe pour le travail, la api js doit être activé:Comme je l'ai dit dans la question de l'ensemble du programme est open source, vous trouverez le code complet à bitbucket.
Des conseils, des suggestions ou des collaborateurs sont très appréciés.
La solution complète:
Voici le guide complet pour l'intégration et l'interaction avec le lecteur YouTube ou tout autre objet flash.
Après à la suite de la tutoriel vidéo
réglez le flash player
FlashCall
événement à la fonction qui va gérer le flash->c# interaction (dans mon exemple c'estYTplayer_FlashCall
)la génération "InitializeComponent ()" doit être:
la FlashCall gestionnaire d'événement
cela permettra de résoudre le flash->c# communication
appelant le flash externe fonctions c#->flash):
l'ajout de Youtube des gestionnaires d'événement:
utilisation ex:
Les fonctions
YTplayer_CallFlash
,YTplayer_FlashCall
devrait fonctionner pour tout flash-C# communication avec des ajustements mineurs comme laYTplayer_CallFlash
s'interrupteur (commande).parceDelimitedString
au lieu deparseDelimitedString
Cette perplexe moi pour un certain nombre d'heures.
Ajoutez simplement activer le JS de votre URL:
http://www.youtube.com/v/9bZkp7q19f0?version=3&enablejsapi=1
CallFunction fonctionne très bien pour moi maintenant! Également supprimer unrequired de l'espace à l'appel.
js api
doit être activé"