tvheadend에 아파치(Apache) 웹서버를 설치하여 외부에서 접근(공개) 가능한 EPG 정보 xmltv.xml url 설정 - 우분투 NAS ⑤
지난 포스트에서 운분투를 설치하고 각종 설정과 tvheadend를 설치해 TV채널을 등록하고 EPG정보 출력하는 작업까지 알아보았습니다.
오늘 이 시간에는 우분투 + tvheadend 통한 HTSP(Home Tv Streaming Protocol, TV 스트리밍 프로토콜)서버 구현 마지막 시간으로 epg정보를 사용하기 위해 외부에서 접근 가능한 xml을 생성하는 과정을 소개합니다. 우분투 + tvheadend에 대한 연재는 마치지만 우분투에서 멀티미디어 활용을 위한 여러가지 방법 등은 계속해서 포스팅 할 계획입니다.
아파치(Apache) 웹서버와 mysql설치
$sudo apt-get install apache2
$sudo apt-get install mysql-server
위 명령으로 아파치를 설치할 수 있습니다. mysql-server는 별도 계정 설정을 해야 사용 가능합니다 만, 이 시간에는 다루지 않겠습니다. 차 후 Apache + mysql + PHP에 관한 포스팅을 계획 중임으로 그때 자세히 다뤄보겠습니다.
http://localhost/로 접속해 봅니다. 아래와 같은 화면이 나온다면 잘 설치된 것입니다.
PHP 설치
$sudo apt-get install php php-mysql
epg2xml.php에서 필요로 하는 PHP 모듈설치
$sudo apt-get install php-curl php-json php-dom php-mbstring
아파치 웹서버를 재 시작해 줍니다.
$sudo service apache2 restart
PHP작동 유무와 설치된 모듈에 대한 확인을 위해 다음의 php파일을 생성해 줍니다.
$cd /var/www/html
$sudo nano info.php
나노 텍스트 편집기에서 다음의 내용을 추가하고 저장합니다.
<?php phpinfo(); ?>
웹브라우저에서 http://localhost/info.php 입력해 봅니다.
위와 같이 php정보와 관련 모듈이 설치되었음을 확인합니다. 이상으로 모든 설치는 끝났습니다.
외부에서 접근 가능한 공개 xmltv.xml 생성하기
이제 지난번 포스트에서 설정했던 /home/mypc(자신의계정)/epg2xml-master로 이동합니다.
$cd /home/mypc/epg2xml-master
이제 다음의 명령으로 xmltv.xml을 생성합니다.
$sudo php epg2xml.php -i LG -o /var/www/html/xmltv.xml
지난번 포스트에서는 epg2xml.json을 수정해 아무런 옵션을 주지 않고 python으로 EPG정보를 갱신하였으나 이번에는 '-i LG -o /var/www/html/xmltv.xml'라는 옵션을 주었습니다. 아무런 옵션을 주지 않으면 epg2xml.json에 설정된 내용(옵션)을 참고해 EPG정보를 생성합니다. 즉, hvheadend의 internal grabber는 epg2xml.json의 내용을 참고해 EPG정보를 생성하고, 위의 옵션을 준 것은 epg2xml.json를 수정하지 않고 EPG정보를 생성하기 위함입니다.
옵션 '-i LG'는 통신사 ISP를 뜻하며 '-o /var/www/html/xmltv.xml'는 /var/www/html위치에 xmltv.xml이라는 파일을 출력(-o)하기 위한 옵션입니다.
사실 오늘 설치한 php는 설치하지 않아도 지난번 포스트의 python을 이용해 xmltv.xml을 생성할 수 있습니다.
$sudo python epg2xml.py -i LG -o /var/www/html/xmltv.xml
그럼에도 불구하고 오늘 php를 설치한 건 이왕 웹서버를 운영하기로 한 거, 앞으로 다른 웹서비스를 위한 웹페이지 생성 및 데이터 처리에 있어 php와 mysql을 이용하면 여러모로 도움이 되기 때문입니다. 그리고 epg2xml는 python외 php도 지원하고 있다는 걸 여러분에게 알려주기 위함입니다. 또 한 가지, 필자의 경험으로 볼 때 python보다 php가 epg정보를 더 잘 받아 온다는 느낌이 들어서 입니다. 실제 python을 사용할 때 표시되지 않던 epg정보가 php로 사용하면 표시되는 경험이 있습니다.
우분투 crontab, 예약 작업(schedule) 등록하기
internal grabber는 hvheadend에서 자동으로 갱신 됩니다. 하지만 위에서 생선한 xmltv.xml는 자동으로 갱신 되지 않습니다. 물론 hvheadend에 또 하나의 grabber를 생성해 이를 구현 할 수도 있으나 우분투 리눅스에는 crontab이라는 예약 작업을 도와주는 툴이 있기 때문에 구지 hvheadend의 도움을 받을 필요가 없습니다.
$sudo crontab -e
위의 명령을 실행하면 사용할 텍스트 에디터를 선택하라는 메세지가 나옵니다. nano에디터를 선택해 줍니다. 다음의 라인을 추가해 줍니다.
0 2 * * * php /home/mypc/epg2xml-master/epg2xml.php -i LG -o /var/www/html/xmltv.xml
crontab은 매일 새벽 2시에 위의 명령을 수행합니다. 즉, 예약 작업을 등록한 것이지요.
관리 상, 좀 더 편리하게 사용하려면 쉘(shell) 스크립트(script)를 하나 만들어 주면 편합니다.
$sudo nano /usr/bin/epg_uptate.sh
#!/bin/sh
php /home/mypc/epg2xml-master/epg2xml.php -i LG -o /var/www/html/xmltv.xml
위의 내용을 추가하고 적당한 권한을 줍니다.
$sudo 755 /usr/bin/epg_update.sh
이렇게 만든 스크립트는 아래의 명령만 주면 위의 내용이 실행됨으로 매우 편리합니다.
$/usr/bin/epg_uptate.sh
다시 crontab을 수정해 줍니다. 0 2 * * * php /home/mypc/epg2xml-master/epg2xml.php -i LG -o /var/www/html/xmltv.xml 이 라인을 지우고 아래와 같이 입력합니다.
0 2 * * * /usr/bin/epg_update.sh
참고로 crontab의 예약 작업(목록)확인은 crontab -l 명령으로 확인할 수 있습니다.
모든 작업은 끝났습니다. EPG를 지원하는 플레이어에서 외부 url을 등록하면 EPG정보를 사용할 수 있습니다. 위 작업 기준으로 외부 url은 http://[자신의 서버 ip]/xmltv.xml 입니다. 즉, 자신의 공인 ip가 222.111.333.444라면 http://222.111.333.444/xmltv.xml 이 최종 외부 url이 되겠습니다. 이렇게 생성된 외부 공개 url은 다른 지인 등 여러 이용자와 공유할 수 있습니다.
마치면서..
우분투와 tvheadend 조합의 HTSP서버 구성은 여기가 끝입니다. 그동안 많은 일이 있었지만 이 포스트를 준비하면서 과거 한 5년 정도 서버 보안 회사에서 일했던 기억들이 새록새록 합니다. 그 당시 유닉스(UNIX) 서버 운영했던 경험이 있어 이 포스트를 무사히 마칠 수 있었고 참 다행으로생각합니다.
이런 류의 기술적인 내용을 닮고 있는 포스트는 조회수도 안 나오고 인기가 별로 없습니다.ㅠㅠ 하지만 제가 tvheadend서버를 구축하면서 겪었던 여러 시행착오와 애로 사항을 정리할 수 있었고 무엇보다 여러분께 작은 정보라도 드릴 수 있어 나름 보람 있었습니다. 이상 입니다.
댓글