PLEX 팁 #2.

2019-01-24 클리앙
https://www.clien.net/service/board/cm_nas/13089278

SJVA Plex plugin

이 플러그인은 개인적으로 만들고 있는 프로젝트의 일부입니다. SJVA로 명명했고 이 모듈은 웹 방식으로 동작하면서 비디오 관련 기능을 편하게 사용하는 것을 목표로 생각나는 모든 기능을 하나로 모으고자 합니다.

기능의 일부로 토렌트 관련 자동화 중 PLEX 부분 스캔을 위한 플러그인으로 만들기 시작하였고 스캔 이외의 몇 개의 기능을 추가한 플러그인입니다. 시작이 SJVA와의 연동을 염두에 두었기 때문에, 설명에 SJVA 대한 언급도 들어가 있으니 양해바랍니다.

SJVA의 백앤드 부분은 어느 정도 구현을 다했으나, 프론트앤드는 경험이 없어 코드 한줄마다 검색하면서 작성해야 되니 상당히 오래 걸리네요. 먼저 플러그인을 공개하는 건 테스트 하기가 너무 번거롭기에 윈도우 이외의 OS에서 테스트를 부탁드리기 위해서입니다. Windows에서 개발하였고, Synology에서 정상동작하는 것을 확인한 상태입니다. 리눅스나 맥에서도 테스트 해봐야 하나 돈 벌려고 하는 것도 아닌데 머하는 짓인가 싶어 관뒀습니다;;

시놀에서 가능하니 리눅스나 맥도 정상적으로 동작할 것 같습니다만, 경로문제라던지 미처 생각하지 못한 문제점이 발생할 수 있습니다. 문제점을 알려주시면 보완하도록 하겠습니다. 능력있으신 분들 많으시니 직접 수정하시고 올려주시면 더 좋겠습니다.

테스트를 위한 소개이기에 간단히 설명드리고, 상세한 설명은 따로 작성할 예정입니다.

참고


기능 소개

스샷을 보시면 대충 파악되실겁니다.

스캔

  • 메인화면
  •  

  • 메인화면에서 로그를 선택하면 2가지 세부 목록을 확인할 수 있습니다. 
  • LOG
    • waitlist : 파일 대기 목록
    • scanlist : 파일 스캔 목록
  • [상태]이후 문자
    • F : 파일 매니저에서 호출
    • W : 드라이브 감시 모듈에서 호출
    • G : 구글 드라이브 모듈에서 호출
    • (F) : 파일 체크중
2019-01-24 06;17;51

세부 화면

  • 파일 처리 모듈에서 4시에 호출됨.
  • 이후 집 NAS로 업로드 완료 되어 5시경 대기 목록에서 스캔 목록으로 전환
  • 5시 4분 스캔완료 후 라이브러리에 표시

API

  1. Live Channels (KLive App) 연동  0번부터는 TVH이고 그 위는 klive입니다. 999번 채널은 가족 홈비디오 영상이 최신순서로 100개가 순서대로 나오고, 그 위부터는 PLEX 최신 영상 하나가 한 채널에서 반복해서 나옵니다. 일시정지, 처음부터 시작, 속도조절이 가능합니다.  
  2. TVH 연동  TVH에 연동하여 PLEX 최신영상 혹은 선택한 영상이 나오는 채널을 만들수 있습니다. 0.3 채널은 CCTV 채널입니다.

그외

  1. 플러그인 설치  제가 사용하는 플러그인 위주로 설치를 지원합니다. 웹툴 설치시 거의 모든 플러그인을 설치할 수 있습니다.
  2. 커스텀
  • 리부팅

PLEX 앱을 통해 원격으로 기기를 제어할 수 있다는 것을 알려드리기 위해 샘플로 넣은 리부팅 기능입니다. 실제 저는 tvh restart, smi2srt 같은 것을 구동하고 있습니다.


설치 및 설명

다운로드 : https://github.com/soju6jan/SJVA.bundle

2019-01-24 06;10;41

설정

토큰과 API 호출

