インターフェースとしてAdobeFlashを使おうとしているようです。次に、特定の変数をC#に戻します。
例はこれです:
フラッシュで; ボタンを作成...Actionscript:
on (press) {
fscommand("Yo","dude");
}
次に、Visual StudioでCOMオブジェクト参照を追加する必要があります:Shockwave Flash Object
次に、埋め込みをtrueに設定します。
次に、Visual Studio内で、[プロパティ]に移動できるはずです。fscommandを見つけます。fsコマンドを使用すると、Flashムービーの値を物理的に接続できます。
AxShockwaveFlashObjects._IShockwaveFlashEvents_FSCommandEvent
それは収集します。次に、を使用e.command
してe.arg
、たとえば、収集したアイテムに何かを実行させます。
次に、これをEventHandlerに追加します。
lbl_Result.Text="The "+e.args.ToString()+" "+e.command.ToString()+" was clicked";
そして、ブームはそのデータをFlashからVisualStudioに送信しています。クレイジーで難しいソケットは必要ありません。
ちなみに; Visual Studio内にFlashがある場合、重要なのは、Flashが「埋め込みがtrueに設定されている」ことを確認することです。これにより、Flashオブジェクト内のすべてのパス参照が保持されます。間違ったパスへの誤呼び出しを避けるため。
それがあなたの求めている答えかどうかはわかりません。またはあなたの質問に答えます。しかし、あなたの目標/エラーに関する詳細はありません。私はあなたを助けることができません。
お役に立てれば。最初の部分は、実際に、ShockwaveをVisualStudioに埋め込むための最良の方法を示しているはずです。
正しい参照を追加してください。
- プロジェクト内で「ソリューションエクスプローラー」を開きます
- 右クリックして[参照を追加]
- 「COMオブジェクト」に移動します
適切なオブジェクトを検索します。
COM Objects:
Shockwave ActiveX
Flash Accessibility
Flash Broker
Shockwave Flash
お役に立てば幸いです。
正しく埋め込まれていないようです。だからあなたはそれに電話をかけることができます。私が少し間違えたら; またはこれはあなたが意味したことですか:
あなたが苦労しているなら、Rykはしばらく前に投稿をしていました。YouTubeビデオを埋め込む方法:
<% MyYoutubeUtils.ShowEmebddedVideo("<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/gtNlQodFMi8&hl=en&fs=1"></param><param name="allowFullScreen" value="true"></param><embed src="http://www.youtube.com/v/gtNlQodFMi8&hl=en&fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"></embed></object>") %>
または...
public static string ShowEmbeddedVideo(string youtubeObject)
{
var xdoc = XDocument.Parse(youtubeObject);
var returnObject = string.Format("<object type=\"{0}\" data=\{1}\"><param name=\"movie\" value=\"{1}\" />",
xdoc.Root.Element("embed").Attribute("type").Value,
xdoc.Root.Element("embed").Attribute("src").Value);
return returnObject;
}
ここでスレッドを見つけることができます:https://stackoverflow.com/questions/2547101/purify-embedding-youtube-videos-method-in-c-sharp
投稿が断片化されているように見える場合は、お詫び申し上げます。しかし、問題を引き起こしているのが参照、変数、メソッド、または埋め込みのいずれであるかはわかりませんでした。これがお役に立てば幸いです。または詳細を教えてください。それに応じて応答を微調整します。
C#からActionScriptへの通信:
import flash.external.ExternalInterface;
ExternalInterface.addCallback("loadAndPlayVideo", null, loadAndPlayVideo);
function loadAndPlayVideo(uri:String):void
{
videoPlayer.contentPath = uri;
}
次にC#で; ActiveXコントロールのインスタンスを追加し、コンテンツをコンストラクターに追加します。
private AxShockwaveFlash flashPlayer;
public FLVPlayer ()
{
// Add Error Handling; to condense I left out.
flashPlayer.LoadMovie(0, Application.StartupPath + "\\player.swf");
}
fileDialog = new OpenFileDialog();
fileDialog.Filter = "*.flv|*.flv";
fileDialog.Title = "Select a Flash Video File...";
fileDialog.Multiselect = false;
fileDialog.RestoreDirectory = true;
if (fileDialog.ShowDialog() == DialogResult.OK)
{
flashPlayer.CallFunction("<invoke" + " name=\"loadAndPlayVideo\" returntype=\"xml"> <arguements><string>" + fileDialog.FileName + "</string></arguements></invoke>");
}
C#へのActionScript通信:
import flash.external.ExternalInterface;
ExternalInterface.call("ResizePlayer", videoPlayer.metadata.width, videoPlayer.metadata.height);
flashPlayer.FlashCall += new _IShockwaveFlashEvents_FlashCallEventHandler(flashPlayer_FlashCall);
次に、XMLが表示されます。
<invoke name="ResizePlayer" returntype="xml">
<arguements>
<number> 320 </number>
<number> 240 </number>
</arguments>
</invoke>
次に、イベントハンドラーでXMLを解析し、C#関数をローカルで呼び出します。
XmlDocument document = new XmlDocument();
document.LoadXML(e.request);
XmlNodeList list = document.GetElementsByTagName("arguements");
ResizePlayer(Convert.ToInt32(list[0].FirstChild.InnerText), Convert.ToInt32(list[0].ChildNodes[1].InnerText));
現在、両方ともデータをやり取りしています。これは基本的な例です。ただし、ActionScript Communicationを利用することで、ネイティブAPIの利用に問題は発生しません。
それがもっと役立つことを願っています。ユーティリティクラスによってそのアイデアを拡張して再利用できます。明らかに、上記のコードにはいくつかの制限があります。しかし、うまくいけば、それはあなたを正しい方向に向けます。その方向はあなたが行こうとしていたのですか?それとも私はまだポイントを逃しましたか?
新しいFlashムービーを作成します。次に、ActionScript3で。最初の最初のフレームで。以下を適用します。
Security.allowDomain("www.youtube.com");
var my_player:Object;
var my_loader:Loader = new Loader();
my_loader.load(new URLRequest("http://www.youtube.com/apiplayer?version=3"))
my_loader.contentLoaderInfo.addEventListener(Event.INIT, onLoaderInit);
function onLoaderInit(e:Event):void{
addChild(my_loader);
my_player = my_loader.content;
my_player.addEventListener("onReady", onPlayerReady);
}
function onPlayerReady(e:Event):void{
my_player.setSize(640,360);
my_player.loadVideoById("_OBlgSz8sSM",0);
}
では、そのスクリプトは正確に何をしているのでしょうか?ネイティブAPIを利用し、ActionScriptCommunicationを使用しています。それで、以下で私は各行を分解します。
Security.allowDomain("www.youtube.com");
その行がないと、YouTubeはオブジェクトと対話しません。
var my_player:Object;
ムービーをムービーにロードするだけでは不十分です。したがって、変数Objectを作成します。これらのコードへのアクセスを含む特別な.swfをロードする必要があります。以下; まさにそれをします。したがって、APIにアクセスできます。
var my_loader:Loader = new Loader();
my_loader.load(new URLRequest("http://www.youtube.com/apiplayer?version=3"));
ドキュメントごとにGoogleAPIを参照するようになりました。
my_loader.contentLoaderInfo.addEventListener(Event.INIT, onLoaderInit);
しかし、実際にオブジェクトを操作するために、完全に初期化されるのを待つ必要があります。したがって、イベントリスナーは待機します。したがって、いつコマンドを渡すことができるかがわかります。
このonLoaderInit
関数は初期化時にトリガーされます。次に、最初のタスクはmy_loader
、ビデオが表示されるようにリストを表示することです。
これaddChild(my_loader);
がロードされます。オブジェクトにmy_player = my_loader.content;
簡単にアクセスできるように参照を保存します。
初期化されていますが、あなたはさらに待たなければなりません...あなたmy_player.addEventListener("onReady", onPlayerReady);
はそれらのカスタムイベントを待って聞くために使用します。これにより、後の関数で処理できるようになります。
これで、プレーヤーは基本構成の準備ができました。
function onPlayerReady(e:Event):void{
my_player.setSize(640,360);
}
上記の関数は非常に基本的な操作を開始します。そして最後の行my_player.loadVideoById("_OBlgSz8sSM",0);
は特定のビデオを参照しています。
それからあなたのステージで。2つのボタンを作成して適用できます。
play_btn.addEventListener(MouseEvent.CLICK, playVid);
function playVid(e:MouseEvent):void {
my_player.playVideo();
}
pause_btn.addEventListener(MouseEvent.CLICK, pauseVid);
function pauseVid(e:MouseEvent):void {
my_player.pauseVideo();
}
これにより、再生と一時停止の機能が提供されます。あなたが私たちを使うことができるいくつかの追加のアイテム:
loadVideoById()
cueVideoById()
playVideo()
pauseVideo()
stopVideo()
mute()
unMute()
完全に初期化されるまで、これらを使用または呼び出すことはできないことに注意してください。しかし、それを使用します。以前の方法では、目標をレイアウトし、実際に2つの間で変数を渡して操作できるようにする必要があります。
うまくいけば、それがお役に立てば幸いです。