프로젝트 소개
## 프로젝트 개요
etlp(embyToLocalPlayer)는 로컬 플레이어 브리지 도구입니다. Emby/Jellyfin 웹페이지에서 기존 재생 버튼을 클릭하면 로컬에 설치된 플레이어를 호출하여 재생하고, 플레이어가 정상적으로 종료된 후 재생 진행률을 미디어 서버로 다시 전송합니다. README는 Plex도 지원한다고 명시합니다.
## 주요 기능
- 홈페이지에서 바로 재생 가능하며, 기존 재생 버튼을 클릭하여 트리거합니다. 다중 버전 비디오는 버전 우선순위를 구성할 수 있습니다.
- 재생 목록(연속 재생)을 지원하며, 다음 에피소드는 동일한 버전을 유지합니다.
- bgm.tv / bangumi.tv, simkl.com, trakt.tv에 단방향 시청 완료 표시를 지원합니다.
- 로컬 마운트 사용자는 경로에 해당하는 폴더로 이동할 수 있습니다(버튼은 웹페이지 파일 경로 위에 표시됨).
- 적응되지 않은 플레이어도 일반적으로 호출할 수 있지만, 진행률은 다시 보고되지 않습니다.
- qBittorrent WebUI에서 직접 재생하거나 마운트된 폴더로 이동할 수 있습니다(추가 스크립트 필요).
- 유사 통합 검색 스크립트(embyEverywhere)가 포함되어 있습니다.
## 진행률 재전송을 지원하는 플레이어
mpv(mpv.net 및 기타 mpv 커널 플레이어 포함), PotPlayer, MPC-HC, MPC-BE, VLC, IINA(macOS). README는 특별한 요구 사항이 없으면 mpv 계열을 우선적으로 권장합니다.
## 설치 및 실행 방법
1. 브라우저에 Tampermonkey 또는 Violentmonkey 등의 유저스크립트 확장 프로그램을 설치하고 개발자 모드를 활성화한 후, 해당 유저스크립트를 설치하고 Emby 페이지를 새로고침합니다.
2. 릴리스 페이지에서 zip을 다운로드하여 영어 경로에 압축 해제합니다. 세 가지 옵션이 있습니다:
- `etlp-mpv-py-embed-win32.zip`(Windows, mpv 내장, 설정 변경 불필요);
- `etlp-python-embed-win32.zip`(Windows, ini에서 플레이어 경로 및 선택을 구성해야 함);
- `embyToLocalPlayer.zip`(Windows / Linux / macOS, Python을 직접 설치하고 설정을 수정해야 함).
3. Windows에서는 `embyToLocalPlayer_debug.bat`을 더블 클릭하고, 1을 눌러 포그라운드 테스트 실행, 2를 눌러 부팅 시 자동 시작되는 백그라운드 실행을 생성합니다.
4. macOS / Linux에서는 `etlp_run.command`로 실행하며, 로그인 항목, systemd 서비스 등의 자동 시작 예시를 제공합니다.
Python은 최소 3.8, Windows는 최소 10을 지원합니다.
## 모드 및 구성 핵심 사항
- 유저스크립트 확장 프로그램 메뉴를 통해 전환: 스크립트 활성화/비활성화, 디스크 읽기 모드 켜기/끄기.
- 디스크 읽기 모드는 서버 경로를 로컬 파일 주소로 변환하며, ini에 경로 교체 규칙을 입력해야 합니다. `dev > path_check = yes`는 파일 존재를 확인하고 NFC/NFD를 처리할 수 있습니다.
- 영구 캐시 모드는 구성 파일만 확인하며, 유저스크립트 설정과 충돌하지 않습니다.
- 업데이트 방법: Windows는 bat에서 6을 누르고, Linux/macOS는 `python3 utils/update.py`를 실행하고 `embyToLocalPlayer_diff.ini`를 비교합니다.
## 자주 묻는 질문 및 제한 사항
- 플레이어가 종료되어야 진행률 재전송이 트리거됩니다. 로그에 `serving at 127.0.0.1:58000`이 표시되면 서비스가 성공적으로 시작된 것입니다.
- Emby 내장 자막/오디오 트랙 선택은 무효하며, 외부 자막/오디오 트랙은 유효합니다. 내장 자막은 플레이어가 선택하도록 맡깁니다.
- 재생 목록은 기본적으로 활성화되어 있으며 비활성화하지 않는 것이 좋습니다. 웹페이지의 전체 재생/무작위 재생/재생 목록은 영화 및 음악 비디오 유형만 지원합니다.
- PotPlayer는 렌더링 Pin 실패, `KeyError: 'stream.mkv'` 등의 문제가 발생할 수 있습니다. README는 초기화 설정, 버전 변경, 디스크 읽기 모드 전환 등의 문제 해결 단계를 제공합니다.
- IINA는 재생 완료 후 종료로 설정해야 하며, 그렇지 않으면 진행률 재전송에 영향을 미칩니다. 디스크 읽기 모드가 아니면 재생 목록을 지원하지 않습니다.
- Jellyfin 홈페이지에서 재생 종료 후 10초 이내에 동일한 파일을 반복 재생하면 재생 시간이 잘못될 수 있습니다.
- Plex 도메인은 DNS 오염이 있을 수 있으므로 DNS를 수정하거나 프록시를 사용해야 합니다.
## 시청 기록 동기화
- bangumi.tv: 액세스 토큰을 생성하여 ini에 입력해야 하며, 단방향 동기화만 지원하고 일반 에피소드만 지원하며 극장판 등은 지원하지 않습니다. README는 후속작 인식 및 개봉일 매칭 전략을 자세히 설명합니다.
- simkl: dev 페이지에서 앱을 생성해야 하며, Redirect uri는 `http://localhost:58000/simkl_auth`이고, client_id/secret을 입력하면 자동으로 인증됩니다.
- trakt.tv: 앱을 생성해야 하며, Redirect uri는 `http://localhost:58000/trakt_auth`이고, user_name/client_id/client_secret을 입력한 후 인증합니다.
- 세 가지 모두 플레이어가 정상적으로 종료된 후에만 동기화되며, 웹페이지에서 이미 시청함을 클릭해도 트리거되지 않습니다.
## 숨겨진 기능(README에 지원 없음으로 표시)
iso 원본 디스크/bdmv 재생(VLC 권장, iso는 진행률 재전송 미지원), 로컬 리디렉션/재생 주소 교체, strm LAN 동기화 재생 진행률, mpv 데이터를 lua 스크립트로 전달, mpv 자동 오프닝/엔딩 건너뛰기, 다음 에피소드 미리 읽기, 이어보기 미리 읽기, Telegram 알림, 영구 캐시(다운로드하면서 재생), 댄단플레이(dandanplay) 자막 플레이어 지원, Pot 디스크 읽기 모드에서 Emby 기준 재생 목록 등이 포함됩니다.
## 피드백 요구 사항
README는 피드백 전에 최신 버전으로 업데이트하고, mpv가 포함된 휴대용 버전으로 테스트하고, 최소 두 개의 비디오를 테스트하고, 로그와 재현 단계를 제공할 것을 강조합니다. 요구 사항을 따르지 않은 피드백은 거부됩니다.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.