TV 서버가 필요한 이유

일본은 지상파 TV 채널이 크게 발달해있습니다. 우리 나라는 유선 방송을 돈 내고 보는 사람이 많은 것과 크게 다릅니다.

지상파 TV, 위성 BS, 프리미엄 위성 CS로 크게 세 가지 채널로 양분되며, 지역 동축 케이블 TV와 인터넷 TV는 크게 힘을 못 쓰는 구조로 알려져 있습니다.

그래서 화제를 노리고 나오는 신작 애니메이션이나 외화들은 지역마다 있는 지상파 TV에 나오기 위해 애를 쓰는 것이죠.

볼만한 건 심야에만 있다

하지만 한국에 소개되는 청소년 이상 일반 성인을 대상으로 한 애니메이션은 상당히 늦은 시각에 방송되고 있다는 것을 뒤늦게 알게 됩니다.

즉, 낮이나 저녁에 TV를 틀었는데 왜 일본 생활에서 생각했던 덕질을 못하냐는 의문이 드는 것이죠.

하고 있는 것은 앵무새 같은 시사 프로, 광고, 이른 시간이나 낮에는 어린이용 애니메이션이 대부분입니다.

편성표를 보면 신작 애니메이션의 경우 심야에 한 번 방송하고, 재방송조차 없는 게 대부분입니다.

일본인들은 심야 본방 사수가 어렵다 싶으면 TV에 하드를 연결하거나, 블루레이 레코더를 활용하여 어쩔 수 없이 예약 녹화를 하는 경우가 많습니다.

일반 재생기 녹화 기능은 저작권법에 따라 제한이 걸려 있다

그러면 그냥 그렇게 보면 되지 않냐고 생각하시겠지만, 녹화된 파일은 녹화된 장치에서만 유효합니다.

파일의 전송권을 크게 제약하는 것이죠. TV가 아닌 PC나 휴대기기에서 보고 싶다고 복사를 할 수가 없는 것입니다.

전용 기기에서 녹화한 파일은 암호화되어 있습니다.

TS 따기라고 부르는, MPEG 데이터만을 순수하게 담은 TS 파일을 추출할 수만 있다면, 컴퓨터에는 팟플레이어 등의 재생기로, 휴대 기기에서는 인코딩하여 보거나 최신 스마트폰에서는 역시 재생기 앱만으로 볼 수 있게 됩니다.

어디서나 라이브를 볼 수 있다

Chinachu 서버가 웹 서비스를 제공하므로, 호환되는 클라이언트나 브라우저로 접속해서 시청할 수 있습니다.

수신기에 내장된 튜너 하나가 동시에 채널 하나를 수신할 수 있으니, 튜너 독점에 주의해야 합니다. 자세한 내용은 후술합니다.

법적 제약 주의

신작 애니메이션의 방송 서두에 항상 하단에 나오는 인터넷 무단 전송에 대한 경고를 생각해보면, 이렇게 녹화한 것을 함부로 남에게 전송해서는 안 된다는 것을 쉽게 알 수 있습니다.

일반 PC는 안 되는가?

사실 우리가 사용할 소프트웨어는 오픈 소스이면서 리눅스 계열에서 큰 문제 없이 돌아갑니다. 즉, 여러분의 일반 PC로도 충분히 가능합니다.

다만, 다음과 같은 이유로 별도 장치를 활용하길 권합니다.

  • 전원을 계속 켜두고 예약 녹화 장비로 쓰기엔 전기료가 과합니다.
  • 윈도우 유저는 멀티부팅을 해야 해서 번거롭습니다.
    • Windows 10의 WSL Bash로 Ubuntu 등을 내부에 깔아서 쓴다고 해도 제약이 있습니다.
    • 바로 USB 장비를 인식하지 못한다는 것입니다. 우리가 아래에 준비할 준비물을 전혀 쓰지 못하므로 조건을 만족하지 못합니다.
    • Opera Virtual PC 무료 버전에 플러스팩을 깔아주면 USB 호환을 시킬 수 있습니다만, 매 번 부팅시마다 다시 연결해줘야 하며 꼭 장치 하나씩 말썽을 일으키니 추천하지 않습니다.

준비물

PC 역할을 할 Raspberry Pi 3+ Model B

라즈베리파이가 구동하려면 SD 카드도 필요합니다.

모든 것이 갖춰진 패키지도 판매중이니, 적당한 가격의 물건을 물색해봅시다.

다만, OS는 직접 설치해야할 가능성이 높습니다.

USB 지상파 TV 튜너

PX-S1UD라는 작은 기기가 가격이 그나마 저렴하고, 리눅스용 드라이버도 호환되어서 널리 쓰이는 듯 합니다.

널리 쓰이는 기기가 문제를 덜 일으키니 믿고 씁시다.

끝부분은 안테나 단자에 꼭 잘 연결합시다.

IC 카드 리더

SCR3310

IC 카드 리더기는 아래 B-CAS 카드를 읽을 수 있는 수단입니다.