API 호출시 host, token이 필요합니다. 이 값은 플러그인 마지막에서 확인가능합니다. PLEX를 http://127.0.0.1:32400 형식이나 내부 IP 형식으로 호출할 경우 외부에서 접속이 안되는 URL이 가급적 외부 IP 형식으로 열어서 host값과 token값을 확인하시기 바랍니다. 로그파일(Plex Media Server\Logs\PMS Plugin Logs\com.plexapp.plugins.SJVA.log) 및 tautulli에서도 확인 가능합니다.

  • 버전확인
    • 브라우저에서 아래과 같이 호출해서 정상적으로 버전정보가 출력되는지 확인합니다. 
    • http://[HOST]:32400/:/plugins/com.plexapp.plugins.SJVA/function/version?X-Plex-Token=[TOKEN] 
    • 예) http://192.168.0.13:32400/:/plugins/com.plexapp.plugins.SJVA/function/version?X-Plex-Token=oexxQF1S7qJoCK3iKt3q

API 호출은 이런 형식이며 function/ 다음 version 위치의 함수명과 파라미터만 변경됩니다.

스캔

파일 변동사항은 3가지 형태로 정보를 받습니다.

  1. 파일 처리 모듈과의 연동
  2. 드라이브 감시 (watchdog 사용)
  3. 구글 드라이브 감시 (구글 드라이브 API사용)

1. Plex Media Scanner 실행

  • 스캔시 Plex Media Scanner 라는 PLEX에서 제공하는 프로그램을 실행합니다. 경로는 SJVA.bundle/Contents/Code/base.py 에 있으니 혹시 실행이 안될 경우 경로를 확인하시기 바랍니다.
  • 쉴드 PMS 는 저 프로그램을 실행할 방법이 없어서 스캔을 지원하지 않습니다.

2. SJVA.bunble/pms 폴더

pms와 같은 기기에서 동작해야하는 python 코드입니다. 반드시 같은 기기일 필요는 없으나, 같은 기기에서 실행된다는 가정하에 작성되어져 있습니다. 이 코드가 실행이 가능해야 드라이브 감시, 구글 드라이브 감시 모듈이 실행됩니다.

  • python 2.7 설치
  • 필요 라이브러리 설치
    • 각 OS에 맞는 방법으로 pip install -r requirement.txt를 실행합니다. requirement.txt파일은 pms 안에 있습니다.
    • 예) C:\Users\[사용자]\AppData\Local\Plex Media Server\Plug-ins\SJVA.bundle\pms>c:\Python27\Scripts\pip.exe install -r requirement.txt – 실행확인
    • python sjva_pms.py  그림과 같이 나오면 정상이며, 실행해 놓을 필요없으니 CTRL+C로 코드를 중단합니다. 실제 실행과 중지는 plugin에서 합니다.

3. 파일처리 모듈

  • WaitFile
    • SJVA, watchdog, google drive API와 연동되는 API입니다.
  • Add
    • 자신만의 파일 처리 모듈에서 상황에 맞게 호출합니다.
    • filepath : PLEX 라이브러리상 파일 Location
    • 예) http://192.168.0.13:32400/:/plugins/com.plexapp.plugins.SJVA/function/Add?filepath=Z:\한국\드라마\SKY 캐슬\테스트.mp4&X-Plex-Token=oexxQF1S7qJoCK3iKt3q
    • 결과 : {“ret”: “ADD_OK”}
    • Wait 목록에 추가되고, 실제 파일이 있다면 스캔까지 진행합니다.

4. watchdog

watchdog 모듈을 사용하여 드라이브 변경사항을 감시합니다.

  • 로컬 드라이브는 PLEX 자체에서 지원하니 경로를 추가할 필요는 없습니다.
  • SMB 연결만 사용.
  • WEBDAV나 구글 드라이브 마운트 경로는 실제파일이 아닌 캐쉬이기 때문에 파일 이벤트가 너무 많이 발생하면서 created, removed가 반복해서 쌓입니다.
  • 설정에서 드라이브 감시 경로를 적어줍니다. | 으로 구분하여 여러 경로를 넣을 수 있습니다.
  • 윈도우에서 한글 경로는 PLEX가 저장을 못하는 버그가 있습니다. 저장파일을 직접 수정하시면 됩니다. 파일 : Plex Media Server\Plug-in Support\Preferences\com.plexapp.plugins.SJVA.xml
  • 플러그인 메인 메뉴에서 C-1. SJVA Server on PMS 시작을 누르고 C-4. 드라이브 감시 시작 누르면 감시 모듈이 시작됩니다.
  • pms 폴더안에 pms_watchdog.log 로그파일을 보시면 어떻게 동작하는지 아실 수 있습니다.

5. Google Drive API

