Sony Bravia TV의 웹 EPG 만들기 (첫번째)
Ruby+Server 버전

2013-04-27   //   alexken작성   //   기술  //  3 Comments

집에 TV는 2년전 구입한 nx720이라는 Sony사 제품이다.
스마트폰에서 제어할 수 있도록 Media Remote라는 앱을 iOS용과 Android용으로 제공하고 있다.

그런데 Android용으로 TV SideView라는 새로운 앱을 제공하기 시작했다.
Media Remote가 리모콘의 단순 대체라면, TV SideView는 음성 컨트롤, EPG를 통한 채널 선택, 저장된 미디어 재생(PVR 모델의 경우)와 같은 새로운 UX를 제공하고, 이중에서 EPG를 통한 채널선택은 TV 사용에 있어 가장 자연스런 UX인거 같다.

그런데, 국가가 [일본/미국]인 경우에는 EPG를 보여주고 해당 채널을 선택할 수 있는 반면, 국가를 [한국]으로 설정해면 EPG 기능이 비활성화 되는 것에 광분하여 자체적으로 만들게 되었다.

조사해본 결과

Sony TV의 경우 IRCC라는 웹서비스를 제공한다.
리모콘 키의 IR 신호에 해당하는 ircc 코드를 HTTP 프로토콜로 SOAP 메시지로 전달하면 리모콘 키를 누른 것과 동일하게 동작한다.
IRCC의 경우에 범용적으로 표준화된 것은 아니고, Sony가 개발한 Sony의 Bravia 브랜드를 사용하는 TV, Blue-lay, PVR 기기에서만 활용되는, 그다지 범용적인 기술 표준은 아니었다.

적당히 EPG 정보를 대충 가져와 그냥 html로 알아서 아래와 같이 변환 후 화면을 터치하면, 해당 프로그램의 채널로 TV가 튜닝하도록 하였다.

ircc command를 soap으로 전송하는 가장 손쉬운 방법은 ruby cers_remote 라이브러리를 이용하면 되고, 웹 서버측 php에서 ruby를 통해 TV로 soap 메시지를 보내게 된다.

ircc가 동작 제한 조건으로

  • ircc의 soap 메시지 header에 TV에 기 등록된 기기의 MAC주소를 보낼 것
  • ircc 전송측과 TV가 동일 네트워크에 있을 것

이 중 MAC 주소는 기존에 Media Remote를 설치해서 TV와 패어링된 스마트폰/태블릿의 MAC 주소여야 하고,송신측이 TV와 동일 네트워크에 있어야 하려면, 웹버서를 집내에서 운영해야 한다.

#!/usr/bin/env ruby

require "cers_device"
tv_ip = "XXX.XXX.XXX.XXX"
paired_device_mac = "XX-XX-XX-XX-XX-XX"

command =
"1"=>"AAAAAQAAAAEAAAAAAw==",
"2"=>"AAAAAQAAAAEAAAABAw==",
"3"=>"AAAAAQAAAAEAAAACAw==",
"4"=>"AAAAAQAAAAEAAAADAw==",
"5"=>"AAAAAQAAAAEAAAAEAw==",
"6"=>"AAAAAQAAAAEAAAAFAw==",
"7"=>"AAAAAQAAAAEAAAAGAw==",
"8"=>"AAAAAQAAAAEAAAAHAw==",
"9"=>"AAAAAQAAAAEAAAAIAw==",
"0"=>"AAAAAQAAAAEAAAAJAw==",
"."=>"AAAAAgAAAJcAAAAdAw=="
}

device = CersDevice.new(tv_ip,paired_device_mac)

if __FILE__ == $0
  ARGV[0].split(//).each{|x|
    device.send_ircc(command[x])
    sleep 1
  }
end

위 파일을 setch 라고 저장하였다면 터미널에서

$setch 11.1

로 채널전환 가능하며, 이를 서버측에서 불러주면됨