我将各种内容放在index.html的 div 标记中。其中一个是视频。当从菜单中选择视频时,我将播放器和音频对象放入并初始化它们:
var html_data = '<object id="pluginPlayer" border=0 classid="clsid:SAMSUNG-INFOLINK-PLAYER"></object>';
html_data += '<object id="pluginAudio" border=0 classid="clsid:SAMSUNG-INFOLINK-AUDIO"></object>';
widgetAPI.putInnerHTML($('#main-content')[0], html_data);
我用
初始化它们Player.init();
Audio.init();
Player.setVideoURL(url);
Player.playVideo();
视频开始播放,当我尝试使用 + 和 - 音量键控制音量时,我得到以下曲目:
Error Detail: Uncaught TypeError: Object #<HTMLObjectElement> has no method 'SetVolumeWithKey'
另一方面,播放器(以相同方式初始化和使用)的方法没有问题。
以下是代码:
的index.html
<script type="text/javascript" language="javascript" src="$MANAGER_WIDGET/Common/API/Widget.js"></script>
<script type="text/javascript" language="javascript" src="$MANAGER_WIDGET/Common/API/TVKeyValue.js"></script>
<script type="text/javascript" language="javascript" src="$MANAGER_WIDGET/Common/API/Plugin.js"></script>
<script type="text/javascript" language="javascript" src='$MANAGER_WIDGET/Common/jquery.js'></script>
...
<script language="javascript" type="text/javascript" src="app/javascript/Main.js"></script>
<script language="javascript" type="text/javascript" src="app/javascript/Player.js"></script>
<script language="javascript" type="text/javascript" src="app/javascript/Audio.js"></script>
Main.js
Main.keyDown = function()
{
var keyCode = event.keyCode;
switch(keyCode){
...
case tvKey.KEY_VOL_DOWN:
case tvKey.KEY_PANEL_VOL_DOWN:
alert("VOL_DOWN");
Audio.setRelativeVolume(1);
break;
}
...
}
Audio.js
var Audio =
{
plugin : null
}
Audio.init = function(){
var success = true;
this.plugin = document.getElementById("pluginAudio");
if (!this.plugin)
{
success = false;
}
return success;
}
Audio.setRelativeVolume = function(delta){
//error reports here
this.plugin.SetVolumeWithKey(delta);
}
Audio.getVolume = function(){
alert("Volume : " + this.plugin.GetVolume());
return this.plugin.GetVolume();
}
我试图在.js调用之前和之后将pluginAudio对象添加到html的头部,尝试使用
注册/取消注册密钥Main.onLoad = function(){
window.onshow = function () {
//pluginAPI.registKey(tvKey.KEY_VOL_UP);
//pluginAPI.registKey(tvKey.KEY_VOL_DOWN);
//pluginAPI.registKey(tvKey.KEY_PANEL_VOL_UP);
//pluginAPI.registKey(tvKey.KEY_PANEL_VOL_DOWN);
//pluginAPI.unregistKey(tvKey.KEY_VOL_UP);
//pluginAPI.unregistKey(tvKey.KEY_VOL_DOWN);
}
}
甚至从开发论坛尝试过三星测试应用程序,尝试使用音量键时出现同样的错误。
请问有什么问题吗?我需要使用音量增大和减小键控制自定义视频(不是电视节目)音量(键值7和11 - 如果不是错误的话)。
答案 0 :(得分:4)
事实证明,解决方案非常简单。如果其他人遇到像我这样的类似问题,我会回答这些问题。
首先,我需要index.html
头中的其他对象(并在那里移动音频):
<object id="pluginAudio" border=0 classid="clsid:SAMSUNG-INFOLINK-AUDIO"></object>
<object id="pluginObjectTVMW" border="0" classid="clsid:SAMSUNG-INFOLINK-TVMW"></object>
<object id="pluginObjectNNavi" border=0 classid="clsid:SAMSUNG-INFOLINK-NNAVI"></object>
pluginObjectTVMW可以在:
中声明var Main =
{
pluginAPI: null
};
主要区别在于我正在尝试window.onshow
,但它必须是window.onLoad
,所以它应该是这样的(模块有时间加载):
Main.onLoad = function(){
window.onLoad = function () {
Main.pluginAPI = document.getElementById("pluginObjectTVMW");
Audio.init();
NNaviPlugin = document.getElementById("pluginObjectNNavi");
NNaviPlugin.SetBannerState(1);
pluginAPI.unregistKey(tvKey.KEY_VOL_UP);
pluginAPI.unregistKey(tvKey.KEY_VOL_DOWN);
//unregister other keys as explained in NNavi module below
}
}
来自Playing Embedded MP3 with TV Volume On-screen Display教程的NNavi模块说明:
NNavi模块控制DTV平台中的三星智能电视特定功能(例如,DUID和ServerType)。 NNavi模块的SetBannerState(nState)函数显示电视音量。 nState设置为“1”以显示音量OSD。要在屏幕上显示音量OSD,使用Common.API.Plugin的unregist()函数取消注册音量键,静音,退出,菜单和Internet @ TV键。
并且音频的变化是:
Audio.setRelativeVolume = function(delta){
this.plugin.SetVolumeWithKey(delta);
//apply volume to player
Player.plugin.audioVol(this.plugin.GetVolume);
}
最后要注意的是,我已经将音频插件移动到head
标签,而不是像播放器那样“按需”插入,就像我在开头所说的那样。
基本上就是这样。初学者因为没有等到完全加载东西而犯了错误,但我被玩家(pluginPlayer
)立即准备好了。
此致