v0.4.4: fix audio-on-delete, reduce stutter, add /videopreload
Some checks failed
build / build (push) Has been cancelled
Some checks failed
build / build (push) Has been cancelled
- fix: stop playback when anchor block entity unloads (BLOCK_ENTITY_UNLOAD) so deleting a video while audio is playing actually silences it. - fix: force-stop SourceDataLine and grabber from outside the worker thread so a blocked line.write() / grab() unblocks immediately on close. - perf: tune FFmpeg streaming options (buffer_size, probesize, analyzeduration, max_delay, fflags=+genpts, reconnect_delay_max) and pre-size audio line buffer to ~0.5s to smooth out mid-stream stutter. - feat: /videopreload <url> broadcasts a S2C PreloadPayload to all clients; each client downloads the URL to <gameDir>/video_player_cache/<sha256> and subsequent playback reads from the local file instead of streaming. Gated by COMMANDS_GAMEMASTER (op level 2), so command blocks can invoke it.
This commit is contained in:
36
README.md
36
README.md
@@ -3,7 +3,7 @@
|
||||
마인크래프트 안에서 임의의 동영상 URL을 벽·바닥·천장에 평면으로 재생하는 Fabric 모드.
|
||||
|
||||
- 모드 ID: `video_player`
|
||||
- 현재 버전: **0.4.3**
|
||||
- 현재 버전: **0.4.4**
|
||||
- 마인크래프트 버전: **26.1.2**
|
||||
- 필요 Java: **25** (마인크래프트 26.x 가 요구함)
|
||||
|
||||
@@ -53,9 +53,9 @@ Fabric은 마인크래프트에 모드 기능을 추가해 주는 로더입니
|
||||
- 받은 `fabric-api-0.149.0+26.1.2.jar` 를 `mods` 폴더에 넣습니다.
|
||||
2. **video_player** (이 모드)
|
||||
- 다운로드: https://git.tkrmagid.kr/tkrmagid/mc_video_player_mod/releases
|
||||
- `video_player-0.4.3.jar` 를 다운로드해서 같은 `mods` 폴더에 넣습니다.
|
||||
- `video_player-0.4.4.jar` 를 다운로드해서 같은 `mods` 폴더에 넣습니다.
|
||||
|
||||
이전 버전(`video_player-0.4.0.jar`, `0.4.2.jar`, `0.3.x.jar` 등)이 mods 폴더에 남아있다면 **반드시 삭제**하세요. 두 개가 같이 있으면 마인크래프트가 충돌로 켜지지 않습니다.
|
||||
이전 버전(`video_player-0.4.0.jar`, `0.4.2.jar`, `0.4.3.jar`, `0.3.x.jar` 등)이 mods 폴더에 남아있다면 **반드시 삭제**하세요. 두 개가 같이 있으면 마인크래프트가 충돌로 켜지지 않습니다.
|
||||
|
||||
### STEP 5. 영상 재생 라이브러리 (JavaCV) 설치
|
||||
|
||||
@@ -135,7 +135,7 @@ Fabric은 마인크래프트에 모드 기능을 추가해 주는 로더입니
|
||||
게임 안에서 채팅창에 `/videostick` 을 입력하세요. 정상이라면:
|
||||
|
||||
- 인벤토리에 **비디오 스틱** 아이템이 들어옵니다 (보라/검정 missing-texture 가 아니라 작대기 모양 아이콘).
|
||||
- 보라/검정 missing texture 가 나오면 **STEP 4** 에서 이전 버전 jar(`video_player-0.4.0.jar` / `0.4.1.jar` 등)가 mods 폴더에 같이 남아있는 경우입니다. 다 지우고 `0.4.3` 만 남기고 다시 시작하세요. (0.4.1 이하는 Fabric 26.1.2 model 로더가 unprefixed `item/generated` parent 를 거부해서 스틱 아이콘이 missing-model 큐브로 보입니다 — 0.4.2 에서 수정됨.)
|
||||
- 보라/검정 missing texture 가 나오면 **STEP 4** 에서 이전 버전 jar(`video_player-0.4.0.jar` / `0.4.1.jar` 등)가 mods 폴더에 같이 남아있는 경우입니다. 다 지우고 `0.4.4` 만 남기고 다시 시작하세요. (0.4.1 이하는 Fabric 26.1.2 model 로더가 unprefixed `item/generated` parent 를 거부해서 스틱 아이콘이 missing-model 큐브로 보입니다 — 0.4.2 에서 수정됨.)
|
||||
|
||||
---
|
||||
|
||||
@@ -164,8 +164,30 @@ Fabric은 마인크래프트에 모드 기능을 추가해 주는 로더입니
|
||||
| 명령 | 설명 |
|
||||
| --- | --- |
|
||||
| `/videostick` | 비디오 스틱 아이템을 인벤토리에 지급 |
|
||||
| `/videoplace <url> [w] [h] [loop] [autoplay]` | 정조준한 블록 면에 즉시 영상 배치 |
|
||||
| `/videodelete` | 정조준한 블록 면의 영상 제거 |
|
||||
| `/videoplace <pos> <facing> <w> <h> <url>` | 좌표에 영상 앵커를 즉시 배치 |
|
||||
| `/videodelete <pos>` | 좌표의 영상 앵커 제거 |
|
||||
| `/videomute <pos> <on\|off>` | 영상의 음소거 켜고/끄기 |
|
||||
| `/videopreload <url>` | URL 을 미리 받아 디스크 캐시에 저장 (자세한 내용은 아래) |
|
||||
|
||||
`/videoplace`, `/videodelete`, `/videomute`, `/videopreload` 는 기본적으로 OP(권한 레벨 2) 가 필요하므로 **커맨드 블럭에서도 그대로 호출 가능합니다**. 커맨드 블럭은 기본이 권한 레벨 2 라 별도 설정 없이 동작합니다.
|
||||
|
||||
### `/videopreload` — 영상 미리 로딩 (스터터 제거)
|
||||
|
||||
스트리밍 URL 을 라이브로 받으면서 재생하면 네트워크가 잠깐 느려질 때 끊김이 생깁니다. `/videopreload <url>` 을 미리 한번 실행하면 클라이언트가 백그라운드에서 URL 을 통째로 다운로드해서 `.minecraft/video_player_cache/` 폴더에 저장해 두고, 같은 URL 로 영상이 재생될 때 인터넷이 아니라 그 로컬 파일을 사용합니다 (= 끊김 없음).
|
||||
|
||||
```
|
||||
/videopreload https://video.example.com/foo.mp4
|
||||
```
|
||||
|
||||
특징:
|
||||
|
||||
- **커맨드 블럭에서 사용 가능** — 예: 압력판 → 커맨드 블럭 `/videopreload <url>` 으로 트리거하면 플레이어가 영상 영역에 다가가기 전에 미리 다운로드 시작
|
||||
- 명령은 서버에서 실행되지만, 다운로드는 각 **클라이언트**(접속해 있는 모든 플레이어)가 자기 PC 에 받습니다
|
||||
- 이미 받아둔 URL 은 재요청해도 다시 다운로드 안 함 (URL 의 SHA-256 으로 캐싱)
|
||||
- 한 파일당 상한 512 MB
|
||||
- 캐시 폴더가 너무 커지면 직접 `.minecraft/video_player_cache/` 안의 파일을 삭제해도 됩니다 (그러면 다음 사용 시 다시 받아옴)
|
||||
|
||||
> 영상 삭제 시 소리가 안 멎던 문제는 0.4.4 에서 수정되었습니다 (앵커 블록이 사라지면 디코더 / 오디오 라인을 즉시 강제 종료).
|
||||
|
||||
---
|
||||
|
||||
@@ -182,7 +204,7 @@ Fabric은 마인크래프트에 모드 기능을 추가해 주는 로더입니
|
||||
JAVA_HOME=/usr/lib/jvm/java-25-openjdk-amd64 ./gradlew build
|
||||
```
|
||||
|
||||
산출물: `build/libs/video_player-0.4.3.jar`
|
||||
산출물: `build/libs/video_player-0.4.4.jar`
|
||||
|
||||
JavaCV를 직접 의존성으로 가져오는 경우의 Maven 좌표:
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user