Tvheadend

wwiki
이동: 둘러보기, 검색

https://tvheadend.org/

Hauppauge WinTV-dualHD

Raspbian bullseye

raspberry pi 3B

설치[편집 | 원본 편집]

장치가 연결되었는지 확인한다.

$ lsusb
Bus 001 Device 004: ID 2040:826d Hauppauge 955D

(stretch에서는 sources.list에 추가해서 4.2 버전을 받았는데, bullseye에서는 기본 탑재되어 있다.)

$ sudo apt install tvheadend

설치 도중 관리자 계정을 설정하는데, 설치 완료 후에 웹 인터페이스에 로그인 할 때 사용한다.

서비스로 실행된다. 서비스명은 tvheadend.service이다.

$ systemctl status tvheadend.service

서비스 파일을 보면 /etc/default/tvheadend 설정을 사용한다. 이 파일에 사용자등을 확인할 수 있다.

# TVH_USER
#   if set to "" will run as root
TVH_USER="hts"

hts 사용자로 실행되며, /home/hts를 홈으로 사용한다.

홈 디렉토리의 .hts/tvheadend에 관련 파일들이 있다.

사용자는 녹화와 관련하여 권한과 관련이 있다. NFS, samba를 사용하여 공유폴더에 녹화한다면 추가설정이 필요할 수 있다.

Configuration[편집 | 원본 편집]

http://localhost:9981

처음 접속하면 시작 마법사가 실행된다.

Gerneral[편집 | 원본 편집]

Base[편집 | 원본 편집]
DVB scan files[편집 | 원본 편집]

프리셋 파일들이 저장된 경로를 변경하려는 경우에만 지정한다. (특별한 경우가 아니라면 변경할 필요는 없다.)

Users[편집 | 원본 편집]

Access Entries[편집 | 원본 편집]

Username을 * 로 변경하면 아이디 없이 외부에서 접속이 가능하다.

DVB Inputs[편집 | 원본 편집]

Networks[편집 | 원본 편집]

ATSC등 텔레비전 신호의 타입을 "Network"로 구분하였다.
케이블TV 경우 ATSC-T Network를 사용한다.

튜터가 여러개인 경우에도 기본값으로는 하나만 잡기 때문에 "Add"를 눌러서 추가할 수 있다. "Network name"은 기본값으로 "ATSC-T Network"처럼 되는데, "tuner1", "tuner2"로 변경하는 것이 구분이 쉬워 보인다.

"Edit"를 클릭해서 Pre-defined muxes 선택하면 "Muxes"탭에 추가된다.

추가된 Mux들은 스캔을 성공하면 "Service"가 추가된다. 결과가 실패로 나오는 것들은 신호가 없거나 암호화 된 채널이다. (제공된 세탑에 복호화 기능이 있다.)

누락된 채널을 추가한 후에는 Scan status의 IDLE를 더블클릭해서 PEND로 변경하면 해당 Mux에 대한 서비스를 스캔한다.

Pre-defined muxes[편집 | 원본 편집]

Mux에는 1개 이상의 서비스로 구성될 수 있다. 서비스는 채널과 1:1로 매칭할 수 있다.

한국의 방송은 아직 프리셋 추가되어있지 않다.

방송사, 지역과 시간에 따라 주파수나 아이피가 달라지기 때문에 인터넷에 다운받은 경우에는 누락된 채널이 있을 수 있다.

시작 마법사를 실행한 후에는 /usr/share/tvheadend/data/dvb-scan/atsc 경로에 저장되는 것으로 보인다. (/usr/share/dvb/atsc 기본파일이 저장된 경로로 나중에 파일을 초기화하는 경우에 사용할 수 있다.)

kr- 의 형태로 시작하는데 국가를 구분한다. 대소문자는 구분하지 않는다. 파일은 읽기권한이 있어야 하고, 서비스를 재시작하여야 한다.

윈도우용 TV프로그램에서 채널을 스캔하여 주파수를 찾을 수 있으나 제조사마다 방법이 다르므로, 범용적으로 사용할 수 있는 팟플레이어에서 채널을 검색 후 환경설정을 내보내기하면 reg파일로 저장할 수 있다. (주파수가 1750000Hz 낮게 나오는 경우가 있는 것으로 보인다. FREQUENCY에 1750000을 더해서 프리셋 파일을 생성한다.)

#tvN
[CHANNEL]
	DELIVERY_SYSTEM = ATSC
	FREQUENCY = 303000000 
	MODULATION = VSB/8
	INVERSION = AUTO
#채널A, MBN
[CHANNEL]
	DELIVERY_SYSTEM = ATSC
	FREQUENCY = 309000000 
	MODULATION = VSB/8
	INVERSION = AUTO
#TV조선, JTBC ==> tuner2
[CHANNEL]
	DELIVERY_SYSTEM = ATSC
	FREQUENCY = 315000000 
	MODULATION = VSB/8
	INVERSION = AUTO


#MBC DTV
[CHANNEL]
	DELIVERY_SYSTEM = ATSC
	FREQUENCY = 567000000 
	MODULATION = VSB/8
	INVERSION = AUTO
#KBS1 대전
[CHANNEL]
	DELIVERY_SYSTEM = ATSC
	FREQUENCY = 573000000 
	MODULATION = VSB/8
	INVERSION = AUTO
#TJB DTV
[CHANNEL]
	DELIVERY_SYSTEM = ATSC
	FREQUENCY = 579000000 
	MODULATION = VSB/8
	INVERSION = AUTO
