티스토리 뷰

tvheadend는 TV를 볼 수 있게 해주는 어플리케이션이다. 기본적으로는 TV 신호를 캡쳐하여 디지털 스트림으로 바꿔주는 TV 수신카드가 필요하지만 IPTV 시대에는 수신카드 없이도 ISP에서 제공하는 멀티캐스트 비디오 데이터를 캡쳐해서 자기만의 웹주소(http)로 볼 수 있도록 재전송(재송출)하거나 실시간으로 녹화하는 DVR(or PVR) 기능을 내장하고 있다. 


아는 사람만 아는 하지만 누구나 혹하는 매력적인 시스템이지만, 방법이 간단하지 않고 과정이 복잡하며 정보가 파편화 되어 있는 실정이다. 이 글에서는 모든 정보를 제공하기 보다는 전체적으로 어떤 과정을 거쳐서 구축이 되는지 그리고 각각은 어떤 기능을 하는지 설명하여 처음 시도하는 사람의 이해를 조금이라도 돕고자 한다. 


들어가기에 앞서 본 내용은 개인적인 사용을 전제하며 이로 발생할 수 있는 문제는 본인 책임임을 밝힙니다.


시스템의 구축은 다음과 같은 순서로 보통 요약할 수 있다.


  1. tvheadend 어플리케이션 설치
  2. omvs를 통한 채널 주소 캡쳐
  3. tvheadend에 입력하기 위한 채널 리스트 정리
  4. tvheadend에 입력
  5. EPG 구축



1. tvheadend 어플리케이션 설치


재전송과 녹화 등의 기능을 제공하는 핵심 어플리케이션을 설치한다. 하는 일이 서버이기 때문에 다양한 하드웨어에 설치되어 운용되고 있는데, Synology NAS나 라즈베리파이, 데비안 기반의 리눅스가 많이 쓰이고 있다. Synology NAS에 대한 설치는 여기를 참고한다.


  • 요지는 tvheadend-testing을 설치하는 것 (왜 그냥 tvheadend가 아닌 testing 버전을 설치해야하는지 이유를 모르겠다. 삽질을 하다보니 알아냈다. 여기를 보면 빌드 타입에 따라 release, stable, unstable, obsolete가 있는데 release or stable과 unstable과의 간극이 너무 크다. 예를 들면 m3u 파일을 통한 채널 일괄 등록 같은 기능이 지원되지 않는다거나... 크게 불안정하지는 않으니 unstable=testing 버전을 쓰도록 한다.) 
  • 그리고 로그인 문제가 있으니 구버전을 수동 설치하고 업그레이드 하는 방식으로 설치를 진행한다. 이는 권한 때문에 발생하는 고질적인 문제인데 시놀로지에서만 발생하는 것 같기도 하다. 이 문제는 버전에 따라 발생할 수도 있고 아닐 수도 있으니 이 또한 참고 바람.
  • 또 하나의 주의점은 아이디/비번을 설정할 때 특수문자는 주의해야 한다. @는 나중에 http authentication에 문제를 일으킬 소지가 된다.



2. omvs를 이용한 채널 주소 캡쳐


IPTV 신호는 멀티캐스트 데이터로 제공되는데 (사실 멀티캐스트 데이터가 뭔지는 모르지만 특정 가입자에게 보내는게 아니라 불특정 다수의 망 가입자에게 데이터를 전달하기 위한 방식) 우리가 사용하는 셋탑 박스는 이 데이터를 추출해서 영상신호로 바꿔서 TV에 전달해주는 것이다.


한 채널 당 한 IP로 되어 있는데 어떤 채널이 서비스 되고 있고 어떤 IP에 할당되어 있는지는 ISP에 따라 다르다. 고유의 운영 정보이기 때문에 일반적으로 공개되어 있지 않으나 omvs라는 프로그램을 통해서 채널 IP 주소와 간략한 정보(어떤 영상이 들어오는지 스크린 캡쳐)를 통해서 알 수 있다.


가이드는 이 곳을 참고


  • omvs를 실행하는 주체가 네트워크 구조상 셋탑 박스와 동일 혹은 상위에 위치해야 한다. 셋탑박스에서 나오는 인터넷 회선은 멀티캐스트 신호를 필터링 해버리기 때문이다.
  • 공유기가 omvs를 실행하는 컴퓨터의 상단에 있다면 공유기 설정에 따라 잘 안될 수 있다. 공유기마다 IPTV 관련 설정(Multicast routing, IGMP 등)이 있으니 잘 바꿔본다. 그래도 안된다면 통신사 모뎀 바로 아래에 놓고 해본다.
  • 무선으로도 된다는데 나는 유선으로만 가능했다.
  • 이런 프로그램을 설치할 때는 경로에 한글이 문제가 될 수 있으므로 속편히 드라이브 루트에 설치하여 사용한다. 
  • 설치 및 실행에 있어 관리자 권한을 유념하도록 하고, 방화벽과 백신도 꺼야 한다고 한다. (내 경우 방화벽은 실행 시에 허용 여부를 물어보니 특별히 끌 필요가 없었고, 백신을 쓰지 않아서 해당되지 않았다.) 
  • omvs -l 0 -j 5 xxx.xxx.xxx.xxx로 해당 IP를 검색하는데 하나하나 수동으로 할게 아니니 마지막을 xxx.xxx.xxx.0/24로 두면 마지막 네번째 단위의 254개 모두를 순차적으로 검색한다. 참고
  • 멀티캐스트 데이터는 한 채널당 10Mbps가 넘기 때문에 (참고) -j 파라미터를 많이 두면 공유기가 트래픽을 감당하지 못할 수 있다. 다시말해 채널이 제대로 검색되지 않을 수 있다. -j 2 정도가 추천값
  • 관례적으로 첫번째 단위 224~239가 Multicasting으로 할당되어 있으니 대략적으로 추측할 수 있다. (참고) 근데 뭐 앞자리를 몰라서 omvs를 쓰는 것은 아니니 크게 도움이 되진 않겠지...
  • 정확한 주소대는 netmanias여기서 볼 수 있다. 출처: nas.moe 블로그 글에서
  • 다른 ISP는 모르겠고 KT는 netmanias에 총 6개의 대역이 나와있는데, 하나의 오타가 있으니 현혹되지 말고 마지막 하나는 엮인글을 잘 찾아본다. 캡쳐된 스크린샷 기준으로 399개 정도 나온 것 같다. (399개면 뭐하나 보는 건 정해져 있는데...)



