javascript - 如何使用 javascript 暂停/播放/寻找 silverlight 视频

标签 javascript silverlight video

一点背景知识。我希望能够通过 JavaScript 以编程方式控制 Amazon Instant Video 上的 Silverlight 视频播放器。

使用开发者控制台。我在 DOM 中找到了视频播放器元素。

<div id="player_container" style="display: block;">
  <object type="application/x-silverlight" 
          data="data:application/x-silverlight," 
          id="player_object" 
          width="50%" 
          height="100%">
    <param name="color" value="#ffffff">
    <param name="background" value="#000000">
    <param name="minRuntimeVersion" value="5.1">
    <param name="autoUpgrade" value="false">
    ... elided several <param>'s here ...
  </object>
</div>

然后我在开发者控制台的 js repl 中输入以下内容:

 > var silver = document.getElementById("player_object");

然后我尝试遵循 instructions found here 。其中指出我应该,

 > silver.content.findName(SOMETHING_HERE);

我不确定要使用什么来处理 SOMETHING_HERE,因此我使用

下载了 silverlight 应用程序
wget http://www.amazon.com/gp/video/streaming/silverlightPlayer.xap?ie=UTF8&version=104.0-0
unzip silverlightPlayer.xap?ie=UTF8

然后我查看解压缩的 AppManifest.xaml:

<Deployment xmlns="http://schemas.microsoft.com/client/2007/deployment" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" ExternalCallersFromCrossDomain="ScriptableOnly" EntryPointAssembly="Amazon.ATVSilverlightPlayer" EntryPointType="Amazon.ATVSilverlightWebPlayer.App" RuntimeVersion="5.0.61118.0">
  <Deployment.Parts>
    <AssemblyPart x:Name="Amazon.ATVSilverlightPlayer" Source="Amazon.ATVSilverlightPlayer.dll" />
    <AssemblyPart x:Name="Amazon.AIV.Utilities" Source="Amazon.AIV.Utilities.dll" />
    <AssemblyPart x:Name="Amazon.Common" Source="Amazon.Common.dll" />
    <AssemblyPart x:Name="AmazonPlayer.Themes.DarkGray" Source="AmazonPlayer.Themes.DarkGray.dll" />
    <AssemblyPart x:Name="AtvAdsManager" Source="AtvAdsManager.dll" />
    <AssemblyPart x:Name="ATVQos" Source="ATVQos.dll" />
    <AssemblyPart x:Name="Microsoft.Logging.LocalConnection" Source="Microsoft.Logging.LocalConnection.dll" />
    <AssemblyPart x:Name="Microsoft.SilverlightMediaFramework.Core" Source="Microsoft.SilverlightMediaFramework.Core.dll" />
    <AssemblyPart x:Name="Microsoft.SilverlightMediaFramework.Diagnostics" Source="Microsoft.SilverlightMediaFramework.Diagnostics.dll" />
    <AssemblyPart x:Name="Microsoft.SilverlightMediaFramework.Logging" Source="Microsoft.SilverlightMediaFramework.Logging.dll" />
    <AssemblyPart x:Name="Microsoft.SilverlightMediaFramework.Plugins" Source="Microsoft.SilverlightMediaFramework.Plugins.dll" />
    <AssemblyPart x:Name="Microsoft.SilverlightMediaFramework.Plugins.Monitoring" Source="Microsoft.SilverlightMediaFramework.Plugins.Monitoring.dll" />
    <AssemblyPart x:Name="Microsoft.SilverlightMediaFramework.Plugins.Progressive" Source="Microsoft.SilverlightMediaFramework.Plugins.Progressive.dll" />
    <AssemblyPart x:Name="Microsoft.SilverlightMediaFramework.Plugins.SmoothStreaming" Source="Microsoft.SilverlightMediaFramework.Plugins.SmoothStreaming.dll" />
    <AssemblyPart x:Name="Microsoft.SilverlightMediaFramework.Plugins.TimedText" Source="Microsoft.SilverlightMediaFramework.Plugins.TimedText.dll" />
    <AssemblyPart x:Name="Microsoft.SilverlightMediaFramework.Utilities" Source="Microsoft.SilverlightMediaFramework.Utilities.dll" />
    <AssemblyPart x:Name="Microsoft.Web.Media.SmoothStreaming" Source="Microsoft.Web.Media.SmoothStreaming.dll" />
    <AssemblyPart x:Name="Newtonsoft.Json" Source="Newtonsoft.Json.dll" />
    <AssemblyPart x:Name="System.Json" Source="System.Json.dll" />
    <AssemblyPart x:Name="System.Xml.Linq" Source="System.Xml.Linq.dll" />
    <AssemblyPart x:Name="System.ComponentModel.Composition" Source="System.ComponentModel.Composition.dll" />
    <AssemblyPart x:Name="System.Xml.Serialization" Source="System.Xml.Serialization.dll" />
    <AssemblyPart x:Name="System.ComponentModel.Composition.Initialization" Source="System.ComponentModel.Composition.Initialization.dll" />
    <AssemblyPart Source="de/Amazon.ATVSilverlightPlayer.resources.dll" />
    <AssemblyPart Source="en-GB/Amazon.ATVSilverlightPlayer.resources.dll" />
    <AssemblyPart Source="ja/Amazon.ATVSilverlightPlayer.resources.dll" />
    <AssemblyPart Source="de/System.Json.resources.dll" />
    <AssemblyPart Source="ja/System.Json.resources.dll" />
    <AssemblyPart Source="de/System.Xml.Linq.resources.dll" />
    <AssemblyPart Source="ja/System.Xml.Linq.resources.dll" />
    <AssemblyPart Source="de/System.ComponentModel.Composition.resources.dll" />
    <AssemblyPart Source="ja/System.ComponentModel.Composition.resources.dll" />
    <AssemblyPart Source="de/System.Xml.Serialization.resources.dll" />
    <AssemblyPart Source="ja/System.Xml.Serialization.resources.dll" />
    <AssemblyPart Source="de/System.ComponentModel.Composition.Initialization.resources.dll" />
    <AssemblyPart Source="ja/System.ComponentModel.Composition.Initialization.resources.dll" />
  </Deployment.Parts>
