【问题标题】:Play the silverlight player from outside the silverlight object从 silverlight 对象外部播放 silverlight 播放器
【发布时间】:2011-10-19 13:17:21
【问题描述】:

我有一个使用 MediaElement 的简单 Silverlight 播放器。由于我无法控制的原因,他们希望能够在 ASP.NET 代码中而不是在 Silverlight 中构建所有播放/暂停/停止、音量控制等。我将 Silverlight 嵌入到我的 aspx 中,如下所示:

<object id="SilverlightPlayer" data="data:application/x-silverlight," 
                                    type="application/x-silverlight-2" width="750" height="460" >
<param name="source" value="ClientBin/VideoPlayer.xap"/>  
<param name="EnableGPUAcceleration" value="true" />
<param name="OnResize" value="HandleResize" />
<param name="autoUpgrade" value="true" />
<param name="initParams" id="SLInitParameters" value='video=MyVideo.wmv' />                    
</object>

我想让用户点击 ASPX 中的“播放”按钮,它会告诉 Silverlight 播放器播放视频。 (所有其他按钮的情况相同)我一直无法找到如何在任何地方执行此操作,因为似乎每个人都将这些控件构建到他们的 Silverlight 中。

非常感谢任何帮助。

更新
我正在使用以下内容来重新创建 silverlight:

function CreateSilverlight(hostElement, source, initParams) {
        var pluginId = hostElement.id + "PluginId";

        hostElement.innerHTML = Silverlight.createObject(source, null, pluginId,
            {
                width: '750',
                height: '460',
                background: 'black',
                isWindowless: true,
                alt: '<!--Silverlight not installed-->',
                data: 'data:application/x-silverlight,',
                type: 'application/x-silverlight-2',
                EnableGPUAcceleration: true,
                version: '4.0',
                autoUpgrade: true
            },
            { onError: null, onLoad: null, OnResize: HandleResize },
            initParams, hostElement.id);
}

所以我没有对该对象的引用。

【问题讨论】:

    标签: asp.net silverlight


    【解决方案1】:

    在显示媒体元素的 silverlight 页面的构造函数中,调用:

    HtmlPage.RegisterScriptableObject("player", this)
    

    然后,您可以像这样向页面添加方法:

    [ScriptableMember]
    public void Play()
    {
        this.MediaElement.Play();
    }
    
    [ScriptableMember]
    public void Pause()
    {
        this.MediaElement.Pause();
    }
    
    [ScriptableMember]
    public void Stop()
    {
        this.MediaElement.Stop();
    }
    

    那些[ScriptableMember] 属性很重要。然后,从javascript,你可以这样做:

    var slApp = document.getElementById("SilverlightPlayer");
    slApp.player.Play();
    

    这将调用暴露的“Play”方法,该方法又将MediaElement 告诉Play()

    【讨论】:

    • 这个有一个问题....我正在加载不同的 initParams,因为用户可以单击链接来观看不同的视频。所以我使用 javascript 中的 Silverlight.createObject() 用新的 initparams 重新加载播放器。当我这样做时, document.getElementById("SilverlightPlayer");返回一个空值。有什么想法吗?
    • createObject 返回对对象本身的引用,因此您不需要从 document.getElementById 中获取它。或者,将“SilverlightPlayer”作为 createObject() 中的“id”参数传递
    【解决方案2】:

    您可以通过 Javascript 通过 HtmlPage.Window.Invoke() 方法从 HTML 与 Silverlight 进行通信。 Check out this link.

    【讨论】:

    • 该示例展示了如何从 Silverlight 调用 Javascript。我希望我的 Javascript 调用 Silverlight 中的方法。
    • 标题“从 Java 脚本调用 Silverlight:”下的步骤不算数? :-) 寻找“TalkToJavaScript”方法示例。
    【解决方案3】:

    我无需重新加载 silverlight 控件即可加载不同的视频。我只需要通过 JS 将新的媒体路径传递给 silverlight mediaElement.Source 到 silverlight 桥。我还通过在屏幕上加载 SL 后添加调用 js 函数来解决加载传递到页面的视频的问题。

    【讨论】:

    • 祝贺解决方案。确保将您的答案标记为“已接受”,以便其他人可以从您的成功中学习。干杯~
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-29
    相关资源
    最近更新 更多