#KBS2 대전
[CHANNEL]
	DELIVERY_SYSTEM = ATSC
	FREQUENCY = 585000000 
	MODULATION = VSB/8
	INVERSION = AUTO
#EBS1, EBS2
[CHANNEL]
	DELIVERY_SYSTEM = ATSC
	FREQUENCY = 591000000 
	MODULATION = VSB/8
	INVERSION = AUTO
Force Scan[편집 | 원본 편집]

강제 스캔을 누르면 등록된 Mux들을 스캔한다. TV에서 채널검색을 다시 하는 것과 비슷하다.

Muxes[편집 | 원본 편집]

멀티플렉서는 multiple한 신호들을 하나의 라인에 보내는 것인데, Demux(demultiplexer)가 원하는 신호를 뽑아낸다. (IPTV의 경우에는 하나의 Mux가 하나의 서비스로 구성되었을 것으로 추측된다.)

Modulation[편집 | 원본 편집]

조절자. 동영상 데이터로 만들기 위하여 신호를 조절하는 방식.

8VSB[편집 | 원본 편집]

지상파의 디지털 방송에 대한 전송방식이다.

QAM[편집 | 원본 편집]

Quadrature Amplitude Modulation(직교 진폭 조절)

Services[편집 | 원본 편집]

Mux 스캔하면 서비스가 추출된다. 제공사에서 서비스되는 것들이라는 의미인 것으로 보인다. 채널에 매핑할 수 있다.

Service name[편집 | 원본 편집]

정확하게 나오지 않는 경우가 발생하나, 외부에서 재생되면 정상적으로 보인다.

Channel/EPG[편집 | 원본 편집]

EPG는 XMLTV 포맷을 사용한다.

Channels[편집 | 원본 편집]

"Map services"를 눌러 매핑한다.

EPG Grabber[편집 | 원본 편집]
Internal Grabber Settings[편집 | 원본 편집]

Cron문법이다.

서비스 시작할 때 internal grabbers를 실행할 수 있다.

EPG Grabber Modules[편집 | 원본 편집]

/usr/bin/tv_* 로 시작하는 파일을 서비스가 시작할 때 불러와 리스트업한다.
다음과 같이 간단하게 작성하고 리스트에서 description이 같은 "Internal:XMLTV:My korean grabber"를 선택하고 Enabled를 체크한다.

채널명과 일치하지 않는 경우에는 자동매칭되지 않으므로 Channels탭에서 직접 지정해 준다.

#!/bin/sh

if [ "x$1" = "x" ]; then
         curl https://plex.kr/xmltv.xml
    exit 0
fi

case "$1" in
    --description)
    echo "My korean grabber"
    ;;
    --version)
    echo "1.0"
    ;;
    --capabilities)
    echo "baseline"
    ;;
esac

Stream[편집 | 원본 편집]

Stream Profiles[편집 | 원본 편집]

default는 pass이다. MPEG-TS pass-thru, 녹화하면 ts확장자를 가진다.

Codec Profiles[편집 | 원본 편집]

Stream Profile에서 사용할 코덱 프로파일을 관리한다.

rpi3 에서 h264_omx는 deprecated. h264_v4l2m2m가 표준이 되었다. tvheadend 4.3버전에서 지원되지 않은 것으로 보인다. libx264로 cpu로 트랜스코딩이 가능하지만 사용량이 많아 녹화 스케줄과 겹친다면 문제가 생길 것으로 보인다.

ffmepg로 변환이 가능하다. bitrate는 설정하지 않으면 5M인 것으로 보인다. 원본 ts가 10M인 경우에는 화질저하가 생기므로 직접 지정 할 수 있다.

$ ffmpeg -i input.ts -c:v h264_v4l2m2m -b:v 10M -num_capture_buffers 64 -c:a copy out.mp4

num_capture_buffers를 지정하지 않으면 "All capture buffers returned to userspace. Increase num_capture_buffers to prevent device deadlock or dropped packets/frames."에러가 발생한다.

Recording[편집 | 원본 편집]

Digital Video Recorder Profiles[편집 | 원본 편집]
Filesystem Settings[편집 | 원본 편집]

Storage path에 쓰기 권한이 있어야 한다. 기본 실행은 hts 유저로 실행된다.

Directory permissions, File permissions는 기본값을 유지하는 것이 보안상 좋다.

Character set: 한국어라면 UTF-8이 무난하다.

Format string/Pathname specification: $t/$t.%F$-e$n.$x %F(날짜)앞에 구분하는 . 정도를 넣을 수 있다.

Filename/Tagging Settings[편집 | 원본 편집]

Replace whitespace in title with '-': 체크하면 지저분해 보일 수 있다.

Use Windows-compatible filenames: 윈도우에 파일을 복사하려는 경우등이 생길 수 있으므로 체크하는 것이 좋다.

Miscellaneous Settings[편집 | 원본 편집]

Post-processor command: 녹화 후 추가 명령을 실행할 수 있다. (ex: /home/pi/tvheadend/post-processor.sh "%f" )

하드웨어 인코딩을 지원하지 않는 라즈베리파이에서 유용하다. 인코딩 후 삭제하는 등 여러가지 명령어를 처리해야 하는 경우에는 스크립트 파일로 분리하는 것이 관리하기 용이하다.

Debugging[편집 | 원본 편집]

Configuration[편집 | 원본 편집]

Debug to syslog를 체크하면 Post-processor command 스크립트 수정에 용이하다.

API[편집 | 원본 편집]

https://github.com/dave-p/TVH-API-docs