Synology NAS의 Video Station을 설치하고, PC나 폰의 DS Video로 영상을 감상하면 Frame Rate가 낮아 정상적으로 영상을 보기가 어렵습니다. 그저 스트리밍이 가능하다는것에 의의를 두는 그런 느낌이였죠. 이제 이걸 AirVideo 부럽지 않은 동영상 스트리밍 환경을 구축하여 봅시다.
제가 전에 동영상 스트리밍을 이용하던 환경은 이렇습니다.
1) Synology NAS + WebDAV
2) iPad + nPlayer($2.99) + Wibro, Tethering
3) Android + Dice Player + 3G or LTE
1번에서 동영상 파일에 접근을 위해 WebDAV를 사용합니다. WebDAV를 사용하면 80(HTTP), 443(HTTPS)포트를 이용하기 때문에 거의 모든곳에서 접속할 수 있습니다. 해당 환경을 만든 다음, WebDAV를 지원하는 iPad(iPhone)의 nPlayer 앱이나 Android의 DicePlayer 앱을 사용하여 구축해놓은 Synology NAS에 접속하여 정상적으로 영상을 즐깁니다.
위와 같이 사용하면 다음과 같은 문제점이 발생합니다.
1) nPlayer의 DTS 라이센스 관련 업데이트로 인해 DTS 코덱이 들어간 영상은 소리가 나오지 않습니다. (AV Player 등 타 플레이어도 마찬가지)
2) 모바일 환경(3G, Wibro, LTE)에서 대역폭 이상의 높은 비트레이트의 파일을 재생할 경우 끊김이 발생할 확률이 높습니다. 통신망 환경이 좋지 못하면 더더욱 그렇습니다.
따라서, 두가지의 문제를 해결하려면 트랜스코딩(실시간 인코딩)이 가능해야 합니다. 첫번째 해결책은 iOS의 AirVideo 앱을 이용하는 것이고, 두번째 해결책은 Video Station을 이용하는 방법이 있습니다. iOS의 AirVideo를 써 본 결과, 컨테이터에 따라 자막까지 알아보기 힘든 화질 저하가 발생하는 영상들이 있었기에 해당 앱으로는 일찌감치 포기하였습니다. 안드로이드의 경우 Qloud Media가 있는것 같은데 써보지는 않았고요. 때문에, 마지막 카드인 Video Station에 집중하여 봤습니다.
Synology NAS에 들어간 Video Station은 트랜스코딩도 지원할 뿐더러, 방대한 양의 DB를 통해서 라이브러리를 정리해 주기도 합니다. 정말 좋은 App이죠. 다 좋은데 이놈의 문제점은 트랜스코딩 과정을 거치면서 Frame Rate가 반토막나서 영상을 집중하여 보기가 힘듭니다. 고민을 좀 하다가, 시놀로지 홈페이지에 패키지 파일이 올라온것을 캐치하여 한번 뜯어보았습니다. tar로 압축이 되어있었기 때문에, 의외로 쉽게 찾아 낼 수 있었습니다.
이 과정에서 제가 목표했던것은 다음과 같습니다.
1) Frame Rate가 24프레임 이상 지원 되어야 할 것
2) 자막은 필수
3) 모바일 환경에서 통신망 환경에 따라 비트레이트 변경을 통해 끊김없는 감상이 가능해야 할 것.
자, 그럼 시작합니다.
1) Frame Rate가 24프레임 이상 지원 되어야 할 것
먼저, 패키지 관리자에서 Video Station을 설치하여 줍니다. (이미 설치되어있다면 패스)
그 다음 시놀로지 관리패널 > 제어판 > 터미널로 들어가 SSH 서비스 활성화에 체크하여 줍니다.
다음으로, 쉘을 이용해 root 계정으로 시놀로지에 접속합니다. 비밀번호는 관리패널의 admin 계정과 같습니다. 윈도우 사용자는 putty를 이용하세요.
MacBook-Pro:~ Ryun$ ssh root@192.168.0.100
그다음 VideoStation이 설치된 디렉토리로 접근합니다. 여기서 저의 경우 VideoStation이 volume1(볼륨1)에 설치되어있기 때문에 경로는 /volume1/@appstore/VideoStation/etc 로 나타납니다.
RyunBox> cd /volume1/@appstore/VideoStation/etc
그 다음 뭐가있는지 확인해보면,
RyunBox> ls -l
drwxr-xr-x 2 root root 4096 May 1 03:20 HDHomeRun_channelmap
drwxr-xr-x 2 root root 4096 May 1 03:20 KernelFirmwares
drwxr-xr-x 2 root root 20480 May 1 03:22 KernelModules
-rw-r--r-- 1 root root 189 Apr 12 16:18 SYNO.SDS.VideoStation.Application.legacy.conf
-rw-r--r-- 1 root root 37580 Apr 12 16:18 TransInfo_HLS
-rw-r--r-- 1 root root 41468 Apr 12 16:18 TransInfo_SS
-rw-r--r-- 1 root root 5034 May 1 04:17 TransProfile
-rw-r--r-- 1 root root 95 Apr 12 16:18 country
-rw-r--r-- 1 root root 31 Apr 12 16:18 default.conf
drwxr-xr-x 2 root root 4096 May 1 03:20 index
-rw-r--r-- 1 root root 571 Apr 12 16:18 model
-rw-r--r-- 1 root root 740 Apr 12 16:18 modelmap
-rw-r--r-- 1 root root 865 Apr 12 16:18 plugin.conf
drwxr-xr-x 38 root root 4096 May 1 03:20 synodvb_t
-rw-r--r-- 1 root root 262 Apr 12 16:18 videostation_port
여기서 트랜스코딩에 관여하는 설정이 들어간 파일은 3가지 정도 됩니다. (모두 JSON String으로 되어있음)
-rw-r--r-- 1 root root 37580 Apr 12 16:18 TransInfo_HLS
-rw-r--r-- 1 root root 41468 Apr 12 16:18 TransInfo_SS
-rw-r--r-- 1 root root 5034 May 1 04:17 TransProfile
TransInfo_HLS와 TransInfo_SS는 원본파일의 컨테이너를 분류하기 위한 JSON String이 들어가있고, TransProfile은 그렇게 컨테이너별로 분류된 것에 따라 실제 ffmpeg에 넣어주는 Parameter에 대한 정보가 JSON String으로 들어있습니다. 분류는 VideoStation이 알아서 해 줄 것이므로, 따라서 우리는 TransProfile 파일만 고쳐주면 됩니다 :)
(분류를 따로 해주고 싶으시다면 TransProfile을 참고하여 TransInfo_HLS와 TransInfo_HLS의 String을 변경해주시면 됩니다.)
그럼 vi에디터로 TransProfile 파일을 열어봅시다.
RyunBox> vi TransProfile
{
"mpegts_cga_x264_vb200_vr_aac_ab40": "-threads 0 -vcodec libx264 -vsync 2 -vprofile baseline -level 30 -s cga -b 200k -r 15 -acodec libfaac -ab 40k -ac 2 -f mpegts -mpegts_copyts 1",
....
...
(파일 내용이 조금 긴 관계로 맨 처음 줄만 가져오고 나머지는 생략합니다.)
여기서 Frame Rate를 담당하는 부분은 "-r" Parameter 입니다. 기본으로 15로 세팅되어 있는데, 이를 24이상으로 바꾸어 줍니다. 전 30으로 설정해 주었습니다. 이 부분은 NAS 성능에 따라 적당히 조절하여 주셔야 합니다. 참고로, 시중에 유통되는 DVD(NTSC PAL)의 Frame Rate는 23.976fps 입니다. 따라서 24fps 정도면 원활한 영상을 보실 수 있습니다.
"mpegts_cga_x264_vb200_vr_aac_ab40": "-threads 0 -vcodec libx264 -vsync 2 -vprofile baseline -level 30 -s cga -b 200k -r 30 -acodec libfaac -ab 40k -ac 2 -f mpegts -mpegts_copyts 1",
첫줄에 해당하는 것을 바꾸었으니, 다른 줄도 모두 바꾸어 줍니다. -r 값이 없는것들은 명시적으로 적어주시면 됩니다.
:wq! 명령어를 입력하여 저장하고 나와서 이제 DS Video+ 앱으로 트랜스코딩을 하면 자연스러운 영상이 재생되는걸 보실겁니다.
이렇게 3개의 조건 중, 1번 조건은 만족하였습니다.
2) 자막은 필수
두번째로, 자막이 나와야 합니다. 이 부분은 간단합니다. 보통 우리가 보는 영상에 같이 들어있는 대부분의 자막은 smi 확장자로 이루어져 있습니다. 하지만 Video Station에서는 srt 자막 파일만 지원하기에, 포털 사이트에서 smi to srt 변환 프로그램을 이용해서 smi 파일을 srt로 변환한 다음, 같은 폴더에 넣어주면 해결됩니다. 자막은 나중에 플레이 시작시 물어봅니다. (좋은건, 자막이 영상에 같이 인코딩되지 않음!)
3) 모바일 환경에서 통신망 환경에 따라 비트레이트 변경을 통해 끊김없는 감상이 가능해야 할 것.
마지막은 더이상 할게 없습니다. 720P영상들 중 1.4GB정도 되는 영상들은 영상 비트레이트가 1400~1600kbps 정도 됩니다. 원활한 3G 환경에서는 끊김없이 재생이 가능한데, 아시다시피 모바일 네트워크 환경은 Handover 구역이라던지, 늘 외부 요소에 의해 불안정 합니다. 따라서, 비트레이트를 조정할 방법이 있어야 합니다. 하지만 이 부분은 감사하게도 VideoStation에서 이미 지원하고 있습니다.
DS Video+ 앱의 옵션에 가보면 영상 품질을 높음, 중간, 낮음,자동 처럼 3~4단계로 분류하고 있는데, 원본은 말 그대로 원본 파일 자체를 플레이어에 넘겨주는 것이고(iOS에서 MP4 컨테이너 외 재생 불가), 나머지 옵션은 트랜스코딩 옵션을 켜야 작동합니다. 옵션 별 비트레이트는 아까 위에서 수정하였던 TransProfile 파일에 잘 들어가 있으며, 기본적으로 VideoStation에서는 해상도와 영상 컨테이너에 따라 200k~1500k 까지의 품질을 지원합니다. 만약 변경하고 싶으신분은 파일을 열어 "-b" Parameter를 수정하여 주시면 됩니다. 통신망 상태에 따라 화면이 끊길때 중간중간 옵션을 변경하면서 감상하시면 됩니다.
4) 마치며
이렇게해서 목표를 모두 달성했습니다. 대부분의 코덱에 관련없이 PC, iOS, Android에서 자막과 함께 부드러운 영상 재생이 가능하며, 모바일 환경을 감안하여 비트레이트를 조절해서 볼 수 있습니다. 개인적으로는 VideoStation의 라이브러리 기능까지 더 해지니, 어떤 Application보다 더 좋은 스트리밍 환경을 구축했다고 봅니다.
ps. TransProfile파일은 VideoStation 업데이트마다 매번 수정해주어야 할 것 같아 보입니다.
ps2. smi 파일을 srt로 변환하는 스크립트를 이미 포고플러그에 적용중인 사람들이 있는것 같으니, 변환 프로그램이 불편하다면 직접 시놀로지에 적용시켜보는것도 좋을듯 하네요.
ps3. Android에서 제조사 기본 동영상 플레이어에 따라 자막이 안나올수도 있으니, 그렇다면 DicePlayer를 이용하시는것도 괜찮습니다.