javascript
  • samsung-smart-tv
  • 2013-06-20 130 views 3 likes 
    3

    我在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(); 
    } 
    

    我試圖pluginAudio對象添加到HTML的頭,前後的.js電話後,試圖與

    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

    聽起來像一個很酷的項目:)'this.plugin'在這方面只是一個'HTMLObjectElement'因此該方法'SetVolumeWithKey'不存在?如果不能深入研究變量,就不能確定分辨率。 – DaveHogan

    +0

    謝謝,它是這樣的,但很少有像這樣的東西搞砸了:) ** pluginAudio **和** pluginPlayer **(用於視頻)都是'[object HTMLObjectElement]'。對象應該擁有方法,但只有玩家可以(工作),音頻不會。我會看看在問題中我可以改進哪些方面,以便更清楚。感謝您的幫助! – markoc

    +0

    如何將這些SEF對象放在index.html頭文件中,我從來沒有爲SEF對象做腳本注入 – imkrisna

    回答

    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模塊控制三星智能電視的特定功能(例如,DUID和服務器類型)在DTV平臺。 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)立即準備好了。

    問候

    相關問題