Repository navigation
0.1.6 이후의 변경을 모은 정식 릴리스입니다. 자동 업데이트, 파일·재생목록 관리, Google 동기화와 리소스 확장앱을 추가하고 이어보기·자막·폴더블 회전·다운로드를 보완했습니다. 아래는 최종 동작 기준이며 개발 중 nightly별 기록은 다음 절부터 보존합니다.
자동 업데이트·플랫폼
- 설정 → 앱 업데이트에서 자동 확인·알림, 수동 확인, 다운로드·설치를 제공합니다. 앱 시작·복귀 시 최대 6시간마다 확인하고 설치는 사용자가 선택합니다. 플랫폼·Android ABI·mobile/TV에 맞는 파일을 고르고 크기·SHA256을 검사합니다.
- stable·beta·nightly 채널을 선택·저장합니다. 업데이트 확인 기본값은 stable이며 기존에 저장한 선택은 유지합니다. 이전 버전을 새 업데이트로 안내하지 않고 같은 기본 버전은 nightly → beta → stable 순서로 판단합니다. 별도 배포 지시가 없는 일반 빌드는 계속 nightly이며 자동 승격하지 않습니다. 명시적인 정식 배포 지시에는 같은 버전의 공개 nightly 또는 beta에서 stable로 승격할 수 있습니다.
- Windows는 설치 준비·압축 검사·정상 종료·파일 교체·재시작과 실패 복구를 처리합니다. 설치기가 시작되지 않거나 종료 대기에서 멈추던 문제를 수정하고 단계별 진행·실패 이유를 표시합니다. 중복 설치와 같은 폴더의 다른 실행 창을 검사합니다. Android는 기존 서명을 확인한 뒤 OS 설치 화면을 엽니다. Linux·macOS는 검증한 압축 파일을 열어 직접 교체합니다.
- Windows·Linux **ARM64(aarch64)**를 추가했습니다. Windows·Linux x64/ARM64, macOS ARM64, Android·Android TV 각 3개 ABI를 제공합니다. 새 nightly 전체 게시 성공 후 최신 3개만 보관하며 stable·beta와 소스 이력은 유지합니다.
재생·자막·회전
- 저장된 이어보기 위치를 파일을 여는 시점부터 전달합니다. 연결·동기화 준비 중의 0초 상태가 기존 기록을 덮어쓰거나 간헐적으로 처음부터 시작하던 문제를 수정했습니다. 확인 모드에서는 선택 전까지 일시정지하고 파일 전환 후 늦은 응답을 무시합니다. 백그라운드 재생 위치도 갱신합니다. 10초 이하·95% 이상 기록의 기존 처음부터 재생 정책은 유지합니다.
- 재생 볼륨을 OS 출력 볼륨으로 통일했습니다. 시작·종료 시 현재 볼륨을 이어받고 휠·방향키·제스처는 OS 볼륨을 변경합니다. 하드웨어 키·시스템 슬라이더 변경을 반영하며 API 실패는 표시합니다.
- Windows·Android의 재생 엔진을 자막 디코더를 포함한 LGPL 빌드로 교체했습니다. 텍스트는 Flutter 자막 레이어, PGS·VobSub·DVB 등의 이미지 자막은 엔진에서 표시합니다. 트랙 선택·끄기·크기·위치·파일 전환을 반영하고 중복 표시를 막습니다. 엔진 출처·라이선스를 앱과 배포물에 포함하며 배포 용량은 증가합니다.
- Android SMI·SAMI는 OS 문자셋 기능으로 UTF-8로 정규화한 뒤 내장 FFmpeg로 SRT를 만들어 적용합니다. iconv가 없는 엔진에서 CP949 한글이 깨지거나 자막 열기에 실패하던 문제에 대응했습니다. UTF-8/UTF-16 BOM·CP949 확장 한글을 처리하고 변환 결과에 UTF-8 설정을 적용합니다. 데스크톱은 원본 로딩 실패 시 FFmpeg 변환을 시도하며 별도 FFmpeg 설치가 필요합니다. 원본 보존·임시 파일 정리·이전 선택 복구·오류 표시를 제공합니다.
- Windows 하드웨어 디코딩을 ANGLE과 호환되는 **
auto-copy**로 변경해 하단 초록색 띠에 대응했습니다. 영상 컨트롤러 생성·파일 열기에 디코더 설정을 일관되게 적용합니다. GPU 디코딩과 출력은 유지하며 프레임 복사 비용이 추가될 수 있습니다. - Android 폴더블 펼친 화면의 가로·세로 고정 회전 호환성을 보완했습니다. 모바일의 제조사 호환 정책·API 36 선언을 수정하고 OS 방향을 직접 요청합니다. 회전 버튼의 진단 팝업은 제거했으며 자동 회전·TV 정책은 유지합니다.
- OpenSubtitles 확장앱 1.0.4에서
*.opensubtitles.org·*.opensubtitles.com다운로드를 허용합니다. HTTPS로 전환하면서 URL 토큰을 보존하고 인증 정보는 지정 API 서버에만 보냅니다.
파일·재생목록·다운로드
- 파일 목록에서 오른쪽으로 밀어 본 상태/안 본 상태를 전환합니다. 안 본 상태로 바꾸면 이어보기 위치를 초기화합니다. 선택모드로 현재 폴더의 파일을 골라 재생목록에 추가하거나 확인 후 삭제할 수 있습니다.
- 재생목록 생성·이름변경·삭제, 항목 순서 변경·연속 재생과 선택 항목 제거·다른/새 재생목록으로 복사를 제공합니다. 목록에서 제거해도 원본은 삭제하지 않습니다.
- 파일별 메뉴에 이름변경·삭제를 추가했습니다. 로컬·WebDAV·FTP·SFTP·SMB 파일의 같은 폴더 내 이름변경을 지원하고 충돌을 거부합니다. 잠금·시청 기록·재생목록 참조를 새 이름으로 옮기며 Windows 경로 별칭에서도 중첩 잠금을 유지합니다. 폴더·심볼릭 링크 이름변경은 제외하고 원격 작업에는 서버 권한과 확장앱의 기능 지원이 필요합니다.
- 리소스별 마지막으로 실제 재생한 파일과 상위 탐색 경로를 파란색으로 표시합니다. 목록·격자·현재 경로, 다음 파일 재생·재시작·이름변경·삭제를 반영하며 리소스마다 독립 저장합니다. 잠긴 항목은 숨기고 이 표시 기록은 동기화·진단에 넣지 않습니다.
- 브라우저·원격 파일 다운로드 전에 인식한 파일명을 미리 채운 입력창을 열어 수정할 수 있습니다. 동일 파일은 덮어쓰기·이름변경·취소를 확인합니다. 로컬은 임시 저장 후 확정하고 실패 시 기존 파일을 보존하며, 원격 덮어쓰기는 확인한 대상에만 적용합니다.
- 쿠키·세션 만료로 실패한 HLS를 동일 URL·저장 파일명·출력 옵션·저장 위치로 다시 요청하면 실패/일시정지 작업의 헤더·쿠키·키·재생목록을 갱신합니다. 조각 URL·순서·범위·암호화 정보·영상/음성 구성이 일치하는 받은 조각만 재사용하고 변경된 구성은 다시 받습니다. 작업과 캐시가 남아 있으면 재시작 후에도 이어받습니다. 기존 실패 항목을 삭제하지 않고 브라우저에서 페이지 새로고침·영상 재생 후 같은 조건으로 다시 다운로드하세요. 검증 정보가 없는 구버전 캐시는 처음 한 번 다시 받습니다.
Google 동기화·확장앱
- 설정 → Google 동기화에서 앱 전용 Drive 저장소에 재생목록·최근 재생·이어보기 위치를 자동/수동 동기화합니다. Android·Android TV·Windows·Linux·macOS에서 지원하며 Drive 확장앱 설치는 필요하지 않습니다. 같은 동기화 이름으로 기기별 리소스를 연결하고 변경·삭제를 병합합니다. 같은 재생목록의 동시 수정은 최신본을 사용하며 재생 전 동기화가 지연되면 최대 5초 후 로컬 기록으로 계속합니다.
- 파일 내용·비밀번호·브라우저 세션·잠금 정보는 동기화하지 않습니다. 연결되지 않은 리소스 기록은 보관하며 상태·오류·연결 해제를 제공합니다. Apple·삼성 계정과 iOS 동기화는 이번에 제공하지 않습니다.
- Actions Secret의 플랫폼별 Google OAuth 등록값을 빌드에 적용하고 확장앱에 공개 등록값을 읽는 SDK를 제공합니다. 앱 데이터 동기화와 Drive 파일 접근의 권한·사용자 토큰은 분리하며 JS에 사용자 토큰이나 배포 Client Secret을 노출하지 않습니다. 기존 수동 등록값은 유지합니다.
- Google Drive 확장앱 1.3.0에 현재 폴더 파일명 검색·페이지 처리와 전체 Drive 읽기·쓰기를 추가했습니다. 다운로드 저장·다른 저장소로 이동에서 8MiB 분할 업로드, 서버 수신 위치 조회·재시도·취소·진행률을 제공합니다. 성공 확인 전에 원본을 지우지 않으며 기존 읽기 전용 계정은 권한 승인을 위해 다시 연결해야 합니다.
- 리소스 확장앱의 선택적 검색
canSearch·search({query,path}), 이름변경·공통 업로드 SDK와 UI를 추가했습니다. 검색 입력·재시도·원래 목록 복원·늦은 요청 무효화를 처리하고 개발 가이드와 예제를 갱신했습니다. 같은 API 규약의 공급자는 JS·저장소 JSON으로 배포합니다. - PeerTube·Jellyfin 1.0.0을 공식 저장소에 추가했습니다. PeerTube 공개 영상·선택적 로그인·내 영상·검색·HTTP/HLS 재생, Jellyfin 로그인·라이브러리/폴더·영상/음악 검색·원본 스트림을 제공합니다. HTTPS 서버가 필요하며 PeerTube P2P·비밀번호 영상·2FA와 Jellyfin 트랜스코딩·Live TV·서버 시청 기록 동기화는 제외합니다.
- 신규 설치 시 자동 설치하는 확장앱은 0개입니다. 공식 저장소에서 필요한 것만 설치하세요. 기존 확장앱·설정·계정·비활성 상태는 보존하며 앱 업데이트가 스크립트를 덮어쓰지 않습니다. 기존 OpenSubtitles·Google Drive는 설정 → 확장앱에서 저장소 새로고침 후 각각 업데이트해야 합니다.
진단·문서·설치 안내
- 설정 → 정보 → 진단 정보 보내기에서 증상·재현 방법과 앱·OS·화면·네트워크 기능 상태를 미리 보고 GitHub Issues 작성 화면을 엽니다. 자동 수집에는 파일명·경로·방문 URL·헤더·계정·토큰을 넣지 않습니다. 첨부 제외와 긴 본문/실행 실패 시 복사를 지원하며 최종 등록은 사용자가 진행합니다.
- 홈페이지·개인정보처리방침·이용약관·브랜딩 로고와 Google 등록·동기화·확장앱 개발 문서를 현행화했습니다.
- 버전은 0.1.7+2, Android ARM64 버전 코드는 2002이며 기존 배포 서명을 유지합니다. GitHub Latest와 stable 채널로 게시합니다. v0.1.6 이하에는 자동 업데이트가 없으므로 배포 파일을 한 번 직접 설치하세요. Windows 초기 nightly
.20261023.3·.4의 종료 오류가 남은 경우에도 앱을 모두 닫고 ZIP 전체를 직접 교체해야 합니다. - 전체 Flutter 테스트 270개, 실제 Windows 엔진의 이미지 자막 합성·SRT/SMI·한국어·디코더 설정, Android 문자셋 변환·네이티브 컴파일을 확인했습니다. 배포 시 전체 플랫폼 빌드와 파일 검사를 실행합니다. 보고된 GPU의 초록색 띠와 Android 자막·폴더블·실제 클라우드/개인 미디어 서버 동작은 환경별 확인이 필요합니다. macOS Developer ID 서명·공증과 iOS 설치 파일은 제공하지 않습니다.
업데이트 채널: stable
Windows · Android · Android TV · Linux · macOS 배포 빌드입니다.
- Android: mobile APK / Android TV: tv APK (arm64-v8a, armeabi-v7a, x86_64)
- Windows x64 / ARM64(aarch64): ZIP을 풀고 oplayer.exe 실행
- Linux x64 / ARM64(aarch64): tar.gz 압축 해제 후 실행 (시스템 의존성은 README 참고)
- macOS Apple Silicon: ZIP 안의 OPlayer.app (Developer ID 서명·공증 미포함)
- SHA256SUMS.txt: 배포 파일 무결성 확인
빌드 커밋: c57d058
Actions: https://github.com/gaeco0/OPlayer/actions/runs/40281431487