2012-09-14 2 views
1

삼성 스마트 TV 용 Bightcove (https://github.com/BrightcoveOS/Samsung-Smart-TV-Sample-App)에서 제공하는 샘플 앱과 관련된 문제가 발생했습니다. . 최신 (2012) 모델에서는 리모콘이 작동하지 않습니다. 그것은 알려진 버그 (https://github.com/BrightcoveOS/Samsung-Smart-TV-Sample-App/issues/3) 인 것처럼 보이며 github 및 brightcove의 지원 포럼에서보고되었습니다. 불행히도 그들은 소스 코드를 유지하는 것을 멈추었으며 아무도이 문제에 대답하지 않습니다.삼성 스마트 TV 앱 및 Brightcove 샘플 앱 리모콘 문제

2010/2011 모델에서 모든 것이 올바르게 작동합니다.

나는 문제가 enginelite.keyhandler.js 어딘가에 위치 생각 :

/** 
* 
* Simple TV App Engine KeyHandler 
* 
* author: A Different Engine LLC. 
* http://adifferentengine.com 
* [email protected] 
* 
*/ 
// This is pretty straightforward. 
TVEngine.KeyHandler = { 

    keyActions: { 
     KEY_UP:    'onUp', 
     KEY_DOWN:   'onDown', 
     KEY_LEFT:   'onLeft', 
     KEY_RIGHT:   'onRight', 
     KEY_ENTER:   'onSelect', 
     KEY_RETURN:   'onReturn', 
     KEY_STOP:   'onStop', 
     KEY_FF:    'onFF', 
     KEY_RW:    'onRew', 
     KEY_PLAY:   'onPlay', 
     KEY_PAUSE:   'onPause', 
     KEY_YELLOW:   'onYellow', 
     KEY_RED:   'onRed', 
     KEY_BLUE:   'onBlue', 
     KEY_GREEN:   'onGreen', 
     KEY_EXIT:   'onExit', 
     KEY_MENU:   'onMenu', 
     KEY_BACK:   'onReturn', 
     KEY_SKIPFFORWARD: 'onSkipForward', 
     KEY_SKIPBACK:  'onSkipBack', 
    }, 
    enabled: true, 
    keyMap: {}, 

    init: function() { 
     // Maps system key list to ours 
     $KEYS = TVEngine.getPlatform().keys(); 
     // Transforming Samsung keymap into something we like slightly better. 
     for(key in $KEYS) { 
      this.keyMap[$KEYS[key]] = key; 
     } 
     this._initializeKeyHandler(); 
    }, 
    _cleared: true, 
    _initializeKeyHandler: function() { 
     var _this = this; var clear; 
     $(document).bind("keydown", function(event) { 
      var action = _this.keyActions[_this.keyMap[event.keyCode]]; 
      // $log("<<< GOT KEY ACTION: "+action+">>>"); 
      if (action && _this.enabled) _this.trigger("keyhandler:"+action); 
      return false; 
     }); 
     $(document).bind("keyup", function(event) { 
      var action = _this.keyActions[_this.keyMap[event.keyCode]]+"Release"; 
      // $log("<<< GOT KEY ACTION: "+action+" >>>"); 
      if (action) _this.trigger("keyhandler:"+action); 
      return false; 
     }) 
    }, 

    enable: function(){ 
     this.enabled = true; 
    }, 
    disable: function() { 
     this.enabled = false; 
    } 
}; 
// Now we can subscribe to the keyhandler from anywhere. 
_.extend(TVEngine.KeyHandler, Backbone.Events); 

이 문제를 해결할 수있는 사람이 되었습니까?

건배

답변

2

당신은 enginelite.platforms.js 파일에 _keys 오브젝트를 다시 작성해야합니다

this._keys = { 
    KEY_RETURN:  88,  //36, //8 
    KEY_UP:   29460, //38, 
    KEY_DOWN:  29461, //40, 
    KEY_LEFT:  4,  //37, 
    KEY_RIGHT:  5,  //39, 
    KEY_ENTER:  29443, //13, 
    KEY_RED:  108, //65, 
    KEY_GREEN:  20,  //66, 
    KEY_YELLOW:  21,  //67, 
    KEY_BLUE:  22,  //68, 
    KEY_BACK:  8,  //I don't know what button on remote it is :) 
    KEY_PLAY:  71,  //80, 
} 

그리고 그것은 모두 삼성의 플랫폼에서 작동합니다.

제 대답은 당신에게 직접 솔루션을 제공하므로 @ brimil01 솔루션은 문제를 디버그하는 방법을 제공합니다.

+0

고마워요 - 매력처럼 작동합니다! – simplyray

1

내가 초기화시 키는 키 핸들러에 저장되고 있는지 확인하기 위해 생성 된 키 맵을 체크 아웃 제안 :

for(key in $KEYS) { 
    alert(key+": "+$KEYS[key]); 
    this.keyMap[$KEYS[key]] = key; 
} 

그런 다음 키 코드가를 keyDown 이벤트에 전송되는 것을 캡처 :

$(document).bind("keydown", function(event) { 
    alert("keyCode: "+event.keyCode); 
    alert("keyMap: "+_this.keyMap[event.keyCode]); 
    var action = _this.keyActions[_this.keyMap[event.keyCode]]; 
    // $log("<<< GOT KEY ACTION: "+action+">>>"); 
    if (action && _this.enabled) _this.trigger("keyhandler:"+action); 
    return false; 
}); 

이렇게하면 키 핸들러에서 무슨 일이 일어나는지 알 수 있습니다.