B-CAS 카드

B-CAS 카드는 스크램블(암호화)된 일본의 방송 신호를 해석하기 위해 필수적인 물건입니다.

구하는 방법이 궁합니다. 원래 수상기에 같이 딸려 나오는 식으로 신품 구입시 손에 들어옵니다. 그러나 카드 슬롯 없는 제품도 있고, 중고로 팔 때 없는 경우가 많으며, 그냥 별다른 이유 없이 신품인데도 안 주기도 합니다.

별도로 정식으로 방송협회에 주문하면 약 3천엔이 날아갑니다.

아마존을 뒤져서 중고로 500엔에 구해봅시다.

빨간색과 파란색으로 나뉩니다.

  • 빨간색: 다기능. 위성 BS와 지상파 모두 디스크램블이 가능합니다.
  • 파란색: 지상파만 디스크램블 할 수 있습니다.

500GB 이상급의 하드디스크

녹화한 TS 파일은 압축되지 않은, 실시간 수신 내용 그대로를 담습니다. 비트레이트라고 불리는 초당 용량이 그대로 누적되는 것입니다.

FullHD 1080p 수신에 약 15Mbps1 남짓으로 방송 한 프로에 6기가바이트 하는 건 흔한 일입니다.

충분한 용량을 준비하되, 일정 주기로 인코딩하여 화질과 용량의 균형을 맞춰서 작게 만들면 더 많이 저장할 수 있습니다.

시작

Raspberry 운영체제 설치

이에 관해서는 관련 정보를 활용해보세요.  NOOBS OS 설치로 충분합니다.

Pi에서 인터넷에 연결되는 것을 확인하고 SSH나 실제 Bash 콘솔에서 시작합니다.

사전 준비

이제 위에 있는 USB 장비는 죄다 라즈베리파이에 연결합니다.

이하 박스에 있는 내용은 bash 콘솔에 쳐야할 내용입니다.

필요한 것들
sudo apt-get install -y vim samba ntp wget curl git make cmake zip
sudo apt-get install -y pcscd libpcsclite1 libpcsclite-dev libccid pcsc-tools
sudo apt-get install -y autoconf build-essential git-core libssl-dev libtool libboost-all-dev pkg-config yasm pkg-config

설치

PX-S1UD_driver_Ver.1.0.1.zip 백업본

튜너 드라이버 설치
mkdir ~/PX-S1UD
cd ~/PX-S1UD
wget http://plex-net.co.jp/plex/px-s1ud/PX-S1UD_driver_Ver.1.0.1.zip
unzip PX-S1UD_driver_Ver.1.0.1.zip
sudo cp PX-S1UD_driver_Ver.1.0.1/x64/amd64/isdbt_rio.inp /lib/firmware/
카드리더기 설치
sudo pcsc_scan

여기서 Japanese Chijou Digital B-CAS Card라는 문구를 확인할 수 있어야 합니다.

c44e16dbb0e2.zip의 백업본

arib25 라이브러리 설치
sudo su –
mkdir ~/tmp
cd ~/tmp
wget http://hg.honeyplanet.jp/pt1/archive/c44e16dbb0e2.zip
unzip c44e16dbb0e2.zip
cd pt1-c44e16dbb0e2/arib25
make clean && make
make install

arib25는 B-CAS 카드 표준에 맞게 읽을 수 있는 라이브러리로 추정됩니다.

recdvb-1.3.1.tgz의 백업본

recdvb 설치
cd ~/
mkdir ~/recdvb
cd ~/recdvb
wget http://www13.plala.or.jp/sat/recdvb/recdvb-1.3.1.tgz
tar xvzf recdvb-1.3.1.tgz
cd recdvb-1.3.1
./autogen.sh
./configure –enable-b25
make
make install
chinachu 설치 환경을 위한 npm n 구축
apt-get install -y nodejs npm
npm cache clean
npm install n -g
n 6.10.3  n 8.x
apt-get purge -y nodejs npm
apt-get -y autoremove

현재 chinachu 버전업으로 인해 npm 8 버전을 써야 하는 것으로 기억하는데, 오류 메시지가 떴을 때 최소 요구 사항을 확인하고 버전을 맞추면 됩니다.

node의 버전 확인
node -v

버전이 잘 표시되어야 합니다.

Mirakurun 설치

Mirakurun은 제조사 드라이버를 통해 튜너를 제어하는 소프트웨어입니다.

mirakurun 설치
sudo npm install pm2 -g
sudo npm install mirakurun -g –unsafe –production
sudo npm install rivarun -g
sudo npm install arib-b25-stream-test -g –unsafe
mirakurun 동작 확인
ps ax | grep Mirakurun

숫자로 PID가 잘 표시되면 OK입니다.

Tuner 설정
sudo nano /usr/local/etc/mirakurun/tuners.yml

여기 내용으로 다음과 같이 붙여넣습니다.

tuners.yml
– name: PX-S1UD-1
types:
– GR
command: recdvb –b25 –dev 0 – –

