• v0.4.11 — frame ring buffer + smaller audio buffer + decoder stats
    Some checks failed
    build / build (push) Has been cancelled
    Stable

    claude-bot released this 2026-05-16 02:10:47 +09:00 | 20 commits to main since this release

    v0.4.11 — burst-then-stall stutter 잡기

    무엇이 문제였나 (0.4.10 까지)

    • 단일 슬롯 staging 버퍼 + 0.5초 오디오 버퍼 = 0.5초마다 디코더가 video 12 frame burst → 단일 슬롯이 11개 덮어쓰기 → 결과 ~2 fps 표시.
    • 0.4.10 의 preallocate 는 메모리 churn 만 잡았지 burst 패턴은 그대로였습니다.

    무엇이 바뀌었나

    • video frame ring buffer 4 슬롯 (preallocated, FIFO). 디코더 burst 가 와도 4 frame 까지 보존, 그 이상은 oldest drop.
    • 오디오 버퍼 0.5 s → 0.1 s. 디코더 페이싱이 더 촘촘해져서 burst 크기가 12 frames → 2-3 frames 로 줄어듭니다 (ring 4 안에 다 들어감).
    • 디코더 stats 로그: 영상 시작 시 spec (WxH @ fps, audio Hz x ch) + 10 초마다 produced/consumed/dropped 카운터. .minecraft/logs/latest.log 에 줄 단위로 찍힙니다.

    사용자에게 부탁 — 로그 확인

    0.4.11 받아서 영상 한 번 재생하시고, 1분쯤 그대로 두신 후 .minecraft/logs/latest.log 의 마지막 ~200 줄을 보내주시면:

    • decoder started: WxH @ fps — 영상이 실제로 몇 fps 인지 확인
    • decoder stats: produced=X (24.0 fps), consumed=X (24.0 fps), dropped=0, ring=0/4 같은 줄이 보이면 정상 페이스
    • dropped 가 계속 증가하거나 produced fps 가 source fps 보다 낮으면 다음 fix 가 필요합니다.

    받기

    • Windows 64bit: video_player-windows-x86_64-0.4.11.jar
    • macOS Intel: video_player-macosx-x86_64-0.4.11.jar
    • macOS Apple Silicon: video_player-macosx-arm64-0.4.11.jar
    • Linux 64bit: video_player-linux-x86_64-0.4.11.jar
    • 바닐라(JavaCV 별도 설치용): video_player-0.4.11.jar
    Downloads
  • v0.4.10 — fix 5fps video (preallocate decoder buffer)
    Some checks failed
    build / build (push) Has been cancelled
    Stable

    claude-bot released this 2026-05-15 22:55:04 +09:00 | 21 commits to main since this release

    v0.4.10 — 영상이 5fps로 보이던 문제 수정

    무엇이 문제였나

    • 0.4.9 에서 디코더 쓰레드가 매 프레임마다 ByteBuffer.allocateDirect(w*h*4) 를 새로 잡았습니다.
    • 1080p × 24fps = 초당 192MB direct memory 할당. 매번 페이지 zero-fill + 이전 버퍼 Cleaner 큐 처리.
    • 디코더가 메모리 처리에 시간을 다 써서 grab() 이 실시간 페이스를 따라가지 못함 → 단일 슬롯 latest 가 버스트로 채워지고 렌더 쓰레드는 ~5fps 로만 샘플링.
    • 게임 전체는 부드러운데 영상만 끊기는 증상이 그 때문이었습니다.

    무엇이 바뀌었나

    • 디코더 측에 RGBA staging 버퍼를 backend 인스턴스당 단 한 번 preallocate.
    • 짧은 lock 안에서 디코더가 staging 으로 memcpy, 렌더 쓰레드가 같은 lock 안에서 staging → GPU 텍스처 포인터로 memcpy.
    • VideoBackend.pollFrame() → ByteBufferconsumeFrame(long dstAddr, long maxBytes) → boolean 로 교체. 버퍼 소유권 race 없음, 할당 없음.
    • 0.4.9 의 RGBA pixel format / TextureManager.release 수정은 그대로 유지.

    받기

    • Windows 64bit: video_player-windows-x86_64-0.4.10.jar
    • macOS Intel: video_player-macosx-x86_64-0.4.10.jar
    • macOS Apple Silicon: video_player-macosx-arm64-0.4.10.jar
    • Linux 64bit: video_player-linux-x86_64-0.4.10.jar
    • 바닐라(JavaCV 별도 설치용): video_player-0.4.10.jar
    Downloads
  • v0.4.9 3d4843dd0d

    v0.4.9 — real stutter fix + delete-crash defense
    Some checks failed
    build / build (push) Has been cancelled
    Stable

    claude-bot released this 2026-05-15 22:32:32 +09:00 | 22 commits to main since this release

    0.4.7/0.4.8 의 끊김 근본 원인 수정 + 삭제 시 잠재적 텍스처 release 누락 방어 패치.

    끊김 (root cause):

    • 0.4.7 에서 GPU 텍스처 업로드는 memcpy 로 바꿨는데, 디코드 쪽 toRgba() 가 여전히 BufferedImage.getRGB() + 픽셀별 ARGB→RGBA 루프(1080p 기준 200만회)를 돌고 있었습니다. 한 프레임당 20-50ms.
    • 이게 실시간 24fps(~42ms/프레임) 보다 느려지면 오디오 버퍼가 비고 → 백프레셔 사라짐 → 디코더가 풀스피드로 catch-up 프레임을 1슬롯 AtomicReference 에 덮어쓰기(0.5초 버퍼 분량의 12프레임 중 11개 드롭) → 다시 오디오 버퍼 차면 ~0.5초 블록. 사용자 분이 말씀하신 '한번 로딩, 다음 로딩 전까지 끊김' 패턴과 정확히 일치.
    • v0.4.9 에서는 FFmpegFrameGrabber.setPixelFormat(AV_PIX_FMT_RGBA=26) 으로 swscale 한테 RGBA 변환을 강제. frame.image[0] 이 바로 ByteBuffer (RGBA 바이트) 라서 fresh direct buffer 로 copy 만 하면 끝. 컬러스페이스 변환은 swscale 의 네이티브 SIMD 에서 <1ms 에 끝나므로 디코더가 안정적으로 real-time 페이스 유지.
    • BufferedImage / Java2DFrameConverter 코드 경로 전부 제거.

    삭제 시 크래시 방어:

    • Entry.close() 가 texture.close() 만 부르고 TextureManager 등록은 안 풀어줬습니다. RenderType 이 Identifier 기준으로 캐싱되므로, 삭제 직후 캐시된 RenderType 이 죽은 GL 핸들을 bind 시키면 렌더 쓰레드 크래시 가능.
    • mc.getTextureManager().release(id) 를 close 시 호출하도록 추가.
    • 사용자 분이 보고하신 크래시 (crash-reports/ 폴더가 없다고 하셔서 정확한 트레이스는 아직 못 봤지만) 의 가장 유력한 후보. latest.log 의 끝부분(200줄) 받으면 확정 가능.

    업그레이드: video_player--0.4.9.jar 하나만 mods 폴더에 (0.4.8 jar 는 삭제). JavaCV 별도 설치는 0.4.8 부터 불필요한 것 그대로 유지.

    Downloads
  • v0.4.8 dbc76e0083

    v0.4.8 — JavaCV bundled (no separate install)
    Some checks failed
    build / build (push) Has been cancelled
    Stable

    claude-bot released this 2026-05-15 22:15:34 +09:00 | 23 commits to main since this release

    JavaCV 별도 설치 없이 jar 하나만 받으면 됩니다.

    이번 버전에서 모드 jar 안에 JavaCV 1.5.13 + FFmpeg 8.0.1 네이티브 까지 모두 포함시켰습니다 (Fabric loom 의 jarJar 로 nested jar 형태로 번들 — Fabric loader 가 런타임에 풀어서 classpath 에 추가). 이전에 필요했던 .minecraft/libraries/javacv/ 폴더 + 5개 jar 복사 + -Xbootclasspath/a:... JVM 인수 가 전부 사라집니다.

    자신의 OS·CPU 에 맞는 jar 하나만 mods 폴더에 넣으세요:

    • Windows 64bit: video_player-windows-x86_64-0.4.8.jar (~32MB)
    • macOS Intel: video_player-macosx-x86_64-0.4.8.jar (~24MB)
    • macOS Apple Silicon (M1/M2/M3/M4): video_player-macosx-arm64-0.4.8.jar (~21MB)
    • Linux 64bit: video_player-linux-x86_64-0.4.8.jar (~27MB)

    업그레이드 주의:

    • 0.4.7 이하에서 쓰던 -Xbootclasspath/a:...javacv... JVM 인수가 있다면 반드시 제거하세요. 부트클래스패스의 JavaCV 와 jar 안의 JavaCV 가 충돌해 검은 화면이 날 수 있습니다.
    • 이전 video_player-0.4.x.jar 는 mods 폴더에서 삭제. 두 개를 같이 두면 켜지지 않습니다.

    서버용 (헤드리스, JavaCV 디코더 안 씀):

    • video_player-0.4.8.jar (~85KB, 클라이언트 jar 와 다름) 가 필요하면 소스에서 -Pplatform 없이 ./gradlew build 로 직접 빌드하세요. README 의 "개발자용 빌드" 섹션 참고.

    Fabric API 0.149.0+26.1.2 / Java 25 요구사항은 0.4.7 과 동일합니다.

    Downloads
  • v0.4.7 7b7fd7f320

    v0.4.7 — smoother playback
    Some checks failed
    build / build (push) Has been cancelled
    Stable

    claude-bot released this 2026-05-15 22:06:15 +09:00 | 24 commits to main since this release

    부드러운 영상 재생.

    • 텍스처 업로드: 픽셀 단위 Java 루프 → LWJGL memcpy 한 번. 1080p 한 프레임 업로드 시간이 ~20ms → <1ms 수준으로 떨어집니다. 가장 큰 끊김 원인이었습니다.
    • 프레임 펌프 주기: 20Hz client tick → 매 렌더 프레임(LevelRenderEvents.START_MAIN). 24fps 영상에서 디코드된 프레임이 다음 tick까지 최대 50ms 대기하던 창이 사라집니다.
    • 거리 기반 오디오 게인 계산은 cheap 하므로 여전히 20Hz 로 둡니다.

    설치: video_player-0.4.7.jar 를 mods 폴더에 넣어주세요. JavaCV 의존성 / Java25 / Fabric 0.19.2 / Fabric API 0.149.0 요구사항은 0.4.6 과 동일합니다.

    Downloads
  • v0.4.6 d34dc97671

    v0.4.6 — 서버 config 자동 프리로드
    Some checks failed
    build / build (push) Has been cancelled
    Stable

    claude-bot released this 2026-05-15 21:58:26 +09:00 | 25 commits to main since this release

    변경 사항

    ⚙️ 서버 config 로 자동 프리로드

    • 모드를 서버에 넣고 처음 실행하면 <서버폴더>/config/video_player.json 이 자동 생성됩니다.
    • preload_urls 배열에 자주 쓰는 URL 을 적어두면, 플레이어가 접속할 때마다 서버가 그 URL 들에 대해 자동으로 PreloadPayload 를 보냅니다 → /videopreload 를 사람마다 입력한 것과 동일.
    • 클라이언트 동작은 기존 /videopreload 와 동일: 캐시 디렉터리, 채팅 메시지([videopreload] 다운로드 시작 / 완료), 재생 시 로컬 파일 사용 모두 그대로.

    예시:

    {
      "preload_urls": [
        "https://video.example.com/intro.mp4",
        "https://video.example.com/bgm-loop.webm"
      ]
    }
    

    규칙

    • URL 은 http:// 또는 https:// 로 시작, 256자 이하. 그 외는 무시 + WARN 로그.
    • 파일 수정 적용은 서버 재시작 필요 (config 는 시작 시 1회만 읽음).
    • 싱글플레이도 통합 서버를 띄우므로 <게임폴더>/config/video_player.json 으로 동작합니다.

    설치

    mods/video_player-0.4.5.jar0.4.6.jar 로 교체. 서버에도 동일 버전 적용 후 처음 실행하면 config 가 만들어집니다.

    Downloads
  • v0.4.5 e6faae3f39

    v0.4.5 — panel-center audio · preload feedback · BE safety
    Some checks failed
    build / build (push) Has been cancelled
    Stable

    claude-bot released this 2026-05-15 21:53:21 +09:00 | 26 commits to main since this release

    변경 사항

    🔊 오디오

    • 거리 감쇠 기준을 판때기 중앙으로 변경. 예전엔 앵커 블록(보통 화면 모서리)에서의 거리로 음량을 계산해서, 4x4 같은 큰 화면이면 소리가 한쪽 모서리에서 들리는 느낌이었습니다. 이제 화면 중앙에서 발생하는 것처럼 들립니다.

    💬 /videopreload 피드백

    • 각 클라이언트가 채팅창에 다운로드 상태를 출력합니다:
      • [videopreload] 다운로드 시작: <url> (노랑)
      • [videopreload] 완료 (N MB): <url> (초록)
      • [videopreload] 실패 (...): <url> (빨강)
      • [videopreload] 이미 캐시됨 / 이미 다운로드 중 / 기존 캐시 사용
    • 커맨드블럭으로 /videopreload/videoplace 를 이어서 쓸 때는 [videopreload] 완료 메시지를 본 뒤에 /videoplace 를 트리거하세요. 그 전에 재생하면 일반 스트리밍으로 떨어집니다.
    • /videopreload 명령 응답에도 "완료 알림 후 재생하세요" 안내가 추가됐습니다.

    🛡️ 안전장치

    • 매 클라이언트 틱마다 활성 앵커의 BE 존재를 검증합니다. BLOCK_ENTITY_UNLOAD 이벤트가 누락되는 엣지케이스(차원 이동, 청크 강제 언로드 등)에도 다음 틱 안에 재생이 정지됩니다.

    설치

    mods/video_player-0.4.4.jarvideo_player-0.4.5.jar 로 교체하세요. 서버와 클라이언트 양쪽 모두 같은 버전이어야 합니다. JavaCV/FFmpeg 네이티브 jar 동봉 절차는 README 와 동일합니다.

    Downloads
  • v0.4.4 4fc7cf46b7

    v0.4.4 — audio fix · stutter reduction · /videopreload
    Some checks failed
    build / build (push) Has been cancelled
    Stable

    claude-bot released this 2026-05-15 21:42:11 +09:00 | 27 commits to main since this release

    변경 사항

    🐛 버그 수정

    • 재생 중 삭제 시 소리가 계속 나던 문제 해결. 클라이언트에서 앵커 블록 엔티티가 언로드되면 즉시 재생을 중단합니다. 블록된 오디오 라인(SourceDataLine.write())과 FFmpeg grab() 호출도 워커 외부에서 강제로 깨워 종료 지연을 없앴습니다.

    성능

    • 스트리밍 끊김 감소. FFmpeg 옵션 튜닝(buffer_size=1MB, probesize=8MB, analyzeduration=2s, max_delay=500ms, reconnect_delay_max=2, fflags=+genpts) 및 오디오 라인 버퍼를 약 0.5초로 사전 확보.

    새 명령어

    • /videopreload <url> — 서버가 모든 접속자에게 프리로드 요청을 브로드캐스트하면, 각 클라이언트는 해당 URL을 <게임폴더>/video_player_cache/<sha256> 파일로 다운로드합니다. 이후 같은 URL로 /videoplace를 호출하거나 우클릭 배치를 하면 네트워크 스트리밍 없이 로컬 파일에서 재생되어 미세 끊김이 사라집니다.
      • 캐시 한도: URL당 최대 512MB. 캐시 폴더를 삭제하면 다시 받습니다.
      • 권한: COMMANDS_GAMEMASTER(op level 2). 커맨드 블럭에서 호출 가능합니다.

    사용 예시

    /videopreload https://example.com/intro.mp4
    # 잠시 후 (다운로드 완료를 클라이언트가 알아서 처리)
    /videoplace ~ ~ ~ north 4 3 https://example.com/intro.mp4
    

    설치

    video_player-0.4.4.jar를 받아 mods/ 폴더에 있는 기존 video_player-0.4.3.jar을 교체하세요. 클라이언트와 서버 양쪽 모두 동일 버전이어야 합니다. JavaCV/FFmpeg 네이티브 jar 동봉 절차는 README와 동일합니다.

    Downloads
  • v0.4.3 0d1f802555

    v0.4.3 — fix install guide: missing javacpp native jar
    Some checks failed
    build / build (push) Has been cancelled
    Stable

    claude-bot released this 2026-05-15 21:22:02 +09:00 | 28 commits to main since this release

    Docs-only patch. v0.4.2 mod code is unchanged.

    What changed

    Install guide previously listed 4 JavaCV jars; the 5th (the platform-specific javacpp-<os>-<arch>.jar) was silently missing. Without it, JavaCPP Loader cannot load jnijavacpp JNI bridge → FFmpeg natives fail to link → black panel + JavaCV decode error: UnsatisfiedLinkError ... jnijavacpp in latest.log.

    Now required: 5 jars (javacv.jar, javacpp.jar, javacpp-<os>-<arch>.jar, ffmpeg.jar, ffmpeg-<os>-<arch>.jar). README updated with new -Xbootclasspath/a: examples on Windows / macOS / Linux and a diagnostic note.

    Upgrading from 0.4.2

    1. Delete video_player-0.4.2.jar from .minecraft/mods/ and drop in video_player-0.4.3.jar.
    2. Add javacpp-1.5.13-<os>-<arch>.jar from javacv-platform-1.5.13-bin.zip next to your existing 4 JavaCV jars.
    3. Update the -Xbootclasspath/a: JVM arg in the official launcher to list the new 5th jar.
    Downloads
  • v0.4.2 4b14fb479b

    v0.4.2 — stick texture fix (26.1.2 model namespacing)
    Some checks failed
    build / build (push) Has been cancelled
    Stable

    claude-bot released this 2026-05-15 21:02:03 +09:00 | 30 commits to main since this release

    Fixes

    • Video stick renders as a missing-model cube despite v0.4.1 loading. Root cause: Fabric 26.1.2 model loader no longer auto-resolves unprefixed parent paths. parent: item/generated had to be written parent: minecraft:item/generated per the official Fabric 26.1.2 docs.

    Upgrade

    Delete video_player-0.4.1.jar from your mods folder, drop video_player-0.4.2.jar in. Same Fabric API (0.149.0+26.1.2) and same JavaCV 1.5.13 setup as v0.4.1.

    Downloads