# 맥용 미디어 플레이어 IINA, JavaScript 기반 플러그인 시스템 추가

> Clean Markdown view of GeekNews topic #23193. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=23193](https://news.hada.io/topic?id=23193)
- GeekNews Markdown: [https://news.hada.io/topic/23193.md](https://news.hada.io/topic/23193.md)
- Type: news
- Author: [xguru](https://news.hada.io/@xguru)
- Published: 2025-09-21T09:31:01+09:00
- Updated: 2025-09-21T09:31:01+09:00
- Original source: [iina.io](https://iina.io/plugins/)
- Points: 7
- Comments: 0

## Summary

맥용 오픈소스 미디어 플레이어 **IINA**가 **JavaScript 기반 플러그인 시스템**을 도입하여, 개발자들은 간단한 코드만으로 **재생 제어** 및 **맞춤형 UI** 등 주요 기능을 자유롭게 확장할 수 있습니다. 플러그인은 **mpv 엔진**과의 고급 연동, **파일 접근**, **웹뷰 기반 오버레이**와 같은 다양한 API를 제공해, 미디어 재생 환경을 세밀하게 커스터마이즈할 수 있습니다. 이를 통해 기존 **PIP**, **온라인 자막** 등 강력한 미디어 기능에 더해, 사용자 맞춤화가 필요한 현업 및 스타트업 환경의 요구를 유연하게 충족합니다.

## Topic Body

- 맥의 **포스터치/터치바/시스템 미디어 컨트롤**등과 잘 연동되는 Swift 오픈소스 다기능 미디어 플레이어   
- **mpv** 엔진 기반으로 대부분의 미디어를 재생 가능하며 **PIP**, 다크모드, **온라인 자막**등의 기능을 지원  
- 1.4.0 부터 **JavaScript 기반 플러그인 시스템**을 추가하여, **몇줄의 코드**만으로 재생 제어부터 커스텀 UI까지 자유롭게 **사용자 정의** 가능  
- 플러그인에서 접근 가능한 기능들   
  - **Core**: 재생 제어, 창 프레임, 자막 트랙 상태 확인 및 설정  
  - **Playlist**: 재생 목록 제어 및 사용자 지정 메뉴 추가  
  - **Subtitle**: 사용자 정의 자막 다운로더 등록, UI 통합 지원  
  - **Menu**: 플러그인 메뉴에 단축키 포함한 항목 추가  
  - **Overlay**: 웹뷰 기반의 맞춤 콘텐츠를 영상 위에 표시  
  - **Sidebar View**: 사이드바에 웹뷰 기반 탭 추가  
  - **Standalone Window**: 복잡한 UI를 위한 독립 창 제공  
  - **Global Controller**: 여러개의 플레이어 인스턴스 생성 및 제어  
  - **File**: 사용자 파일 시스템 접근, 샌드박스 임시 파일·데이터 처리  
  - **Preferences**: 설정 저장 및 환경설정 패널에 전용 페이지 추가  
  - **Utils**: 시스템 대화상자 표시, 외부 실행 파일 실행  
  - **Console**: 디버깅 로그 출력, IINA 로그 뷰어에서 확인  
  - **MPV**: mpv API 속성 및 훅 활용, 고급 재생 제어 가능  
  - **Event**: IINA 및 mpv 이벤트 리스너 등록/해제  
  - **HTTP**: HTTP 및 XMLRPC 요청 실행  
- 플러그인 예제   
  ```js  
  // 비디오 상단에 48폰트 크기로 제목 표시하기  
  const { core, event, overlay } = iina;  
  event.on("iina.file-loaded", () => {  
    overlay.simpleMode();  
    overlay.setContent(`&lt;p&gt;${core.status.title}&lt;/p&gt;`);  
    overlay.setStyle(`p { font-size: 48px; }`);  
    overlay.show();  
  })  
  ```  
  ```js  
  // 비디오가 멈추면 윈도우를 최소화 하고, 원복되면 다시 시작   
  const { core, event } = iina;  
  event.on("mpv.pause.changed", () => {  
    core.window.miniaturized = core.status.paused;  
  });  
  event.on("iina.window-deminiaturized", () => {  
    core.resume();  
  });  
  ```

## Comments



_No public comments on this page._
