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서버를 구축하면서 겪었던 여러 시행착오와 애로 사항을 정리할 수 있었고 무엇보다 여러분께 작은 정보라도 드릴 수 있어 나름 보람 있었습니다. 이상 입니다.
2018.10.26 05:00 신고
고생하셨습니다. 기술적인 포스트가 인기가 없군요 ㅠㅠ,저는 이런페이지를 좋아해서뤼 ㅋㅋㅋ따라하다봄 막히는게 꼭있고 해결하다봄 깨달음이 오고 ,응용도 가능한지라... ㅎㅎ
인기는 없어도 구글링하다가 들오오시는 분들도 많을거에요 ^^ 저도 첨에는 TV라는 키워드로 여기까지 와 있는것 처럼요^^;
아무튼 고생하셨습니다.
포스트하신거 푹 한번보고 지적질할만한곳있음 지적질도 하도록하겠습니다. ㅎㅎ
그럼 포스트 잘보고 갑니다^^ 굿잡입니다, 탑이슈님 ㅎ
2018.10.26 17:22 신고
네 지적 질 환영합니다. 제 포스트들이 구글 친화적이긴해요. 앞전에 운영했던 블로그도 몇몇 글은 아직도 방문자가 많아요. 구글은 1순위 랭크한번되면 장기집권이 가능하거던요. 혹시 다루어 줬음하는 주제의 분야는 없는지요? 뭐 제가 다 방면으로 지식이 많은건 아니지만 참고해 보겠습니다.
2018.10.28 09:21
tvheadend를 사용하고싶었는데 nas가 없어서 포기했다가 탑이슈님 글을 보고 시도해볼수있게되어 영광입니다. 그런데 이런류의 글이 인기가 없다는건 아쉽네요 ㅠㅠ
2018.10.28 09:33 신고
저 또한 님과 같은 이유로 이 연재를 시작하였고 제 개인적 기질이 아무도 도전하지 않은 분야에 (맨땅에 헤딩 하기) 도전하기를 좋아합니다. 과정이 어려울수록 성취감은 배가되죠. 이렇게 인기(?)를 표해 주시니 감사할 따름입니다.ㅋㅋ
2018.10.29 01:19
여기는 고수분들이 하는곳인구요... 감사합니다
2019.04.04 14:57
감사합니다. 따라 하다보니 시간 가는줄 모르고 작성했네요 ㅎㅎ 마지막부분에서 뭔가 오류가 났는데 좀더 알아 봐야 겟습니다.
2019.04.04 15:51 신고
글 남겨주셔서 감사합니다. 잘안되는 부분이 있으면 질문주세요^^.
2019.04.05 23:08
운영자님 게시물 4번까지 이상없이 설정되어 Tvheadend에서 EPG정보도 이상없이 올라오고 , 접속 및 시청이 가능합니다.
5번(이번 게시물) 에 아래 명령어 부터 진행이 되지 않네요.
sudo php epg2xml.php -i SK -o /var/www/html/xmltv.xml
root@bena-ubuntu:/home/benawa/epg2xml-master# sudo php epg2xml.php -i SK -o /var/www/html/xmltv.xml
PHP Fatal error: Uncaught Error: Call to undefined function mb_internal_encoding() in /home/benawa/epg2xml-master/epg2xml-web.php:2
Stack trace:
#0 /home/benawa/epg2xml-master/epg2xml.php(3): include()
#1 {main}
thrown in /home/benawa/epg2xml-master/epg2xml-web.php on line 2
root@bena-ubuntu:/home/benawa/epg2xml-master#
root@bena-ubuntu:/var/www/html# ls -la
합계 8732
drwxr-xr-x 2 root root 4096 4월 5 22:43 .
drwxr-xr-x 3 root root 4096 4월 4 14:47 ..
-rw-r--r-- 1 root root 10918 4월 4 14:47 index.html
-rw-r--r-- 1 root root 20 4월 5 22:43 info.php
-rw-r--r-- 1 root root 8909008 4월 5 22:43 xmltv.xml
마찬가지로 아래 명려어에서도 오류를 뿜뿜 합니다.
$sudo python epg2xml.py -i SK -o /var/www/html/xmltv.xml
혹시 제가 잊어버린 내용이 있을까요 ??
항상 감사드립니다. ~
2019.04.06 00:34 신고
php모듈 설치와 관련 있지싶습니다 엔코딩 에러 거던요. php모듈 설치하셨는지?? 근데 파이썬하고는 관련이 없는데 파이썬도 에러가 나요?? 파이썬도 에러가 난다면 파이썬 모듈 부분 살펴보세요.
2019.04.08 16:09
감사합니다. 퇴근후 다시 달려 봐야겠네요 지금도 엄청 잘봐지네요 ^.,^감사합니다.
2019.11.01 10:04
python으로 epg2xml.py를 실행해보면 무슨 문제인지 모르겠으나 결국은 실행되지않지만 php로 epg2xml.php를 실행하면 아무문제 없이 xmltv.xml 파일이 생성됩니다.
python이 안돌아가면서 사실은 tvheadend 의 (Internal XMLTV: My Custom Grabber)이 동작을 안해서 EPG정보를 못가져오고 있는데 혹시 tvheadend에서 php로 생성된 xmltv.xml을 이용할수 있는 방법이 있는지요?
2019.11.02 07:57 신고
tv_grab_file 열어 보면 py(파이썬)로 하껀지 php로 하껀지 정의 할수 있습니다.
epg2xml.py를 맨앞줄에 #을 붙여서 주석처리하고 php를 추가해 보세요.
그리고 파이썬이 에러 나는 이유는 네이버 epg를 긁어오는 부분일겁니다. 이또한 에러 나는 라인 맨앞에 주석처리하면 됩니다. 제기억으로는 네이버epg읽어오는 스크립트 처음과 다음줄 두줄입니다. 에러나는 라인은 파이선을 돌리면 몇번째 라인에 에러나는지 알수 있습니다.
감사합니다.