구글에서 지원하는 드라이브 API를 사용하여 스캔을 합니다.

  • 설정에서 인증을 저장할 이름을 선택합니다. 초기값 : token
  • 인증
    • SJVA Server on PMS 실행 후 C-5 드라이브 인증을 선택하면, PMS 설치되어 있는 기기에서 브라우저가 열리며, 구글 드라이브 로그인창이 뜨고, 동의를 화면 인증값이 저장됩니다.
    • Synology의 경우 브라우저가 없기 때문에, 어쩔 수 없이 CLI로 인증을 합니다. rclone 과 동일합니다.
      • pms 폴더에서 python gdrive.py token [저장할이름] 을 실행하며 url이 나오고 인증정보 진행 후 코드를 다시 복사해주면 됩니다.
    • 구글드라이브 정보와 PMS 마운트 매칭
      • 예) soju6janw:내 드라이브,M:|soju6janm:내 드라이브,N:
      • 2개 이상시 | 구분자 사용
      • soju6janw:내 드라이브,M:
        • soju6janw 은 위에서 인증을 저장한 이름입니다. 여기의 root는 내 드라이브인데 root를 M: M 드라이브와 매칭했다는 의미입니다.
    • C-6 선택하면 시작됩니다.
    • API 제한 초과 방지를 위한 시간 설정을 하였습니다.

API

미디어 파일 서버는 PLEX이지만, 정보 가공은 PLEX에서 할 필요가 없습니다. 세부적인 채널설정은 SJVA가 할 예정이기 하지만 간단한 기능이 포함되어 있습니다.

Live Channels 연동

app : https://github.com/soju6jan/KLive/tree/master/android_tv

  1. 전체 최근추가, 라이브러리별 최근 추가된 영상 하나씩이 반복되는 채널 – 함수 : lc – 파라미터
  2. 하나의 섹션에서 최근 몇개의 파일이 재생되는 채널 – 함수 : lcone – 파라미터

atv app에서 위 url을 입력하고 채널을 갱신하면 됩니다.

TVHeadend 연동

선택한 영상이 계속 재생되는 채널을 만들 수 있습니다.

  • PLEX에서 원하는 영상을 선택하여 tvh 라는 재생목록을 만듭니다.
  • 예) http://192.168.0.13:32400/:/plugins/com.plexapp.plugins.SJVA/function/tvhm3u?X-Plex-Token=oexxQF1S7qJoCK3iKt3q 와 같은 tvhm3u 함수를 넣은 url을 브라우저에서 입력하여 정상적으로 나오는지 확인합니다.
  • TVH에서 IPTV 자동 네트워크에 위 URL을 입력합니다.
  • 4개의 먹스가 생성되고 스캔이 되야합니다. 스캔 실패시 서비스에서 하나씩 해줍니다.
  • 매핑해주고 재생 테스트를 합니다.
  • 채널 설명
    • PLEX 1-1. 최근 추가된 목록 HLS방식
    • PLEX 1-2. 최근 추가된 목록 파일방식
    • PLEX 2-1. 재생목록(tvh) HLS방식
    • PLEX 2-2. 재생목록(tvh) 파일방식
  • HLS방식은 실제 재생을 하지 않더라도 시간이 지나가며, 채널 선택시 시간에 맞는 부분부터 재생이 시작됩니다.
  • 파일방식은 재생이 시작될 때 파일의 처음부터 무조건 재생됩니다.
  • 테스트용이기 때문에 2개다 넣었습니다.

활용

가족채널 시나리오

제 케이스입니다.

  • 구글 포토 이용. 와이프와 공유
  • 바로 구글에 업로드 설정
  • 구글 드라이브 설정에서 포토도 보이게 설정
  • NAS에서 구글 드라이브 Cloud Sync
    • 구글 드라이브를 바로 마운트 할 수 있으나 아무래도 재생이 늦어서 NAS로
  • NAS 싱크 경로로 가족 라이브러리 구성
  • SMB 드라이브 감시 설정
  • LiveChannels App에 가족 채널 생성
  • 친가에도 App 설정하여 채널 등록

촬영 -> 구글 업로드 -> 싱크 -> SMB 감시에 의해 Plex 라이브러리 갱신 -> ATV 에서 주기적으로(1시간) 채널 정보 요청 -> TV로 시청까지 1~2시간 이내 가능

API 사용시 반드시 브라우저에서 먼저 입력하여 정상적으로 결과가 나오는지 확인하시기 바랍니다.

Hits: 3040

댓글 남기기

Close Menu