치지직 · 씨미 · 숲(SOOP, 구 아프리카TV/아프리카티비) · 유튜브 · 투네이션 — 플랫폼마다 다른 WebSocket 프로토콜, 후원 단위, 인증 방식을 stream4j가 단일 StreamChat 인터페이스로 통합합니다. URL만 넣으면 끝, 자동 재연결도 내장.
stream4j의 핵심 사용법은 한 화면에 들어옵니다. Builder에 URL을 추가하고, Listener를 달고, connectAll(). 나머지는 라이브러리가 처리합니다 — WebSocket 핸드셰이크, 후원 파싱, 통화 환산, 재연결까지.
1StreamChat chat = new StreamChatBuilder() 2 .add("https://chzzk.naver.com/live/924a636224c9203259af46ad7d8b70ca") 3 .add("https://ci.me/@lyn") 4 .add("https://play.sooplive.co.kr/tjrdbs999/292536969") 5 .add("https://www.youtube.com/watch?v=Qv6o6WACJ60") 6 .add("https://toon.at/widget/alertbox/abc123") 7 .withListener(new StreamChatEventListener() { 8 @Override 9 public void onDonation(Donation donation) {10 System.out.println("[" + donation.platform() + "] "11 + donation.nickname() + ": "12 + donation.formattedAmount());13 }14 15 @Override16 public void onChat(DonationPlatform platform, String channelId,17 String nickname, String message) {18 System.out.println("[" + platform + "] " + nickname + ": " + message);19 }20 })21 .build();22 23chat.connectAll();플랫폼마다 따로 연결할 필요 없이, onChat()과 onDonation() 두 콜백에서 모두 받습니다. 아래는 시뮬레이션된 통합 이벤트 스트림 — 실제로 동작할 때의 구조를 그대로 보여줍니다.
stream4j는 chzzk4j에서 출발하여 4개 플랫폼을 더한 라이브러리로, 실제 운영 환경에서 발생하는 끊김·토큰 만료·정책 변경을 견디도록 설계되었습니다.
치지직, CiMe, SOOP, YouTube, 투네이션 — URL을 그대로 넣으면 어떤 플랫폼인지 stream4j가 알아서 판별합니다. Raw ID 방식도 지원합니다.
치즈, 별풍선, 빔, 슈퍼챗을 모두 단일 Donation record로. nickname, message, amountInKRW, formattedAmount까지 한 번에.
OkHttp ManagedWebSocket 기반. 지수 백오프 재시도, idle timeout 감지, 비복구성 에러 즉시 중단까지 내장되어 있습니다.
치지직 폴링, CiMe LIVE_ENDED 이벤트, SOOP svc_SETBJSTAT=0 패킷 등 플랫폼별 방식을 라이브러리가 추상화합니다.
치즈, 빔, 별풍선, USD를 KRW로 자동 환산. CurrencyUtils가 통화 단위를 처리하므로 후원 합산이 간단합니다.
JWT 만료 5분 전 자동 갱신, 메시지 ID 기반 중복 제거. 새 연결을 먼저 열고 구 연결을 닫아 메시지 유실을 막습니다.
각 플랫폼은 고유의 WebSocket / 폴링 / Webhook 방식으로 동작합니다. stream4j는 이 차이를 흡수하고 통합 이벤트로 정규화합니다.
플랫폼별 기능 지원과 인증 요구사항. 투네이션은 alertbox 기반 후원 알림 전용으로, 채팅과 방송 종료 감지는 제공하지 않습니다.
플랫폼이 다르면 후원 단위도, 메시지 구조도 다릅니다. stream4j는 이를 단일 Donation record로 정규화하고, 원화 환산까지 자동으로 처리합니다.
record · io.github.bbobbogi.stream4j
new StreamChatBuilder()
.add("924a636224c9203259af46ad7d8b70ca", DonationPlatform.CHZZK)
.add("tjrdbs999", DonationPlatform.SOOP)
.add("@lyn", DonationPlatform.CIME)
.add("alertbox_key", DonationPlatform.TOONATION)
.add("@jtbc_news", DonationPlatform.YOUTUBE)
.withListener(listener)
.build(); 통합 채팅 뷰어부터 마인크래프트 서버 연동, 디스코드 봇, OBS 오버레이, TTS까지 — stream4j 위에 올라가는 실제 시나리오들입니다.
기본값으로 바로 쓸 수도 있고, 운영 환경에 맞춰 조정할 수도 있습니다 — SOOP 로그인, YouTube 폴링 간격, 자동 재연결, 디버그 로그.
new StreamChatBuilder()
.add("https://...")
.withSoopCredentials("아이디", "비밀번호") // SOOP 로그인 (선택)
.withYouTubePollInterval(3000) // YouTube 폴링 간격 (기본 5000ms)
.withAutoReconnect(true) // 자동 재연결
.withDebugMode() // 디버그 로그
.withListener(listener)
.build(); Maven Central에 배포되어 있습니다. io.github.bbobbogi:stream4j. Java 11 이상이 필요합니다.
repositories {
mavenCentral()
}
dependencies {
implementation("io.github.bbobbogi:stream4j:1.0.1")
} <dependency>
<groupId>io.github.bbobbogi</groupId>
<artifactId>stream4j</artifactId>
<version>1.0.1</version>
</dependency>