– name: PX-S1UD-2
types:
– GR
command: recdvb –b25 –dev 1 – –

갖고 있는 튜너는 하나지만 둘 다 넣어야 성공하였습니다. 원글은 분배기를 통해 두 개 튜너를 연결했습니다.

채널 설정

채널 수동 설정을 하고 싶으면 다음과 같이 입력하면 됩니다.

Channel 수동 설정
sudo nano /usr/local/etc/mirakurun/channels.yml

그러나 무엇이 잡히는지도 모르기 때문에 우리는 자동 설정을 할 것입니다. 안테나가 정상적으로 연결되고 튜너가 인식되어야 가능합니다. 아래 명령을 친 다음, 채널을 찾았는지 바로 명령 결과로 각각 뜨기 때문에 지켜보면 됩니다. 채널이 있을 법한 구간에서 오류가 지속적으로 난다면, 튜너를 재연결하고 재부팅해보세요.

Channel 자동 설정
curl -X PUT http://localhost:40772/api/config/channels/scan”

40772 포트는 Mirakurun 서버에 연결할 수 있습니다. 연결에 실패하면 Mirakurun의 재설치가 필요합니다. npm으로 설치했으니 node부터 올바르게 설치되었는지 필히 확인하세요.

Mirakurun 재시작
mirakurun restart

모든 변경사항을 적용하기 위해 재시작합니다.

EPG 수신에 대략 10분 정도 기다려준 다음에,

EPG 수신 확인
rivarun –list | sed ‘s/},/},\n/g’

이것을 입력하여 EPG 내용이 올바르게 받아지는지 확인합니다.

로그 로테이트 설정
sudo pm2 install pm2-logrotate
sudo nano /etc/logrotate.d/mirakurun
mirakurun 파일 내용
/usr/local/var/log/mirakurun.stdout.log
/usr/local/var/log/mirakurun.stderr.log
/{
daily
compress
rotate 7
missingok
notifempty
}

Chinachu 설치

Chinachu는 녹화 스케쥴 관리, 실시간 방송 스트리밍이 가능한 PVR 매니저입니다.

Chinachu 설치
adduser chinachu
su – chinachu
git clone git://github.com/kanreisa/Chinachu.git ~/chinachu
cd /home/chinachu/chinachu
./chinachu installer

여기서 설치 방법을 물어볼텐데, 1을 입력하고 엔터를 눌러서 1) Auto (Full)을 선택합니다.

시간이 매우 오래 걸리므로 대기합니다.

환경 설정

녹화 설정 파일 초기화 및 환경 설정 입력
echo “[]” > rules.json
cp config.sample.json config.json
nano config.json
config.json에서 Key값에 맞게 Value를 수정해야할 부분 (발췌)
“uid”: “chinachu”,
“recordedDir” : “./recorded/”,
“wuiOpenPort”: 10772,

uid에는 우리가 지금 만든 계정 이름을 넣어주시고 (여기서는 chinachu), recordedDir는 녹화 파일이 저장될 디렉토리입니다. 폴더 소유자 및 권한에 주의하세요.

포트는 웹에서 접속 가능한 곳을 지정하며 별도의 인증 기능이 빠져있으니 외부 접속에 유의해야 합니다.

chinachu의 로그 로테이트 설정

chinachu 로그 로테이트 설정
exit
nano /etc/logrotate.d/chinachu
chinachu
/usr/local/var/log/chinachu-operator.stderr.log
/usr/local/var/log/chinachu-operator.stdout.log
/usr/local/var/log/chinachu-wui.stderr.log
/usr/local/var/log/chinachu-wui.stdout.log
{
weekly
compress
rotate 4
missingok
notifempty
}

동작 확인

확인 후 마지막 단계에서 에러가 안 나면 Ctrl+C
su – chinachu
cd ~/chinachu
./chinachu service wui execute
데몬 설정 확인
exit
cd /home/chinachu/chinachu
pm2 start processes.json

프로세스 시작 후 10초 정도 대기한 다음 다음 명령을 입력합니다.

상태 표시 후 online 문구 확인
pm2 status
현재 설정 저장
pm2 save

향후 config.json의 수정을 한 다음에 할 일

설정 읽어들이기 위한 chinachu 재시작 방법
pm2 restart chinachu-wui chinachu-operator
로그 파일 위치 일람
/usr/local/var/log/chinachu-operator.stderr.log
/usr/local/var/log/chinachu-operator.stdout.log
/usr/local/var/log/chinachu-wui.stderr.log
/usr/local/var/log/chinachu-wui.stdout.log
EPG 수동 갱신 방법
su – chinachu
cd ~/chinachu
./chinachu update
브라우저로 접속하는 주소
http://(라즈베리파이 IP주소):10772/

이제 브라우저에 chinachu 화면이 정상적으로 뜨는 것을 확인할 수 있습니다.

Footnotes

  1. 메가비트. 통신 속도에는 비트를 일반적으로 씁니다. 8bits = 1byte임에 주의합시다.