</Deployment>

在使用 silver.content.findName(SOMETHING_HERE)< 时,我尝试将 .xaml 文件中找到的许多 x:Name 值替换为 SOMETHING_HERE/。始终返回 null。我想要一个句柄,让我可以从我自己的 JavaScript 控制台播放/暂停/寻找亚马逊即时视频?我应该如何进行?

最佳答案

应用程序 list 不是实际的 Silverlight 应用程序,它定义了 xap 文件中的哪些程序集构成了 Silverlight 应用程序。您尝试访问的 Silverlight MediaElement 是在应用程序 list 中列出的 dll 之一包含的 xaml 文件中定义的,Amazon.ATVSilverlightPlayer.dll 是我要开始查找的地方。我喜欢用 .NET Reflector 来检查 dll。

按名称引用 MediaElement 是一种脆弱的方法,因为向 Silverlight 元素分配 x:name 属性是可选的,并且 Amazon 可以随时更改它。您可以按照此处描述的方法遍历 Silverlight 应用程序可视化树并查找 MediaElement 类型的对象:Javascript array of TextBlock elements from Xaml file

我必须稍微改变它才能让它为我工作:

    var hasLoaded = false;

    function onSilverlightLoad(sender) {
        if (hasLoaded) {
            return;
        }
        forEachDescendant(document.getElementById('silverlightObject').content.Root);
        hasLoaded = true;
    }

    function forEachDescendant(elem) {
        if (elem != null) {
            console.log('Type: ' + elem.toString());
            if (typeof elem.children == 'object') {
                for (var i = 0; i < elem.children.count; i++) {
                    var child = elem.children.getItem(i);
                    forEachDescendant(child);
                }
            }
            else if (typeof elem.content == 'object') {
                forEachDescendant(elem.content);
            }
        }
    }

关于javascript - 如何使用 javascript 暂停/播放/寻找 silverlight 视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23175556/

相关文章:

c# - XAML控件使用“可见性”类型而不是普通“ bool ”的实际原因是什么?

visual-studio - xaml程序集引用问题

.net - 最佳 Silverlight 控件

video - 带有表情符号的 FFMPEG drawtext

ios - AVPlayer 不播放没有音频的 HTTP 直播流

ios - 如何在 Swift3 iOS 中的特定持续时间内在 AVPlayer 中播放视频

javascript - 如何仅在单击时触发一次函数调用 - 我做错了什么?

javascript - 使用 URI 和 key 生成 HMAC SHA 算法

javascript - 使用选定值中的数组填充 Kendo DropDownList

javascript - 如何判断函数是否是在已关闭或重新加载的窗口中定义的?