3. m3uman을 이용한 채널 정리


프로그램은 여기를 참고. 사용 방법과 팁은 다음과 같다.


  • omvs를 통해 얻은 채널 리스트 파일을 원하는 갯수만큼 열기를 통해서 자체 db에 로드할 수 있고 이 상태는 초기화를 하기 전까지는 계속 유지된다.
  • 자동 매칭 기능은 어떤 기능이지 아직 모르지만 왼쪽 리스트의 각 채널을 선택해서 스크린 샷을 확인하고 매칭되는 채널을 오른쪽에서 검색해서 더블 클릭하면 왼쪽에 정보가 들어간다. 
  • 저장을 하면 메인 창에 나오는 리스트의 상태를 저장한다. 따라서 필요없는 채널은 지우거나 해상도에 맞게 분류하여 원하는 대로 수정한 다음 저장하면 된다.
  • 삭제하고 저장하려면 실패하는 경우가 있는데 껐다 켜야 되는 경우가 있다.
  • 해상도에 따라 분류하는 것이 유용한데, 문제는 각 하위 항목의 갯수가 많거나하면 (자세한 이유는 모르지만 버그인듯) 이 분류가 제대로 안된다. 즉, 전체!=UHD+FHD+HD+SD 그러니 각 단계가 지날 때마다 누락되는 항목은 없는지 살펴가면서 진행한다.
  • 채널 수가 많으면 나중에 tvheadend로 로딩하고 epg를 연결하여 스캔할 때 시간이 오래 걸릴 수 있다. 꼭 볼 채널만 등록하는 것을 추천한다. 어차피 보는 채널은 정해져 있으니...


4. 채널 등록


여기에 너무 잘 정리되어 있다.


  • m3u 파일을 수동으로 편집할 때는 그 형식이 UTF-8 without BOM 이어야 한다. Notepad++을 이용해서 편집할 것을 추천. 참고



5. EPG 구축하기


EPG 정보를 tvheadend가 인식할 수 있는 형식의 xml 파일로 만들어 주거나 해야하는데 여기에 몇 가지 방법이 있는 것 같다. (개인적으로 생각할 때) 그 중 가장 깔끔한 tv_grab_file + epg2xml을 선택했다.


먼저 epg2xml을 구성한다. 소스는 여기인데 아마 클리앙의 wonipapa님이신듯


난 계정의 home 아래에 스크립트를 정리하는 편이데 폴더를 만들고 그쪽으로 이동

mkdir /var/services/homes/계정명/scripts/tvh

cd /var/services/homes/계정명/scripts/tvh


파일이 두개만 있으면 되므로 git 보다는 그냥 수동 다운로드

wget -q - https://raw.githubusercontent.com/sungpyohong/epg2xml/master/Channel.json

wget -q - https://raw.githubusercontent.com/sungpyohong/epg2xml/master/epg2xml.py


python 2.7 기반이므로 설치해야한다. DSM 6.0에 기본으로 깔려 있지만, 기존에 사용하던 entware-ng(optware)의 python을 쓴다.

opkg install python python-pip


권한 주고 실행해보면,

chmod +x epg2xml.py

./epg2xml.py


설치가 안된 모듈이 있는데 하나씩 설치해 준다. 내 경우는...

pip install requests beautifulsoup4


lxml도 깔아야 되는데, entware-ng에서는 직접 컴파일 해서 깔아야 한다. 안그러면 에러가...


gcc깔고, 헤더 세팅 해주고(이게 꼭 필요한지는 잘...), 또 libxml 헤더 링크 빠진거 걸어주고,

opkg install gcc

wget -qO- http://pkg.entware.net/binaries/armv7/include/include.tar.gz | tar xvz -C /opt/include

ln -s /opt/include/libxml2/libxml/ /opt/include/libxml


이제 실행해보면 epg 내용이 주르륵 뜬다.

./epg2xml.py -i KT -d



선택 항목이지만, 링크의 스크립트를 이용하면 m3u에 등록된 (enabled) 채널만 활성화하여 epg 모듈에서 가져올 수 있도록 channel.json을 자동 수정할 수 있다.



이젠 tv_grab_file을 설정한다. 먼저 다운로드 하고,

wget -q - https://raw.githubusercontent.com/nurtext/tv_grab_file_synology/master/src/remote/tv_grab_file


8번째 줄을 수정한다. 경로는 적당히 수정...

/opt/bin/python /var/services/homes/wiserain/scripts/tvh/epg2xml.py -i KT -d

43번째 줄 printf 부분을 수정한다. 표시될 이름으로...

printf "KT"


복사하고 권한 주기

cp tv_grab_file /usr/bin

chmod +x /usr/bin/tv_grab_file


이제 tvheadend 패키지를 재시작 해보면 Configuration >> Channel/EPG >> EPG Grabber Modules에 Internal: XMLTV: KT가 보인다. 혹시 EPG Grabber Modules가 안보이면 참고. 이후 과정은 여기여기에 잘 나와 있다.



댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함