docs: v1.1.3 동작 설명과 일치하도록 주석/README 정리
- timemachine.js 헤더에서 'live-playback-json 매니페스트 교체로 실제 seek 살린다' 설명을 제거하고 cosmetic UI-only 패치임을 명시 - README 파일 구조: 'fetch 후킹' -> 'fetch + XHR 후킹' - README 동작 확인 로그: 'livePlaybackJson swapped for DVR manifest' (현재 코드에 없는 문자열) 를 실제 출력되는 'inner livePlaybackJson meta/live patched (liveRewind, duration, timeMachine)' 로 교체
This commit is contained in:
@@ -74,7 +74,7 @@ localStorage.setItem('chzzk-bypass:debug', '1')
|
||||
```
|
||||
manifest.json 확장 정의 (MV3)
|
||||
content.js 그리드 우회 (UA / platform / UA-CH 위장)
|
||||
timemachine.js 타임머신 강제 활성화 (fetch 후킹)
|
||||
timemachine.js 타임머신 강제 활성화 (fetch + XHR 후킹)
|
||||
popup.html/css/js 툴바 팝업
|
||||
icons/ 확장 아이콘
|
||||
```
|
||||
@@ -86,7 +86,7 @@ icons/ 확장 아이콘
|
||||
- `[chzzk-bypass:timemachine] hooks installed (fetch + XHR)` — 후킹 성공
|
||||
- `[chzzk-bypass:timemachine] XHR live-detail intercepted for <channelId>` — XHR 가로채기 진입
|
||||
- `[chzzk-bypass:timemachine] forcing timeMachine ON for <channelId>` — 패치 적용
|
||||
- `[chzzk-bypass:timemachine] livePlaybackJson swapped for DVR manifest` — 매니페스트 교체 성공
|
||||
- `[chzzk-bypass:timemachine] inner livePlaybackJson meta/live patched (liveRewind, duration, timeMachine)` — 내부 매니페스트 메타 패치 성공
|
||||
|
||||
## 면책
|
||||
|
||||
|
||||
@@ -1,17 +1,23 @@
|
||||
// 치지직 라이브 응답을 가로채 타임머신 기능을 강제로 활성화한다.
|
||||
// 스트리머가 타임머신을 꺼둔 방송에서도 플레이어에 되감기(seek) UI 를 표시하고,
|
||||
// 가능하면 DVR 매니페스트(URL) 까지 함께 갈아끼워 실제 되감기도 동작하도록 만든다.
|
||||
// 치지직 라이브 응답을 가로채 타임머신 되감기 UI 를 강제로 노출시키는 cosmetic 패치.
|
||||
//
|
||||
// 동작 원리
|
||||
// - 치지직 웹 플레이어는 `api.chzzk.naver.com/service/v3.2/channels/{id}/live-detail`
|
||||
// 응답의 `content.timeMachineActive` / `content.timeMachinePlayback` 플래그 두 개로
|
||||
// 되감기 UI 노출 여부를 결정한다.
|
||||
// - 같은 채널의 `live-playback-json` 엔드포인트는 DVR 가능한 HLS 매니페스트 URL 을
|
||||
// 항상 돌려준다. ChzzkDownloader 의 `--stream force-timemachine` 옵션이 쓰는
|
||||
// 바로 그 엔드포인트다.
|
||||
// - 따라서 `live-detail` 응답을 가로채서 (1) 두 플래그를 강제로 true 로 만들고,
|
||||
// (2) `livePlaybackJson` 안의 매니페스트 URL 을 `live-playback-json` 응답으로
|
||||
// 교체하면, 스트리머 설정과 무관하게 되감기 UI 와 실제 seek 동작 모두 살아난다.
|
||||
// 응답의 `content.timeMachineActive` / `content.timeMachinePlayback` 두 플래그와,
|
||||
// 같은 응답에 박혀 있는 `content.livePlaybackJson` (JSON 문자열) 안의
|
||||
// `meta.liveRewind`, `meta.duration`, `live.timeMachine` 필드 조합으로
|
||||
// 되감기(seek) UI 노출 여부를 결정한다.
|
||||
// - 따라서 `live-detail` 응답을 가로채서 (1) 두 플래그를 true 로 만들고,
|
||||
// (2) 내부 `livePlaybackJson` 의 meta/live 를 보강해 다시 직렬화하면 플레이어가
|
||||
// seek 바 UI 를 그리게 된다.
|
||||
//
|
||||
// 한계 (중요)
|
||||
// - 이건 UI 만 켜는 cosmetic 패치다. 실제 DVR window 자체는 CDN 이 스트리머의
|
||||
// 타임머신 설정에 따라 서버-사이드에서만 프로비저닝하므로, 스트리머가 꺼둔
|
||||
// 라이브에서는 과거 segment 가 존재하지 않아 실제 seek 은 동작하지 않을 가능성이
|
||||
// 매우 높다. 자세한 내용은 README 참고.
|
||||
// - 별도로 `live-playback-json` 엔드포인트를 fetch 해서 매니페스트를 갈아끼우는
|
||||
// 로직은 두지 않는다. 해당 엔드포인트는 스트리머가 타임머신을 켜둔 채널에서만
|
||||
// 200 을 돌려주고, 꺼둔 채널에서는 404 라 의미가 없다.
|
||||
//
|
||||
// 치지직 React 앱은 axios 기반이라 실제 요청은 `XMLHttpRequest` 로 나가고, 일부 경로는
|
||||
// `fetch` 도 쓴다. 그래서 두 경로 모두 후킹한다.
|
||||
|
||||
Reference in New Issue
Block a user