wiserain / docker-tvheadend

Docker-tvheadend with Korean EPG grabber
https://hub.docker.com/r/wiserain/tvheadend
43 stars 17 forks source link
docker epg tvheadend

docker-tvheadend

다음의 특징을 가지는 docker-tvheadend 이미지

  1. linuxserver/tvheadend 기반: 다양한 docker용 앱 이미지를 제작/배포하고 있는 linuxserver.io소스를 기반으로 한다. 차이점은 tvheadend 빌드 옵션을 보다 소스의 기본값에 충실하여 더 나은 실행환경을 도모한다.

  2. 대한민국 IPTV를 위한 EPG grabber 탑재: 이 기능은 epg2xml과 내장 tv_grab_file을 이용하였다.

실행 방법

아래 세가지 방법 중 자신에게 맞는 하나를 선택하여 컨테이너를 생성/실행한다.

docker 명령어 사용시

docker run -d \
    --name=<container name> \
    --network=host \
    -v <path to recordings>:/recordings \
    -v <path to config>:/config \
    -v <path to epg2xml>:/epg2xml \
    -e PUID=<UID for user> \
    -e PGID=<GID for user> \
    wiserain/tvheadend:latest

docker-compose 사용시

version: '2'

services:
  <service name>:
    container_name: <container name>
    image: wiserain/tvheadend:latest
    restart: always
    network_mode: "host"
    volumes:
      - <path to config>:/config
      - <path to recordings>:/recordings
      - <path to epg2xml>:/epg2xml
    environment:
      - PUID=<UID for user>
      - PGID=<GID for user>

Synology DSM 사용시: 별도 문서 참조

작성 시점이 오래 되어 상세 내용은 조금 다를 수 있으니 지금 보고 있는 문서의 내용을 우선으로 한다.

EPG 사용법

컨테이너를 실행 후 http://localhost:9981/를 통해 WEBUI로 접속한 다음, Configuration > Channel / EPG > EPG Grabber Modules로 이동하면 아래 이미지와 같이 3개의 IPTV 서비스를 위한 internal XMLTV grabber가 마련되어 있으니 Enable 시켜서 사용하면 된다.

tvh_epg_grabber_modules

처음 EPG 설정 시 유의사항

Socket으로 직접 밀어 넣는 external grabber와 달리 내부적으로 cron을 실행한다. 아래 그림과 같이 EPG Grabber 탭에 보면 기본 설정으로 매일 12시 24시 4분에 실행해서 epg를 가져온다. 하지만 버그가 있는지 기본 설정을 무시하고 끊임없이 실행되는 문제가 초반에 있다. 그러므로 설정을 바꿔서 저장해주고 Re-run Internal EPG Grabbers을 눌러서 실행해준다. 어떤 값으로든 변경 후에는 문제없이 정상적으로 동작하는 것을 확인하였다. Cron 설정 방법에 대해서는 링크를 참고바람.

tvh_epg_grabber_cron

관련 설정들

이미지 태그 네이밍 규칙

{main_tag}-{tvh_ver}
선택 가능한 값 설명
main_tag | latest, ubuntu - latest: 최신 이미지 버전. 새로운 기능을 체험할 수 있는 개발 버전으로 약간 불안정할 수 있다.
- ubuntu: latest 태그와 같은 tvheadend 버전을 따르지만, alpine 대신 ubuntu를 기반으로 빌드하였다.
tvh_ver 형식은 {tvheadend version}-{build number} 이며 생략할 경우 최신 빌드를 따름

모든 조합이 가능하지는 않으며, 사용 가능한 이미지 버전은 여기서 확인할 수 있다. 특별한 일이 없으면 매주 한 번 새롭게 빌드 된다.

네트워크 모드

docker는 멀티캐스트 패킷 라우팅이 안되기 때문에 tvheadend를 이용해 IPTV를 보기 위해서는 무조건 hosted network를 사용해야 한다. 일부 낮은 docker engine 버전(예를 들어 Synology DSM 5.2)에서는 지원하지 않으니 참고. hosted network란 포트 포워딩이나 매핑을 하지 않고 호스트의 네트워크에 그대로 붙인다는 의미이므로 tvheadend가 사용하는 포트를 바꾸고 싶다면 앱 실행 시 옵션을 주어서 변경해야 한다. docker에서는 다음과 같이 환경 변수를 추가해주면 된다. RUN_OPTS=--http_port <port number> --htsp_port <port number>

환경변수

docker-tvheadend의 동작을 제어하는 환경변수와 가능한 옵션을 설명한다. 참고로 환경변수는 컨테이너 생성 시점에 그 값이 고정 되므로 변경을 원한다면 컨테이너를 삭제/재생성 해야한다. 먼저 필수로 지정해야하는 환경변수는 다음과 같다.

이름 설명 기본값
PUID / PGID | 컨테이너 내부의 앱이 외부의 볼륨에 접근할 수 있도록 하는 권한에 대한 것이다. 여기를 참고하여 설정한다. 적절하게 설정하지 않으면, EPG 관련 스크립트가 동작하지 않거나 녹화가 안될 수 있다. | 911 / 911
TZ | docker-tvheadend에 적용되는 timezone 설정이다. 이게 제대로 안되면 EPG에 시간차가 발생한다. | Asia/Seoul

epg2xml 관련 환경변수는 다음과 같다.

이름 설명 기본값
EPG2XML_CONFIG | 설정 파일 경로 | /epg2xml/epg2xml.json
EPG2XML_LOGFILE 로그 파일 경로 없음
EPG2XML_LOGLEVEL | 로그 레벨 | INFO
EPG2XML_CHANNELFILE | 채널 파일 경로 | /epg2xml/Channel.json
EPG2XML_XMLFILE | EPG 저장 경로 | /epg2xml/xml/txmltv.xml

추가로 사용 가능한 환경변수는 다음과 같다.

이름 설명 기본값
RUN_OPTS | tvheadend 바이너리에 직접 전달되는 실행옵션. 대표적으로 tvheadend의 동작 포트를 바꿀때 쓸 수 있다. --http_port <port number> --htsp_port <port number>
TVH_DVB_SCANF_PATH | TVH 일반 설정 가운데 DVB 스캔 파일 경로를 컨테이너 시작할 때 지정한다. 이 경로를 기준으로 볼륨 매핑 -v /my/scan/folder:/usr/share/tvheadend/data/dvb-scan/atsc:ro을 하면 /my/scan/folder 폴더에 있는 자신만의 주파수 설정 파일을 이용해서 스캔할 수 있다. | /usr/share/tvheadend/data/dvb-scan/
TVH_UI_LEVEL | TVH 일반 설정 가운데 보기 옵션. 전문가 수준으로. | 2

어쩌면 도움이 될지도 모르는 정보

자주 묻는 질문

문제가 발생하면 읽어보세요.