[{"data":1,"prerenderedAt":2283},["ShallowReactive",2],{"navigation":3,"\u002Fdocs\u002Fdeveloper\u002Farchitecture":713,"\u002Fdocs\u002Fdeveloper\u002Farchitecture-surround":2278},[4,170,307,444,580],{"title":5,"path":6,"stem":7,"children":8,"page":32},"Docs","\u002Fdocs","1.docs",[9,33,74,95,134,154],{"title":10,"path":11,"stem":12,"children":13,"icon":32},"Getting Started","\u002Fdocs\u002Fgetting-started","1.docs\u002F1.getting-started\u002F1.index",[14,17,22,27],{"title":15,"path":11,"stem":12,"icon":16},"Introduction","i-lucide-house",{"title":18,"path":19,"stem":20,"icon":21},"Installation","\u002Fdocs\u002Fgetting-started\u002Finstallation","1.docs\u002F1.getting-started\u002F2.installation","i-lucide-download",{"title":23,"path":24,"stem":25,"icon":26},"Usage Guide","\u002Fdocs\u002Fgetting-started\u002Fusage","1.docs\u002F1.getting-started\u002F3.usage","i-lucide-sliders",{"title":28,"path":29,"stem":30,"icon":31},"Configuration Reference","\u002Fdocs\u002Fgetting-started\u002Fconfiguration","1.docs\u002F1.getting-started\u002F4.configuration","i-lucide-settings",false,{"title":34,"icon":35,"path":36,"stem":37,"children":38,"page":32},"Features","i-lucide-star","\u002Fdocs\u002Ffeatures","1.docs\u002F2.features",[39,44,49,54,59,64,69],{"title":40,"path":41,"stem":42,"icon":43},"Video Sniffing","\u002Fdocs\u002Ffeatures\u002Fvideo-sniffing","1.docs\u002F2.features\u002F1.video-sniffing","i-lucide-video",{"title":45,"path":46,"stem":47,"icon":48},"Audio Capture","\u002Fdocs\u002Ffeatures\u002Faudio-capture","1.docs\u002F2.features\u002F2.audio-capture","i-lucide-music",{"title":50,"path":51,"stem":52,"icon":53},"Image Download","\u002Fdocs\u002Ffeatures\u002Fimage-download","1.docs\u002F2.features\u002F3.image-download","i-lucide-image",{"title":55,"path":56,"stem":57,"icon":58},"Privacy & Security","\u002Fdocs\u002Ffeatures\u002Fprivacy-security","1.docs\u002F2.features\u002F4.privacy-security","i-lucide-shield-check",{"title":60,"path":61,"stem":62,"icon":63},"Format Conversion","\u002Fdocs\u002Ffeatures\u002Fformat-conversion","1.docs\u002F2.features\u002F5.format-conversion","i-lucide-arrow-left-right",{"title":65,"path":66,"stem":67,"icon":68},"Batch Download","\u002Fdocs\u002Ffeatures\u002Fbatch-download","1.docs\u002F2.features\u002F6.batch-download","i-lucide-layers",{"title":70,"path":71,"stem":72,"icon":73},"Keyboard Shortcuts","\u002Fdocs\u002Ffeatures\u002Fkeyboard-shortcuts","1.docs\u002F2.features\u002F7.keyboard-shortcuts","i-lucide-keyboard",{"title":75,"icon":76,"path":77,"stem":78,"children":79,"page":32},"Advanced","i-lucide-book-open","\u002Fdocs\u002Fadvanced","1.docs\u002F3.advanced",[80,85,90],{"title":81,"path":82,"stem":83,"icon":84},"Online Tools","\u002Fdocs\u002Fadvanced\u002Fonline-tools","1.docs\u002F3.advanced\u002F1.online-tools","i-lucide-globe",{"title":86,"path":87,"stem":88,"icon":89},"Browser Compatibility","\u002Fdocs\u002Fadvanced\u002Fbrowser-compatibility","1.docs\u002F3.advanced\u002F2.browser-compatibility","i-lucide-monitor-check",{"title":91,"path":92,"stem":93,"icon":94},"Download Engine Architecture","\u002Fdocs\u002Fadvanced\u002Fdownload-engine","1.docs\u002F3.advanced\u002F3.download-engine","i-lucide-cpu",{"title":96,"icon":97,"path":98,"stem":99,"children":100,"page":32},"Use Cases","i-lucide-lightbulb","\u002Fdocs\u002Fusecases","1.docs\u002F4.usecases",[101,106,110,115,120,124,129],{"title":102,"path":103,"stem":104,"icon":105},"Online Courses & Educational Platforms","\u002Fdocs\u002Fusecases\u002Fonline-courses","1.docs\u002F4.usecases\u002F1.online-courses","i-lucide-graduation-cap",{"title":107,"path":108,"stem":109,"icon":43},"Video Platforms & UGC Content","\u002Fdocs\u002Fusecases\u002Fvideo-platforms","1.docs\u002F4.usecases\u002F2.video-platforms",{"title":111,"path":112,"stem":113,"icon":114},"Live Replays & Event Recordings","\u002Fdocs\u002Fusecases\u002Flive-replays","1.docs\u002F4.usecases\u002F3.live-replays","i-lucide-radio",{"title":116,"path":117,"stem":118,"icon":119},"Podcasts & Audio Content","\u002Fdocs\u002Fusecases\u002Fpodcasts-audio","1.docs\u002F4.usecases\u002F4.podcasts-audio","i-lucide-headphones",{"title":121,"path":122,"stem":123,"icon":53},"Image Galleries & Wallpaper Batch Download","\u002Fdocs\u002Fusecases\u002Fimage-galleries","1.docs\u002F4.usecases\u002F5.image-galleries",{"title":125,"path":126,"stem":127,"icon":128},"Corporate Training & Internal Videos","\u002Fdocs\u002Fusecases\u002Fcorporate-training","1.docs\u002F4.usecases\u002F6.corporate-training","i-lucide-building-2",{"title":130,"path":131,"stem":132,"icon":133},"Personal Media Archiving & Collection","\u002Fdocs\u002Fusecases\u002Fpersonal-archiving","1.docs\u002F4.usecases\u002F7.personal-archiving","i-lucide-archive",{"title":135,"icon":136,"path":137,"stem":138,"children":139,"page":32},"Troubleshooting","i-lucide-wrench","\u002Fdocs\u002Ftroubleshooting","1.docs\u002F5.troubleshooting",[140,144,149],{"title":141,"path":142,"stem":143,"icon":136},"Common Issues Troubleshooting","\u002Fdocs\u002Ftroubleshooting\u002Fcommon-issues","1.docs\u002F5.troubleshooting\u002F1.common-issues",{"title":145,"path":146,"stem":147,"icon":148},"Known Limitations & Caveats","\u002Fdocs\u002Ftroubleshooting\u002Fknown-issues","1.docs\u002F5.troubleshooting\u002F2.known-issues","i-lucide-alert-triangle",{"title":150,"path":151,"stem":152,"icon":153},"FAQ","\u002Fdocs\u002Ftroubleshooting\u002Ffaq","1.docs\u002F5.troubleshooting\u002F3.faq","i-lucide-message-circle-question",{"title":155,"icon":156,"path":157,"stem":158,"children":159,"page":32},"Developer Docs","i-lucide-code","\u002Fdocs\u002Fdeveloper","1.docs\u002F6.developer",[160,165],{"title":161,"path":162,"stem":163,"icon":164},"Contributing Guide","\u002Fdocs\u002Fdeveloper\u002Fcontributing","1.docs\u002F6.developer\u002F1.contributing","i-lucide-git-pull-request",{"title":166,"path":167,"stem":168,"icon":169},"Project Architecture","\u002Fdocs\u002Fdeveloper\u002Farchitecture","1.docs\u002F6.developer\u002F2.architecture","i-lucide-box",{"title":171,"path":172,"stem":173,"children":174,"page":32},"Ja","\u002Fja","ja",[175,194,227,244,277,294],{"title":176,"path":177,"stem":178,"children":179,"icon":32},"クイックスタート","\u002Fja\u002Fgetting-started","ja\u002F1.getting-started\u002F1.index",[180,182,186,190],{"title":181,"path":177,"stem":178,"icon":16},"概要",{"title":183,"path":184,"stem":185,"icon":21},"インストール","\u002Fja\u002Fgetting-started\u002Finstallation","ja\u002F1.getting-started\u002F2.installation",{"title":187,"path":188,"stem":189,"icon":26},"使用方法","\u002Fja\u002Fgetting-started\u002Fusage","ja\u002F1.getting-started\u002F3.usage",{"title":191,"path":192,"stem":193,"icon":31},"設定リファレンス","\u002Fja\u002Fgetting-started\u002Fconfiguration","ja\u002F1.getting-started\u002F4.configuration",{"title":195,"icon":35,"path":196,"stem":197,"children":198,"page":32},"機能","\u002Fja\u002Ffeatures","ja\u002F2.features",[199,203,207,211,215,219,223],{"title":200,"path":201,"stem":202,"icon":43},"動画検知","\u002Fja\u002Ffeatures\u002Fvideo-sniffing","ja\u002F2.features\u002F1.video-sniffing",{"title":204,"path":205,"stem":206,"icon":48},"音声キャプチャ","\u002Fja\u002Ffeatures\u002Faudio-capture","ja\u002F2.features\u002F2.audio-capture",{"title":208,"path":209,"stem":210,"icon":53},"画像ダウンロード","\u002Fja\u002Ffeatures\u002Fimage-download","ja\u002F2.features\u002F3.image-download",{"title":212,"path":213,"stem":214,"icon":58},"プライバシーとセキュリティ","\u002Fja\u002Ffeatures\u002Fprivacy-security","ja\u002F2.features\u002F4.privacy-security",{"title":216,"path":217,"stem":218,"icon":63},"フォーマット変換","\u002Fja\u002Ffeatures\u002Fformat-conversion","ja\u002F2.features\u002F5.format-conversion",{"title":220,"path":221,"stem":222,"icon":68},"一括ダウンロード","\u002Fja\u002Ffeatures\u002Fbatch-download","ja\u002F2.features\u002F6.batch-download",{"title":224,"path":225,"stem":226,"icon":73},"キーボードショートカット","\u002Fja\u002Ffeatures\u002Fkeyboard-shortcuts","ja\u002F2.features\u002F7.keyboard-shortcuts",{"title":228,"icon":76,"path":229,"stem":230,"children":231,"page":32},"詳細情報","\u002Fja\u002Fadvanced","ja\u002F3.advanced",[232,236,240],{"title":233,"path":234,"stem":235,"icon":84},"オンラインツール","\u002Fja\u002Fadvanced\u002Fonline-tools","ja\u002F3.advanced\u002F1.online-tools",{"title":237,"path":238,"stem":239,"icon":89},"ブラウザ互換性","\u002Fja\u002Fadvanced\u002Fbrowser-compatibility","ja\u002F3.advanced\u002F2.browser-compatibility",{"title":241,"path":242,"stem":243,"icon":94},"ダウンロードエンジンアーキテクチャ","\u002Fja\u002Fadvanced\u002Fdownload-engine","ja\u002F3.advanced\u002F3.download-engine",{"title":245,"icon":97,"path":246,"stem":247,"children":248,"page":32},"ユースケース","\u002Fja\u002Fusecases","ja\u002F4.usecases",[249,253,257,261,265,269,273],{"title":250,"path":251,"stem":252,"icon":105},"オンラインコースと教育プラットフォーム","\u002Fja\u002Fusecases\u002Fonline-courses","ja\u002F4.usecases\u002F1.online-courses",{"title":254,"path":255,"stem":256,"icon":43},"動画プラットフォームと UGC コンテンツ","\u002Fja\u002Fusecases\u002Fvideo-platforms","ja\u002F4.usecases\u002F2.video-platforms",{"title":258,"path":259,"stem":260,"icon":114},"ライブ配信アーカイブと競技録画","\u002Fja\u002Fusecases\u002Flive-replays","ja\u002F4.usecases\u002F3.live-replays",{"title":262,"path":263,"stem":264,"icon":119},"ポッドキャストとオーディオコンテンツ","\u002Fja\u002Fusecases\u002Fpodcasts-audio","ja\u002F4.usecases\u002F4.podcasts-audio",{"title":266,"path":267,"stem":268,"icon":53},"ギャラリーと壁紙の一括ダウンロード","\u002Fja\u002Fusecases\u002Fimage-galleries","ja\u002F4.usecases\u002F5.image-galleries",{"title":270,"path":271,"stem":272,"icon":128},"企業研修と内部動画","\u002Fja\u002Fusecases\u002Fcorporate-training","ja\u002F4.usecases\u002F6.corporate-training",{"title":274,"path":275,"stem":276,"icon":133},"個人メディアコレクションとアーカイブ","\u002Fja\u002Fusecases\u002Fpersonal-archiving","ja\u002F4.usecases\u002F7.personal-archiving",{"title":278,"icon":136,"path":279,"stem":280,"children":281,"page":32},"トラブルシューティング","\u002Fja\u002Ftroubleshooting","ja\u002F5.troubleshooting",[282,286,290],{"title":283,"path":284,"stem":285,"icon":136},"一般的な問題のトラブルシューティング","\u002Fja\u002Ftroubleshooting\u002Fcommon-issues","ja\u002F5.troubleshooting\u002F1.common-issues",{"title":287,"path":288,"stem":289,"icon":148},"既知の制限事項と注意点","\u002Fja\u002Ftroubleshooting\u002Fknown-issues","ja\u002F5.troubleshooting\u002F2.known-issues",{"title":291,"path":292,"stem":293,"icon":153},"よくある質問","\u002Fja\u002Ftroubleshooting\u002Ffaq","ja\u002F5.troubleshooting\u002F3.faq",{"title":295,"icon":156,"path":296,"stem":297,"children":298,"page":32},"開発者ガイド","\u002Fja\u002Fdeveloper","ja\u002F6.developer",[299,303],{"title":300,"path":301,"stem":302,"icon":164},"貢献ガイド","\u002Fja\u002Fdeveloper\u002Fcontributing","ja\u002F6.developer\u002F1.contributing",{"title":304,"path":305,"stem":306,"icon":169},"プロジェクトアーキテクチャ","\u002Fja\u002Fdeveloper\u002Farchitecture","ja\u002F6.developer\u002F2.architecture",{"title":308,"path":309,"stem":310,"children":311,"page":32},"Ko","\u002Fko","ko",[312,331,364,381,414,431],{"title":313,"path":314,"stem":315,"children":316,"icon":32},"빠른 시작","\u002Fko\u002Fgetting-started","ko\u002F1.getting-started\u002F1.index",[317,319,323,327],{"title":318,"path":314,"stem":315,"icon":16},"소개",{"title":320,"path":321,"stem":322,"icon":21},"설치","\u002Fko\u002Fgetting-started\u002Finstallation","ko\u002F1.getting-started\u002F2.installation",{"title":324,"path":325,"stem":326,"icon":26},"사용 방법","\u002Fko\u002Fgetting-started\u002Fusage","ko\u002F1.getting-started\u002F3.usage",{"title":328,"path":329,"stem":330,"icon":31},"설정 참조","\u002Fko\u002Fgetting-started\u002Fconfiguration","ko\u002F1.getting-started\u002F4.configuration",{"title":332,"icon":35,"path":333,"stem":334,"children":335,"page":32},"기능","\u002Fko\u002Ffeatures","ko\u002F2.features",[336,340,344,348,352,356,360],{"title":337,"path":338,"stem":339,"icon":43},"비디오 스니핑","\u002Fko\u002Ffeatures\u002Fvideo-sniffing","ko\u002F2.features\u002F1.video-sniffing",{"title":341,"path":342,"stem":343,"icon":48},"오디오 캡처","\u002Fko\u002Ffeatures\u002Faudio-capture","ko\u002F2.features\u002F2.audio-capture",{"title":345,"path":346,"stem":347,"icon":53},"이미지 다운로드","\u002Fko\u002Ffeatures\u002Fimage-download","ko\u002F2.features\u002F3.image-download",{"title":349,"path":350,"stem":351,"icon":58},"개인정보 보호와 보안","\u002Fko\u002Ffeatures\u002Fprivacy-security","ko\u002F2.features\u002F4.privacy-security",{"title":353,"path":354,"stem":355,"icon":63},"포맷 변환","\u002Fko\u002Ffeatures\u002Fformat-conversion","ko\u002F2.features\u002F5.format-conversion",{"title":357,"path":358,"stem":359,"icon":68},"일괄 다운로드","\u002Fko\u002Ffeatures\u002Fbatch-download","ko\u002F2.features\u002F6.batch-download",{"title":361,"path":362,"stem":363,"icon":73},"키보드 단축키","\u002Fko\u002Ffeatures\u002Fkeyboard-shortcuts","ko\u002F2.features\u002F7.keyboard-shortcuts",{"title":365,"icon":76,"path":366,"stem":367,"children":368,"page":32},"고급 가이드","\u002Fko\u002Fadvanced","ko\u002F3.advanced",[369,373,377],{"title":370,"path":371,"stem":372,"icon":84},"온라인 도구","\u002Fko\u002Fadvanced\u002Fonline-tools","ko\u002F3.advanced\u002F1.online-tools",{"title":374,"path":375,"stem":376,"icon":89},"브라우저 호환성","\u002Fko\u002Fadvanced\u002Fbrowser-compatibility","ko\u002F3.advanced\u002F2.browser-compatibility",{"title":378,"path":379,"stem":380,"icon":94},"다운로드 엔진 아키텍처","\u002Fko\u002Fadvanced\u002Fdownload-engine","ko\u002F3.advanced\u002F3.download-engine",{"title":382,"icon":97,"path":383,"stem":384,"children":385,"page":32},"사용 사례","\u002Fko\u002Fusecases","ko\u002F4.usecases",[386,390,394,398,402,406,410],{"title":387,"path":388,"stem":389,"icon":105},"온라인 강좌 및 교육 플랫폼","\u002Fko\u002Fusecases\u002Fonline-courses","ko\u002F4.usecases\u002F1.online-courses",{"title":391,"path":392,"stem":393,"icon":43},"비디오 플랫폼 및 UGC 콘텐츠","\u002Fko\u002Fusecases\u002Fvideo-platforms","ko\u002F4.usecases\u002F2.video-platforms",{"title":395,"path":396,"stem":397,"icon":114},"라이브 방송 재생 및 경기 녹화","\u002Fko\u002Fusecases\u002Flive-replays","ko\u002F4.usecases\u002F3.live-replays",{"title":399,"path":400,"stem":401,"icon":119},"팟캐스트 및 오디오 콘텐츠","\u002Fko\u002Fusecases\u002Fpodcasts-audio","ko\u002F4.usecases\u002F4.podcasts-audio",{"title":403,"path":404,"stem":405,"icon":53},"이미지 갤러리 및 배경화면 일괄 다운로드","\u002Fko\u002Fusecases\u002Fimage-galleries","ko\u002F4.usecases\u002F5.image-galleries",{"title":407,"path":408,"stem":409,"icon":128},"기업 교육 및 내부 비디오","\u002Fko\u002Fusecases\u002Fcorporate-training","ko\u002F4.usecases\u002F6.corporate-training",{"title":411,"path":412,"stem":413,"icon":133},"개인 미디어 수집 및 보관","\u002Fko\u002Fusecases\u002Fpersonal-archiving","ko\u002F4.usecases\u002F7.personal-archiving",{"title":415,"icon":136,"path":416,"stem":417,"children":418,"page":32},"문제 해결","\u002Fko\u002Ftroubleshooting","ko\u002F5.troubleshooting",[419,423,427],{"title":420,"path":421,"stem":422,"icon":136},"일반적인 문제 해결","\u002Fko\u002Ftroubleshooting\u002Fcommon-issues","ko\u002F5.troubleshooting\u002F1.common-issues",{"title":424,"path":425,"stem":426,"icon":148},"알려진 제한 사항 및 주의사항","\u002Fko\u002Ftroubleshooting\u002Fknown-issues","ko\u002F5.troubleshooting\u002F2.known-issues",{"title":428,"path":429,"stem":430,"icon":153},"자주 묻는 질문","\u002Fko\u002Ftroubleshooting\u002Ffaq","ko\u002F5.troubleshooting\u002F3.faq",{"title":432,"icon":156,"path":433,"stem":434,"children":435,"page":32},"개발자 문서","\u002Fko\u002Fdeveloper","ko\u002F6.developer",[436,440],{"title":437,"path":438,"stem":439,"icon":164},"기여 가이드라인","\u002Fko\u002Fdeveloper\u002Fcontributing","ko\u002F6.developer\u002F1.contributing",{"title":441,"path":442,"stem":443,"icon":169},"프로젝트 아키텍처","\u002Fko\u002Fdeveloper\u002Farchitecture","ko\u002F6.developer\u002F2.architecture",{"title":445,"path":446,"stem":447,"children":448,"page":32},"Zh Hans","\u002Fzh-hans","zh-Hans",[449,467,500,517,550,567],{"title":450,"path":451,"stem":452,"children":453,"icon":32},"快速开始","\u002Fzh-hans\u002Fgetting-started","zh-Hans\u002F1.getting-started\u002F1.index",[454,456,460,463],{"title":455,"path":451,"stem":452,"icon":16},"简介",{"title":457,"path":458,"stem":459,"icon":21},"安装","\u002Fzh-hans\u002Fgetting-started\u002Finstallation","zh-Hans\u002F1.getting-started\u002F2.installation",{"title":187,"path":461,"stem":462,"icon":26},"\u002Fzh-hans\u002Fgetting-started\u002Fusage","zh-Hans\u002F1.getting-started\u002F3.usage",{"title":464,"path":465,"stem":466,"icon":31},"配置参考","\u002Fzh-hans\u002Fgetting-started\u002Fconfiguration","zh-Hans\u002F1.getting-started\u002F4.configuration",{"title":468,"icon":35,"path":469,"stem":470,"children":471,"page":32},"功能特性","\u002Fzh-hans\u002Ffeatures","zh-Hans\u002F2.features",[472,476,480,484,488,492,496],{"title":473,"path":474,"stem":475,"icon":43},"视频嗅探","\u002Fzh-hans\u002Ffeatures\u002Fvideo-sniffing","zh-Hans\u002F2.features\u002F1.video-sniffing",{"title":477,"path":478,"stem":479,"icon":48},"音频捕获","\u002Fzh-hans\u002Ffeatures\u002Faudio-capture","zh-Hans\u002F2.features\u002F2.audio-capture",{"title":481,"path":482,"stem":483,"icon":53},"图片下载","\u002Fzh-hans\u002Ffeatures\u002Fimage-download","zh-Hans\u002F2.features\u002F3.image-download",{"title":485,"path":486,"stem":487,"icon":58},"隐私与安全","\u002Fzh-hans\u002Ffeatures\u002Fprivacy-security","zh-Hans\u002F2.features\u002F4.privacy-security",{"title":489,"path":490,"stem":491,"icon":63},"格式转换","\u002Fzh-hans\u002Ffeatures\u002Fformat-conversion","zh-Hans\u002F2.features\u002F5.format-conversion",{"title":493,"path":494,"stem":495,"icon":68},"批量下载","\u002Fzh-hans\u002Ffeatures\u002Fbatch-download","zh-Hans\u002F2.features\u002F6.batch-download",{"title":497,"path":498,"stem":499,"icon":73},"键盘快捷键","\u002Fzh-hans\u002Ffeatures\u002Fkeyboard-shortcuts","zh-Hans\u002F2.features\u002F7.keyboard-shortcuts",{"title":501,"icon":76,"path":502,"stem":503,"children":504,"page":32},"高级指南","\u002Fzh-hans\u002Fadvanced","zh-Hans\u002F3.advanced",[505,509,513],{"title":506,"path":507,"stem":508,"icon":84},"在线工具","\u002Fzh-hans\u002Fadvanced\u002Fonline-tools","zh-Hans\u002F3.advanced\u002F1.online-tools",{"title":510,"path":511,"stem":512,"icon":89},"浏览器兼容性","\u002Fzh-hans\u002Fadvanced\u002Fbrowser-compatibility","zh-Hans\u002F3.advanced\u002F2.browser-compatibility",{"title":514,"path":515,"stem":516,"icon":94},"下载引擎架构","\u002Fzh-hans\u002Fadvanced\u002Fdownload-engine","zh-Hans\u002F3.advanced\u002F3.download-engine",{"title":518,"icon":97,"path":519,"stem":520,"children":521,"page":32},"使用场景","\u002Fzh-hans\u002Fusecases","zh-Hans\u002F4.usecases",[522,526,530,534,538,542,546],{"title":523,"path":524,"stem":525,"icon":105},"在线课程与教育平台","\u002Fzh-hans\u002Fusecases\u002Fonline-courses","zh-Hans\u002F4.usecases\u002F1.online-courses",{"title":527,"path":528,"stem":529,"icon":43},"视频平台与 UGC 内容","\u002Fzh-hans\u002Fusecases\u002Fvideo-platforms","zh-Hans\u002F4.usecases\u002F2.video-platforms",{"title":531,"path":532,"stem":533,"icon":114},"直播回放与赛事录像","\u002Fzh-hans\u002Fusecases\u002Flive-replays","zh-Hans\u002F4.usecases\u002F3.live-replays",{"title":535,"path":536,"stem":537,"icon":119},"播客与音频内容","\u002Fzh-hans\u002Fusecases\u002Fpodcasts-audio","zh-Hans\u002F4.usecases\u002F4.podcasts-audio",{"title":539,"path":540,"stem":541,"icon":53},"图库与壁纸批量下载","\u002Fzh-hans\u002Fusecases\u002Fimage-galleries","zh-Hans\u002F4.usecases\u002F5.image-galleries",{"title":543,"path":544,"stem":545,"icon":128},"企业培训与内部视频","\u002Fzh-hans\u002Fusecases\u002Fcorporate-training","zh-Hans\u002F4.usecases\u002F6.corporate-training",{"title":547,"path":548,"stem":549,"icon":133},"个人媒体收藏与归档","\u002Fzh-hans\u002Fusecases\u002Fpersonal-archiving","zh-Hans\u002F4.usecases\u002F7.personal-archiving",{"title":551,"icon":136,"path":552,"stem":553,"children":554,"page":32},"故障排除","\u002Fzh-hans\u002Ftroubleshooting","zh-Hans\u002F5.troubleshooting",[555,559,563],{"title":556,"path":557,"stem":558,"icon":136},"常见问题排查","\u002Fzh-hans\u002Ftroubleshooting\u002Fcommon-issues","zh-Hans\u002F5.troubleshooting\u002F1.common-issues",{"title":560,"path":561,"stem":562,"icon":148},"已知限制与注意事项","\u002Fzh-hans\u002Ftroubleshooting\u002Fknown-issues","zh-Hans\u002F5.troubleshooting\u002F2.known-issues",{"title":564,"path":565,"stem":566,"icon":153},"常见问题解答","\u002Fzh-hans\u002Ftroubleshooting\u002Ffaq","zh-Hans\u002F5.troubleshooting\u002F3.faq",{"title":568,"icon":156,"path":569,"stem":570,"children":571,"page":32},"开发者文档","\u002Fzh-hans\u002Fdeveloper","zh-Hans\u002F6.developer",[572,576],{"title":573,"path":574,"stem":575,"icon":164},"贡献指南","\u002Fzh-hans\u002Fdeveloper\u002Fcontributing","zh-Hans\u002F6.developer\u002F1.contributing",{"title":577,"path":578,"stem":579,"icon":169},"项目架构","\u002Fzh-hans\u002Fdeveloper\u002Farchitecture","zh-Hans\u002F6.developer\u002F2.architecture",{"title":581,"path":582,"stem":583,"children":584,"page":32},"Zh Hant","\u002Fzh-hant","zh-Hant",[585,603,636,652,684,701],{"title":586,"path":587,"stem":588,"children":589,"icon":32},"快速入門","\u002Fzh-hant\u002Fgetting-started","zh-Hant\u002F1.getting-started\u002F1.index",[590,592,596,599],{"title":591,"path":587,"stem":588,"icon":16},"簡介",{"title":593,"path":594,"stem":595,"icon":21},"安裝","\u002Fzh-hant\u002Fgetting-started\u002Finstallation","zh-Hant\u002F1.getting-started\u002F2.installation",{"title":187,"path":597,"stem":598,"icon":26},"\u002Fzh-hant\u002Fgetting-started\u002Fusage","zh-Hant\u002F1.getting-started\u002F3.usage",{"title":600,"path":601,"stem":602,"icon":31},"配置參考","\u002Fzh-hant\u002Fgetting-started\u002Fconfiguration","zh-Hant\u002F1.getting-started\u002F4.configuration",{"title":604,"icon":35,"path":605,"stem":606,"children":607,"page":32},"功能特色","\u002Fzh-hant\u002Ffeatures","zh-Hant\u002F2.features",[608,612,616,620,624,628,632],{"title":609,"path":610,"stem":611,"icon":43},"影片嗅探","\u002Fzh-hant\u002Ffeatures\u002Fvideo-sniffing","zh-Hant\u002F2.features\u002F1.video-sniffing",{"title":613,"path":614,"stem":615,"icon":48},"音訊擷取","\u002Fzh-hant\u002Ffeatures\u002Faudio-capture","zh-Hant\u002F2.features\u002F2.audio-capture",{"title":617,"path":618,"stem":619,"icon":53},"圖片下載","\u002Fzh-hant\u002Ffeatures\u002Fimage-download","zh-Hant\u002F2.features\u002F3.image-download",{"title":621,"path":622,"stem":623,"icon":58},"隱私與安全","\u002Fzh-hant\u002Ffeatures\u002Fprivacy-security","zh-Hant\u002F2.features\u002F4.privacy-security",{"title":625,"path":626,"stem":627,"icon":63},"格式轉換","\u002Fzh-hant\u002Ffeatures\u002Fformat-conversion","zh-Hant\u002F2.features\u002F5.format-conversion",{"title":629,"path":630,"stem":631,"icon":68},"批次下載","\u002Fzh-hant\u002Ffeatures\u002Fbatch-download","zh-Hant\u002F2.features\u002F6.batch-download",{"title":633,"path":634,"stem":635,"icon":73},"鍵盤快速鍵","\u002Fzh-hant\u002Ffeatures\u002Fkeyboard-shortcuts","zh-Hant\u002F2.features\u002F7.keyboard-shortcuts",{"title":501,"icon":76,"path":637,"stem":638,"children":639,"page":32},"\u002Fzh-hant\u002Fadvanced","zh-Hant\u002F3.advanced",[640,644,648],{"title":641,"path":642,"stem":643,"icon":84},"線上工具","\u002Fzh-hant\u002Fadvanced\u002Fonline-tools","zh-Hant\u002F3.advanced\u002F1.online-tools",{"title":645,"path":646,"stem":647,"icon":89},"瀏覽器相容性","\u002Fzh-hant\u002Fadvanced\u002Fbrowser-compatibility","zh-Hant\u002F3.advanced\u002F2.browser-compatibility",{"title":649,"path":650,"stem":651,"icon":94},"下載引擎架構","\u002Fzh-hant\u002Fadvanced\u002Fdownload-engine","zh-Hant\u002F3.advanced\u002F3.download-engine",{"title":518,"icon":97,"path":653,"stem":654,"children":655,"page":32},"\u002Fzh-hant\u002Fusecases","zh-Hant\u002F4.usecases",[656,660,664,668,672,676,680],{"title":657,"path":658,"stem":659,"icon":105},"線上課程與教育平台","\u002Fzh-hant\u002Fusecases\u002Fonline-courses","zh-Hant\u002F4.usecases\u002F1.online-courses",{"title":661,"path":662,"stem":663,"icon":43},"影片平台與 UGC 內容","\u002Fzh-hant\u002Fusecases\u002Fvideo-platforms","zh-Hant\u002F4.usecases\u002F2.video-platforms",{"title":665,"path":666,"stem":667,"icon":114},"直播回放與賽事錄影","\u002Fzh-hant\u002Fusecases\u002Flive-replays","zh-Hant\u002F4.usecases\u002F3.live-replays",{"title":669,"path":670,"stem":671,"icon":119},"播客與音訊內容","\u002Fzh-hant\u002Fusecases\u002Fpodcasts-audio","zh-Hant\u002F4.usecases\u002F4.podcasts-audio",{"title":673,"path":674,"stem":675,"icon":53},"圖庫與桌布批次下載","\u002Fzh-hant\u002Fusecases\u002Fimage-galleries","zh-Hant\u002F4.usecases\u002F5.image-galleries",{"title":677,"path":678,"stem":679,"icon":128},"企業培訓與內部影片","\u002Fzh-hant\u002Fusecases\u002Fcorporate-training","zh-Hant\u002F4.usecases\u002F6.corporate-training",{"title":681,"path":682,"stem":683,"icon":133},"個人媒體收藏與歸檔","\u002Fzh-hant\u002Fusecases\u002Fpersonal-archiving","zh-Hant\u002F4.usecases\u002F7.personal-archiving",{"title":685,"icon":136,"path":686,"stem":687,"children":688,"page":32},"疑難排解","\u002Fzh-hant\u002Ftroubleshooting","zh-Hant\u002F5.troubleshooting",[689,693,697],{"title":690,"path":691,"stem":692,"icon":136},"常見問題排查","\u002Fzh-hant\u002Ftroubleshooting\u002Fcommon-issues","zh-Hant\u002F5.troubleshooting\u002F1.common-issues",{"title":694,"path":695,"stem":696,"icon":148},"已知限制與注意事項","\u002Fzh-hant\u002Ftroubleshooting\u002Fknown-issues","zh-Hant\u002F5.troubleshooting\u002F2.known-issues",{"title":698,"path":699,"stem":700,"icon":153},"常見問題解答","\u002Fzh-hant\u002Ftroubleshooting\u002Ffaq","zh-Hant\u002F5.troubleshooting\u002F3.faq",{"title":568,"icon":156,"path":702,"stem":703,"children":704,"page":32},"\u002Fzh-hant\u002Fdeveloper","zh-Hant\u002F6.developer",[705,709],{"title":706,"path":707,"stem":708,"icon":164},"貢獻指南","\u002Fzh-hant\u002Fdeveloper\u002Fcontributing","zh-Hant\u002F6.developer\u002F1.contributing",{"title":710,"path":711,"stem":712,"icon":169},"專案架構","\u002Fzh-hant\u002Fdeveloper\u002Farchitecture","zh-Hant\u002F6.developer\u002F2.architecture",{"id":714,"title":166,"body":715,"description":2272,"extension":2273,"meta":2274,"navigation":2275,"path":167,"seo":2276,"stem":168,"__hash__":2277},"docs\u002F1.docs\u002F6.developer\u002F2.architecture.md",{"type":716,"value":717,"toc":2251},"minimark",[718,722,729,732,736,748,759,765,830,845,847,851,856,862,868,873,876,881,951,956,1210,1222,1226,1229,1233,1301,1305,1521,1534,1536,1540,1547,1550,1555,1561,1566,1588,1600,1607,1610,1614,1620,1624,1641,1655,1657,1661,1668,1673,1679,1689,1698,1707,1709,1713,1717,1723,1728,1817,1829,1833,1839,1850,1852,1856,1860,1866,1871,1885,1890,1901,1913,1917,1922,1926,1937,1941,1949,1963,1967,1972,1976,1987,1999,2003,2012,2016,2027,2039,2041,2045,2051,2056,2138,2140,2144,2147,2153,2160,2165,2171,2183,2185,2189,2247],[719,720,721],"p",{},"This document is for developers who want to understand FlowPick's internal design in depth, covering system architecture, module responsibilities, data flow, and key design decisions.",[719,723,724],{},[725,726],"img",{"alt":727,"src":728},"System Architecture Overview","\u002Fscreenshots\u002Farchitecture-overview.png",[730,731],"hr",{},[733,734,727],"h2",{"id":735},"system-architecture-overview",[719,737,738,739,743,744,747],{},"FlowPick consists of two main product forms: ",[740,741,742],"strong",{},"Browser Extension"," and ",[740,745,746],{},"Online Tool Website",". Both share the core download engine but differ in media detection and network request handling.",[749,750,755],"pre",{"className":751,"code":753,"language":754},[752],"language-text","┌─────────────────────────────────────────────────────────┐\n│                      FlowPick                           │\n│                                                         │\n│  ┌──────────────────┐    ┌──────────────────────────┐   │\n│  │ Browser Extension │    │   Online Tool Website    │   │\n│  │                  │    │                          │   │\n│  │ · Network request │    │ · M3U8 Downloader       │   │\n│  │   monitoring     │    │ · DASH Downloader       │   │\n│  │ · Auto media      │    │ · Documentation System  │   │\n│  │   detection      │    │ · Homepage              │   │\n│  │ · Popup UI       │    │                          │   │\n│  │ · Cross-origin    │    │                          │   │\n│  │   request ability│    │                          │   │\n│  └────────┬─────────┘    └────────────┬─────────────┘   │\n│           │                           │                 │\n│           └───────────┬───────────────┘                 │\n│                       │                                 │\n│           ┌───────────▼───────────────┐                 │\n│           │     Core Download Engine   │                 │\n│           │                           │                 │\n│           │ · useStreamMerge.ts       │                 │\n│           │ · useFFmpeg.ts            │                 │\n│           │ · Segmented download &    │                 │\n│           │   concurrency control     │                 │\n│           │ · AES-128 decryption      │                 │\n│           │ · Streaming file write    │                 │\n│           │ · Format conversion       │                 │\n│           └───────────────────────────┘                 │\n└─────────────────────────────────────────────────────────┘\n","text",[756,757,753],"code",{"__ignoreMap":758},"",[719,760,761,764],{},[740,762,763],{},"Positioning of Two Product Forms",":",[766,767,768,782],"table",{},[769,770,771],"thead",{},[772,773,774,778,780],"tr",{},[775,776,777],"th",{},"Dimension",[775,779,742],{},[775,781,746],{},[783,784,785,797,808,819],"tbody",{},[772,786,787,791,794],{},[788,789,790],"td",{},"Target users",[788,792,793],{},"Daily high-frequency users",[788,795,796],{},"Occasional users, environments where extension cannot be installed",[772,798,799,802,805],{},[788,800,801],{},"Core advantage",[788,803,804],{},"Auto-detection, one-click download",[788,806,807],{},"No installation needed, cross-platform",[772,809,810,813,816],{},[788,811,812],{},"Technical constraints",[788,814,815],{},"Manifest V3 limitations",[788,817,818],{},"Same-origin policy restrictions",[772,820,821,824,827],{},[788,822,823],{},"Access method",[788,825,826],{},"Click toolbar icon",[788,828,829],{},"Directly visit web URL",[831,832,833],"note",{},[719,834,835,836,840,841,844],{},"For detailed feature differences and selection recommendations between extension and online tools, see ",[837,838,839],"a",{"href":82},"Online Tools — Comparison with Extension",". For extension installation steps, see ",[837,842,843],{"href":19},"Installation Guide",".",[730,846],{},[733,848,850],{"id":849},"module-details","Module Details",[852,853,855],"h3",{"id":854},"core-download-engine","Core Download Engine",[719,857,858,859,844],{},"Download engine consists of two composables located in ",[756,860,861],{},"app\u002Fcomposables\u002F",[719,863,864],{},[725,865],{"alt":866,"src":867},"Core Engine Module Relationships","\u002Fscreenshots\u002Fcore-engine-modules.png",[869,870,872],"h4",{"id":871},"usestreammergets","useStreamMerge.ts",[719,874,875],{},"Responsible for downloading, decrypting, merging, and writing media segments. This is the most core module of the entire system.",[719,877,878,764],{},[740,879,880],{},"Main Responsibilities",[766,882,883,893],{},[769,884,885],{},[772,886,887,890],{},[775,888,889],{},"Feature",[775,891,892],{},"Implementation",[783,894,895,903,911,919,927,935,943],{},[772,896,897,900],{},[788,898,899],{},"Concurrent segment download",[788,901,902],{},"Worker Pool pattern with shared task counter",[772,904,905,908],{},[788,906,907],{},"Retry mechanism",[788,909,910],{},"Exponential backoff, max 3 retries",[772,912,913,916],{},[788,914,915],{},"AES-128 decryption",[788,917,918],{},"Web Crypto API",[772,920,921,924],{},[788,922,923],{},"Segment concatenation",[788,925,926],{},"Binary direct concatenation (TS) or FFmpeg remuxing (MP4)",[772,928,929,932],{},[788,930,931],{},"File writing",[788,933,934],{},"FSA → StreamSaver → Blob three-tier fallback",[772,936,937,940],{},[788,938,939],{},"Progress tracking",[788,941,942],{},"Sliding window speed calculation + ETA estimation",[772,944,945,948],{},[788,946,947],{},"Memory management",[788,949,950],{},"Sampling estimation + threshold check + strategy selection",[719,952,953,764],{},[740,954,955],{},"Exported Interface",[749,957,961],{"className":958,"code":959,"language":960,"meta":758,"style":758},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export interface StreamMergeOptions {\n  segments: ArrayBuffer[] | AsyncGenerator\u003CArrayBuffer>\n  totalSegments: number\n  filename: string\n  outputFormat?: 'mp4' | 'ts'\n  onProgress?: (progress: StreamMergeProgress) => void\n  signal?: AbortSignal\n}\n\nexport interface StreamMergeProgress {\n  phase: 'downloading' | 'merging'\n  percent: number\n  downloadedBytes: number\n  totalBytes: number\n  speed: string\n  eta: string\n}\n","typescript",[756,962,963,984,1015,1026,1037,1067,1096,1107,1113,1120,1131,1155,1165,1175,1185,1195,1205],{"__ignoreMap":758},[964,965,968,972,976,980],"span",{"class":966,"line":967},"line",1,[964,969,971],{"class":970},"s7zQu","export",[964,973,975],{"class":974},"spNyl"," interface",[964,977,979],{"class":978},"sBMFI"," StreamMergeOptions",[964,981,983],{"class":982},"sMK4o"," {\n",[964,985,987,991,993,996,1000,1003,1006,1009,1012],{"class":966,"line":986},2,[964,988,990],{"class":989},"swJcz","  segments",[964,992,764],{"class":982},[964,994,995],{"class":978}," ArrayBuffer",[964,997,999],{"class":998},"sTEyZ","[] ",[964,1001,1002],{"class":982},"|",[964,1004,1005],{"class":978}," AsyncGenerator",[964,1007,1008],{"class":982},"\u003C",[964,1010,1011],{"class":978},"ArrayBuffer",[964,1013,1014],{"class":982},">\n",[964,1016,1018,1021,1023],{"class":966,"line":1017},3,[964,1019,1020],{"class":989},"  totalSegments",[964,1022,764],{"class":982},[964,1024,1025],{"class":978}," number\n",[964,1027,1029,1032,1034],{"class":966,"line":1028},4,[964,1030,1031],{"class":989},"  filename",[964,1033,764],{"class":982},[964,1035,1036],{"class":978}," string\n",[964,1038,1040,1043,1046,1049,1053,1056,1059,1061,1064],{"class":966,"line":1039},5,[964,1041,1042],{"class":989},"  outputFormat",[964,1044,1045],{"class":982},"?:",[964,1047,1048],{"class":982}," '",[964,1050,1052],{"class":1051},"sfazB","mp4",[964,1054,1055],{"class":982},"'",[964,1057,1058],{"class":982}," |",[964,1060,1048],{"class":982},[964,1062,1063],{"class":1051},"ts",[964,1065,1066],{"class":982},"'\n",[964,1068,1070,1073,1075,1078,1082,1084,1087,1090,1093],{"class":966,"line":1069},6,[964,1071,1072],{"class":989},"  onProgress",[964,1074,1045],{"class":982},[964,1076,1077],{"class":982}," (",[964,1079,1081],{"class":1080},"sHdIc","progress",[964,1083,764],{"class":982},[964,1085,1086],{"class":978}," StreamMergeProgress",[964,1088,1089],{"class":982},")",[964,1091,1092],{"class":974}," =>",[964,1094,1095],{"class":978}," void\n",[964,1097,1099,1102,1104],{"class":966,"line":1098},7,[964,1100,1101],{"class":989},"  signal",[964,1103,1045],{"class":982},[964,1105,1106],{"class":978}," AbortSignal\n",[964,1108,1110],{"class":966,"line":1109},8,[964,1111,1112],{"class":982},"}\n",[964,1114,1116],{"class":966,"line":1115},9,[964,1117,1119],{"emptyLinePlaceholder":1118},true,"\n",[964,1121,1123,1125,1127,1129],{"class":966,"line":1122},10,[964,1124,971],{"class":970},[964,1126,975],{"class":974},[964,1128,1086],{"class":978},[964,1130,983],{"class":982},[964,1132,1134,1137,1139,1141,1144,1146,1148,1150,1153],{"class":966,"line":1133},11,[964,1135,1136],{"class":989},"  phase",[964,1138,764],{"class":982},[964,1140,1048],{"class":982},[964,1142,1143],{"class":1051},"downloading",[964,1145,1055],{"class":982},[964,1147,1058],{"class":982},[964,1149,1048],{"class":982},[964,1151,1152],{"class":1051},"merging",[964,1154,1066],{"class":982},[964,1156,1158,1161,1163],{"class":966,"line":1157},12,[964,1159,1160],{"class":989},"  percent",[964,1162,764],{"class":982},[964,1164,1025],{"class":978},[964,1166,1168,1171,1173],{"class":966,"line":1167},13,[964,1169,1170],{"class":989},"  downloadedBytes",[964,1172,764],{"class":982},[964,1174,1025],{"class":978},[964,1176,1178,1181,1183],{"class":966,"line":1177},14,[964,1179,1180],{"class":989},"  totalBytes",[964,1182,764],{"class":982},[964,1184,1025],{"class":978},[964,1186,1188,1191,1193],{"class":966,"line":1187},15,[964,1189,1190],{"class":989},"  speed",[964,1192,764],{"class":982},[964,1194,1036],{"class":978},[964,1196,1198,1201,1203],{"class":966,"line":1197},16,[964,1199,1200],{"class":989},"  eta",[964,1202,764],{"class":982},[964,1204,1036],{"class":978},[964,1206,1208],{"class":966,"line":1207},17,[964,1209,1112],{"class":982},[831,1211,1212],{},[719,1213,1214,1215,1217,1218,844],{},"For complete technical implementation of download engine (including concurrency control, retry strategy, memory management, write strategy comparison), see ",[837,1216,91],{"href":92},". For three-tier write strategy fallback logic, see ",[837,1219,1221],{"href":1220},"\u002Fdocs\u002Fadvanced\u002Fdownload-engine#strategy-comparison-summary","Download Engine Architecture — Strategy Comparison Summary",[869,1223,1225],{"id":1224},"useffmpegts","useFFmpeg.ts",[719,1227,1228],{},"Responsible for FFmpeg WASM loading, lifecycle management, and media processing command execution.",[719,1230,1231,764],{},[740,1232,880],{},[766,1234,1235,1243],{},[769,1236,1237],{},[772,1238,1239,1241],{},[775,1240,889],{},[775,1242,892],{},[783,1244,1245,1253,1267,1277,1285,1293],{},[772,1246,1247,1250],{},[788,1248,1249],{},"WASM loading",[788,1251,1252],{},"On-demand loading, supports multithreading\u002Fsingle-thread auto-switching",[772,1254,1255,1258],{},[788,1256,1257],{},"Multithreading detection",[788,1259,1260,1261,743,1264],{},"Check ",[756,1262,1263],{},"SharedArrayBuffer",[756,1265,1266],{},"crossOriginIsolated",[772,1268,1269,1272],{},[788,1270,1271],{},"TS → MP4 remuxing",[788,1273,1274],{},[756,1275,1276],{},"ffmpeg -i input.ts -c copy output.mp4",[772,1278,1279,1282],{},[788,1280,1281],{},"Audio\u002Fvideo merge",[788,1283,1284],{},"Write to virtual FS separately, execute merge command",[772,1286,1287,1290],{},[788,1288,1289],{},"FMP4 reassembly",[788,1291,1292],{},"Handle DASH initialization segments + media segments",[772,1294,1295,1298],{},[788,1296,1297],{},"Progress callback",[788,1299,1300],{},"Parse time info from FFmpeg output",[719,1302,1303,764],{},[740,1304,955],{},[749,1306,1308],{"className":958,"code":1307,"language":960,"meta":758,"style":758},"export const useFFmpeg = () => {\n  return {\n    ffmpeg: Ref\u003CFFmpegType | null>\n    loaded: Ref\u003Cboolean>\n    loading: Ref\u003Cboolean>\n    error: Ref\u003Cstring | null>\n    load: () => Promise\u003Cvoid>\n    mergeToMP4: (options: MergeOptions) => Promise\u003CArrayBuffer>\n    mergeAudioVideo: (options: MergeAudioVideoOptions) => Promise\u003CArrayBuffer>\n    mergeFmp4: (options: MergeFmp4Options) => Promise\u003CArrayBuffer>\n  }\n}\n",[756,1309,1310,1330,1337,1357,1375,1390,1408,1426,1456,1484,1512,1517],{"__ignoreMap":758},[964,1311,1312,1314,1317,1320,1323,1326,1328],{"class":966,"line":967},[964,1313,971],{"class":970},[964,1315,1316],{"class":974}," const",[964,1318,1319],{"class":998}," useFFmpeg ",[964,1321,1322],{"class":982},"=",[964,1324,1325],{"class":982}," ()",[964,1327,1092],{"class":974},[964,1329,983],{"class":982},[964,1331,1332,1335],{"class":966,"line":986},[964,1333,1334],{"class":970},"  return",[964,1336,983],{"class":982},[964,1338,1339,1342,1344,1347,1349,1352,1354],{"class":966,"line":1017},[964,1340,1341],{"class":989},"    ffmpeg",[964,1343,764],{"class":982},[964,1345,1346],{"class":998}," Ref",[964,1348,1008],{"class":982},[964,1350,1351],{"class":998},"FFmpegType",[964,1353,1058],{"class":982},[964,1355,1356],{"class":982}," null>\n",[964,1358,1359,1362,1365,1368,1370,1373],{"class":966,"line":1028},[964,1360,1361],{"class":998},"    loaded",[964,1363,1364],{"class":989},": ",[964,1366,1367],{"class":998},"Ref",[964,1369,1008],{"class":982},[964,1371,1372],{"class":998},"boolean",[964,1374,1014],{"class":982},[964,1376,1377,1380,1382,1384,1386,1388],{"class":966,"line":1039},[964,1378,1379],{"class":998},"    loading",[964,1381,1364],{"class":989},[964,1383,1367],{"class":998},[964,1385,1008],{"class":982},[964,1387,1372],{"class":998},[964,1389,1014],{"class":982},[964,1391,1392,1395,1397,1399,1401,1404,1406],{"class":966,"line":1069},[964,1393,1394],{"class":998},"    error",[964,1396,1364],{"class":989},[964,1398,1367],{"class":998},[964,1400,1008],{"class":982},[964,1402,1403],{"class":998},"string",[964,1405,1058],{"class":982},[964,1407,1356],{"class":982},[964,1409,1410,1413,1415,1418,1420,1423],{"class":966,"line":1098},[964,1411,1412],{"class":998},"    load",[964,1414,1364],{"class":989},[964,1416,1417],{"class":982},"()",[964,1419,1092],{"class":974},[964,1421,1422],{"class":978}," Promise",[964,1424,1425],{"class":982},"\u003Cvoid>\n",[964,1427,1428,1431,1433,1436,1439,1441,1444,1446,1448,1450,1452,1454],{"class":966,"line":1109},[964,1429,1430],{"class":998},"    mergeToMP4",[964,1432,1364],{"class":989},[964,1434,1435],{"class":982},"(",[964,1437,1438],{"class":1080},"options",[964,1440,764],{"class":982},[964,1442,1443],{"class":978}," MergeOptions",[964,1445,1089],{"class":982},[964,1447,1092],{"class":974},[964,1449,1422],{"class":978},[964,1451,1008],{"class":982},[964,1453,1011],{"class":998},[964,1455,1014],{"class":982},[964,1457,1458,1461,1463,1465,1467,1469,1472,1474,1476,1478,1480,1482],{"class":966,"line":1115},[964,1459,1460],{"class":998},"    mergeAudioVideo",[964,1462,1364],{"class":989},[964,1464,1435],{"class":982},[964,1466,1438],{"class":1080},[964,1468,764],{"class":982},[964,1470,1471],{"class":978}," MergeAudioVideoOptions",[964,1473,1089],{"class":982},[964,1475,1092],{"class":974},[964,1477,1422],{"class":978},[964,1479,1008],{"class":982},[964,1481,1011],{"class":998},[964,1483,1014],{"class":982},[964,1485,1486,1489,1491,1493,1495,1497,1500,1502,1504,1506,1508,1510],{"class":966,"line":1122},[964,1487,1488],{"class":998},"    mergeFmp4",[964,1490,1364],{"class":989},[964,1492,1435],{"class":982},[964,1494,1438],{"class":1080},[964,1496,764],{"class":982},[964,1498,1499],{"class":978}," MergeFmp4Options",[964,1501,1089],{"class":982},[964,1503,1092],{"class":974},[964,1505,1422],{"class":978},[964,1507,1008],{"class":982},[964,1509,1011],{"class":998},[964,1511,1014],{"class":982},[964,1513,1514],{"class":966,"line":1133},[964,1515,1516],{"class":982},"  }\n",[964,1518,1519],{"class":966,"line":1157},[964,1520,1112],{"class":982},[831,1522,1523],{},[719,1524,1525,1526,1529,1530,844],{},"For FFmpeg WASM loading flow, multithreading detection, and performance comparison, see ",[837,1527,1528],{"href":61},"Format Conversion — FFmpeg WASM Engine",". For SharedArrayBuffer configuration requirements, see ",[837,1531,1533],{"href":1532},"\u002Fdocs\u002Fadvanced\u002Fbrowser-compatibility#advanced-apis","Browser Compatibility — Advanced APIs",[730,1535],{},[852,1537,1539],{"id":1538},"page-modules","Page Modules",[869,1541,1543,1544,1089],{"id":1542},"m3u8-downloader-m3u8-downloadervue","M3U8 Downloader (",[756,1545,1546],{},"m3u8-downloader.vue",[719,1548,1549],{},"Handles HLS streaming protocol download page.",[719,1551,1552,764],{},[740,1553,1554],{},"Processing Flow",[749,1556,1559],{"className":1557,"code":1558,"language":754},[752],"User inputs URL\n    ↓\nfetch M3U8 content\n    ↓\nm3u8-parser parsing\n    ↓\n┌─ Master Playlist? ──→ Show quality list → User selects\n│\n└─ Media Playlist? ──→ Extract segment list\n    ↓\nCheck #EXT-X-KEY (encryption info)\n    ↓\nDownload key file (if present)\n    ↓\nConcurrent segment download + decrypt\n    ↓\nMerge\u002Fremux\n    ↓\nWrite to disk\n",[756,1560,1558],{"__ignoreMap":758},[719,1562,1563,764],{},[740,1564,1565],{},"Key Dependencies",[1567,1568,1569,1576,1582],"ul",{},[1570,1571,1572,1575],"li",{},[756,1573,1574],{},"m3u8-parser",": Parse M3U8 manifest",[1570,1577,1578,1581],{},[756,1579,1580],{},"useStreamMerge",": Segment download & merging",[1570,1583,1584,1587],{},[756,1585,1586],{},"useFFmpeg",": Format conversion",[831,1589,1590],{},[719,1591,1592,1593,1597,1598,844],{},"For difference between HLS Master Playlist and Media Playlist, see ",[837,1594,1596],{"href":1595},"\u002Fdocs\u002Ffeatures\u002Fvideo-sniffing#hlsm3u8-streams","Video Sniffing — HLS Streams",". For how to use M3U8 downloader in online tools, see ",[837,1599,81],{"href":82},[869,1601,1603,1604,1089],{"id":1602},"dash-downloader-dash-downloadervue","DASH Downloader (",[756,1605,1606],{},"dash-downloader.vue",[719,1608,1609],{},"Handles DASH streaming protocol download page.",[719,1611,1612,764],{},[740,1613,1554],{},[749,1615,1618],{"className":1616,"code":1617,"language":754},[752],"User inputs URL\n    ↓\nfetch MPD content\n    ↓\nmpd-parser parsing\n    ↓\nCheck ContentProtection (DRM)\n    ↓\nExtract AdaptationSet (video\u002Faudio)\n    ↓\nShow stream list → User selects\n    ↓\nDownload initialization segments (if present)\n    ↓\nConcurrent media segment download + decrypt\n    ↓\nFMP4 reassembly \u002F A\u002FV merge\n    ↓\nWrite to disk\n",[756,1619,1617],{"__ignoreMap":758},[719,1621,1622,764],{},[740,1623,1565],{},[1567,1625,1626,1632,1636],{},[1570,1627,1628,1631],{},[756,1629,1630],{},"mpd-parser",": Parse MPD manifest",[1570,1633,1634,1581],{},[756,1635,1580],{},[1570,1637,1638,1640],{},[756,1639,1586],{},": FMP4 reassembly & A\u002FV merging",[831,1642,1643],{},[719,1644,1645,1646,1650,1651,844],{},"For DASH stream detection principles and ContentProtection handling, see ",[837,1647,1649],{"href":1648},"\u002Fdocs\u002Ffeatures\u002Fvideo-sniffing#dashmpd-streams","Video Sniffing — DASH Streams",". For DRM protected content limitation description, see ",[837,1652,1654],{"href":1653},"\u002Fdocs\u002Ftroubleshooting\u002Fknown-issues#drm-protected-content","Known Limitations — DRM Protected Content",[730,1656],{},[852,1658,1660],{"id":1659},"documentation-system","Documentation System",[719,1662,1663,1664,1667],{},"Built on Nuxt Content v3, documentation stored as Markdown files under ",[756,1665,1666],{},"content\u002F"," directory.",[719,1669,1670,764],{},[740,1671,1672],{},"Directory Structure",[749,1674,1677],{"className":1675,"code":1676,"language":754},[752],"content\u002Fzh-Hans\u002F\n├── 1.docs\u002F                    # Main documentation\n│   ├── 1.getting-started\u002F     # Getting Started\n│   ├── 2.features\u002F            # Features\n│   ├── 3.advanced\u002F            # Advanced Guide\n│   ├── 5.troubleshooting\u002F     # Troubleshooting\n│   └── 6.developer\u002F           # Developer Documentation\n├── 4.changelog\u002F               # Changelog\n└── 6.legal\u002F                   # Legal Terms\n",[756,1678,1676],{"__ignoreMap":758},[719,1680,1681,1684,1685,1688],{},[740,1682,1683],{},"Navigation System",": Each directory's ",[756,1686,1687],{},".navigation.yml"," defines category title and icon. Nuxt Content automatically collects all documents and generates sidebar navigation.",[719,1690,1691,1364,1694,1697],{},[740,1692,1693],{},"Document Layout",[756,1695,1696],{},"app\u002Flayouts\u002Fdocs.vue"," provides unified document page layout, including top navigation, sidebar, and content area.",[831,1699,1700],{},[719,1701,1702,1703,844],{},"For documentation writing conventions (Frontmatter, content format, multilingual), see ",[837,1704,1706],{"href":1705},"\u002Fdocs\u002Fdeveloper\u002Fcontributing#documentation-writing-guide","Contributing Guide — Documentation Writing Guide",[730,1708],{},[733,1710,1712],{"id":1711},"data-flow","Data Flow",[852,1714,1716],{"id":1715},"complete-download-flow","Complete Download Flow",[749,1718,1721],{"className":1719,"code":1720,"language":754},[752],"┌─────────┐    ┌──────────┐    ┌──────────┐    ┌──────────┐\n│ Get Manifest│ → │Parse Manifest│ → │Download Segments│ → │Merge & Write│\n└─────────┘    └──────────┘    └──────────┘    └──────────┘\n     │              │               │               │\n     ▼              ▼               ▼               ▼\n  fetch()      m3u8-parser    Worker Pool     useStreamMerge\n                mpd-parser    AES-128 decrypt useFFmpeg\n                              fetch() concurrent FSA\u002FSS\u002FBlob\n",[756,1722,1720],{"__ignoreMap":758},[719,1724,1725,764],{},[740,1726,1727],{},"Detailed Description of Each Stage",[766,1729,1730,1749],{},[769,1731,1732],{},[772,1733,1734,1737,1740,1743,1746],{},[775,1735,1736],{},"Stage",[775,1738,1739],{},"Input",[775,1741,1742],{},"Processing",[775,1744,1745],{},"Output",[775,1747,1748],{},"Possible Failure Reasons",[783,1750,1751,1768,1784,1801],{},[772,1752,1753,1756,1759,1762,1765],{},[788,1754,1755],{},"Get Manifest",[788,1757,1758],{},"M3U8\u002FMPD URL",[788,1760,1761],{},"HTTP GET request",[788,1763,1764],{},"Manifest text",[788,1766,1767],{},"Network error, URL expired, 404",[772,1769,1770,1773,1775,1778,1781],{},[788,1771,1772],{},"Parse Manifest",[788,1774,1764],{},[788,1776,1777],{},"m3u8\u002Fmpd-parser parsing",[788,1779,1780],{},"Segment list + metadata",[788,1782,1783],{},"Non-standard format, DRM protection",[772,1785,1786,1789,1792,1795,1798],{},[788,1787,1788],{},"Download Segments",[788,1790,1791],{},"Segment URL list",[788,1793,1794],{},"Worker Pool concurrent download",[788,1796,1797],{},"ArrayBuffer array",[788,1799,1800],{},"CORS, rate limiting, token expired",[772,1802,1803,1806,1808,1811,1814],{},[788,1804,1805],{},"Merge & Write",[788,1807,1797],{},[788,1809,1810],{},"Concatenation\u002Fremuxing + write",[788,1812,1813],{},"Disk file",[788,1815,1816],{},"Insufficient memory, write permission",[831,1818,1819],{},[719,1820,1821,1822,1826,1827,844],{},"For complete data flow of download engine (including error classification and retry mechanism), see ",[837,1823,1825],{"href":1824},"\u002Fdocs\u002Fadvanced\u002Fdownload-engine#full-data-flow-view","Download Engine Architecture — Full Data Flow View",". For troubleshooting methods when each stage fails, see ",[837,1828,141],{"href":142},[852,1830,1832],{"id":1831},"write-strategy-selection-flow","Write Strategy Selection Flow",[749,1834,1837],{"className":1835,"code":1836,"language":754},[752],"Start writing\n    │\n    ▼\nFile System Access API available?\n    │\n    ├── Yes → Use FSA streaming write (optimal)\n    │          · 16MB buffer\n    │          · Supports any size\n    │\n    └── No → StreamSaver available?\n                │\n                ├── Yes → Use StreamSaver streaming write\n                │          · Service Worker proxy\n                │          · Supports large files\n                │\n                └── No → Estimate file size\n                            │\n                            ├── \u003C 1.5GB → Blob mode\n                            │             · Load all into memory\n                            │             · Trigger browser download\n                            │\n                            └── > 1.5GB → Reject download\n                                           · Prompt to switch browser\n",[756,1838,1836],{"__ignoreMap":758},[831,1840,1841],{},[719,1842,1843,1844,1846,1847,844],{},"For detailed comparison of three-tier write strategies (including applicable scenarios and limitations of each), see ",[837,1845,1221],{"href":1220},". For each browser's support status for FSA API, see ",[837,1848,1849],{"href":87},"Browser Compatibility — Feature Support Matrix",[730,1851],{},[733,1853,1855],{"id":1854},"key-design-decisions","Key Design Decisions",[852,1857,1859],{"id":1858},"why-choose-ffmpeg-wasm-instead-of-server-side-processing","Why Choose FFmpeg WASM Instead of Server-side Processing?",[719,1861,1862,1865],{},[740,1863,1864],{},"Decision",": All media processing completed client-side in browser.",[719,1867,1868,764],{},[740,1869,1870],{},"Reasons",[1567,1872,1873,1876,1879,1882],{},[1570,1874,1875],{},"Privacy protection: User files not uploaded to server",[1570,1877,1878],{},"Zero server cost: No need to maintain transcoding server cluster",[1570,1880,1881],{},"Instant availability: No need to wait for upload and queuing",[1570,1883,1884],{},"Offline capability: Theoretically usable offline in PWA mode",[719,1886,1887,764],{},[740,1888,1889],{},"Trade-offs",[1567,1891,1892,1895,1898],{},[1570,1893,1894],{},"Performance lower than native FFmpeg (~10-20%)",[1570,1896,1897],{},"First load requires downloading WASM files (~8MB)",[1570,1899,1900],{},"Subject to browser memory limitations",[831,1902,1903],{},[719,1904,1905,1906,1910,1911,844],{},"For performance comparison data between FFmpeg WASM and native version, see ",[837,1907,1909],{"href":1908},"\u002Fdocs\u002Ftroubleshooting\u002Fknown-issues#ffmpeg-wasm-performance","Known Limitations — FFmpeg WASM Performance",". For complete privacy protection explanation, see ",[837,1912,55],{"href":56},[852,1914,1916],{"id":1915},"why-use-three-tier-write-fallback-strategy","Why Use Three-Tier Write Fallback Strategy?",[719,1918,1919,1921],{},[740,1920,1864],{},": Priority chain of FSA → StreamSaver → Blob.",[719,1923,1924,764],{},[740,1925,1870],{},[1567,1927,1928,1931,1934],{},[1570,1929,1930],{},"FSA API is optimal solution but only supported by Chrome\u002FEdge",[1570,1932,1933],{},"StreamSaver has wider compatibility but depends on Service Worker",[1570,1935,1936],{},"Blob is fallback solution ensuring all browsers can download",[719,1938,1939,764],{},[740,1940,1889],{},[1567,1942,1943,1946],{},[1570,1944,1945],{},"Need to maintain three sets of write logic",[1570,1947,1948],{},"Fallback behavior may lead to inconsistent user experience",[831,1950,1951],{},[719,1952,1953,1954,1958,1959,844],{},"For detailed implementation of three-tier strategy and fallback trigger conditions, see ",[837,1955,1957],{"href":1956},"\u002Fdocs\u002Fadvanced\u002Fdownload-engine#file-writing-module","Download Engine Architecture — File Writing Module",". For comparison of write capabilities across browsers, see ",[837,1960,1962],{"href":1961},"\u002Fdocs\u002Fadvanced\u002Fbrowser-compatibility#feature-fallback-strategies","Browser Compatibility — Feature Fallback Strategies",[852,1964,1966],{"id":1965},"why-does-concurrent-download-use-worker-pool-instead-of-pre-segmentation","Why Does Concurrent Download Use Worker Pool Instead of Pre-segmentation?",[719,1968,1969,1971],{},[740,1970,1864],{},": Use shared counter + dynamic task assignment.",[719,1973,1974,764],{},[740,1975,1870],{},[1567,1977,1978,1981,1984],{},[1570,1979,1980],{},"When segment sizes are uneven, pre-segmentation causes some Workers to idle",[1570,1982,1983],{},"Shared counter ensures all Workers keep working until task completion",[1570,1985,1986],{},"Simple implementation without complex load balancing logic",[831,1988,1989],{},[719,1990,1991,1992,1996,1997,844],{},"For concurrent control implementation and performance analysis of Worker Pool, see ",[837,1993,1995],{"href":1994},"\u002Fdocs\u002Fadvanced\u002Fdownload-engine#relationship-between-concurrency-and-performance","Download Engine Architecture — Relationship Between Concurrency and Performance",". For concurrency configuration method, see ",[837,1998,28],{"href":29},[852,2000,2002],{"id":2001},"why-do-extension-and-online-tools-share-core-engine","Why Do Extension and Online Tools Share Core Engine?",[719,2004,2005,1364,2007,743,2009,2011],{},[740,2006,1864],{},[756,2008,1580],{},[756,2010,1586],{}," as independent composables, not dependent on extension APIs.",[719,2013,2014,764],{},[740,2015,1870],{},[1567,2017,2018,2021,2024],{},[1570,2019,2020],{},"Code reuse, avoid maintaining two sets of download logic",[1570,2022,2023],{},"Online tools can serve as demo and fallback for extension features",[1570,2025,2026],{},"Easy testing: core logic debuggable in regular web environment",[831,2028,2029],{},[719,2030,2031,2032,2036,2037,844],{},"For differences between extension and online tools in CORS handling, see ",[837,2033,2035],{"href":2034},"\u002Fdocs\u002Ftroubleshooting\u002Fknown-issues#cors-cross-origin-restrictions","Known Limitations — CORS Cross-origin Restrictions",". For feature comparison of two product forms, see ",[837,2038,839],{"href":82},[730,2040],{},[733,2042,2044],{"id":2043},"dependency-graph","Dependency Graph",[749,2046,2049],{"className":2047,"code":2048,"language":754},[752],"m3u8-downloader.vue ──────┐\n                          ├──→ useStreamMerge.ts ──→ Web Crypto API\ndash-downloader.vue ──────┤         │                    fetch API\n                          │         ├──→ useFFmpeg.ts ──→ @ffmpeg\u002Fffmpeg\nExtension Popup ──────────┘         │                    @ffmpeg\u002Futil\n                                    ├──→ File System Access API\n                                    ├──→ StreamSaver.js\n                                    └──→ Blob API\n\nDocumentation ──→ @nuxt\u002Fcontent ──→ Markdown Files\n                └──→ @nuxt\u002Fui ──→ Tailwind CSS\n",[756,2050,2048],{"__ignoreMap":758},[719,2052,2053,764],{},[740,2054,2055],{},"Dependency Relationship Explanation",[766,2057,2058,2071],{},[769,2059,2060],{},[772,2061,2062,2065,2068],{},[775,2063,2064],{},"Dependency",[775,2066,2067],{},"Type",[775,2069,2070],{},"Description",[783,2072,2073,2086,2099,2112,2125],{},[772,2074,2075,2080,2083],{},[788,2076,2077],{},[756,2078,2079],{},"useStreamMerge → useFFmpeg",[788,2081,2082],{},"Optional dependency",[788,2084,2085],{},"Only needed for MP4 output or A\u002FV merging",[772,2087,2088,2093,2096],{},[788,2089,2090],{},[756,2091,2092],{},"useStreamMerge → Web Crypto API",[788,2094,2095],{},"Conditional dependency",[788,2097,2098],{},"Only needed for AES-128 encrypted streams",[772,2100,2101,2106,2109],{},[788,2102,2103],{},[756,2104,2105],{},"useStreamMerge → FSA \u002F StreamSaver \u002F Blob",[788,2107,2108],{},"Mutually exclusive selection",[788,2110,2111],{},"Select one write method by priority",[772,2113,2114,2119,2122],{},[788,2115,2116],{},[756,2117,2118],{},"Page → useStreamMerge",[788,2120,2121],{},"Direct dependency",[788,2123,2124],{},"All download pages depend on core engine",[772,2126,2127,2132,2135],{},[788,2128,2129],{},[756,2130,2131],{},"Documentation → @nuxt\u002Fcontent",[788,2133,2134],{},"Framework dependency",[788,2136,2137],{},"Nuxt Content module",[730,2139],{},[733,2141,2143],{"id":2142},"extension-architecture","Extension Architecture",[719,2145,2146],{},"Structure of extension part (not in this repository):",[749,2148,2151],{"className":2149,"code":2150,"language":754},[752],"flowpick-extension\u002F\n├── manifest.json           # Manifest V3 configuration\n├── background\u002F\n│   └── service-worker.js   # Service Worker (network monitoring)\n├── popup\u002F\n│   ├── popup.html          # Popup window\n│   ├── popup.js            # Popup window logic\n│   └── popup.css           # Popup window styles\n├── content\u002F\n│   └── content.js          # Content script (page injection)\n└── assets\u002F\n    └── icons\u002F              # Extension icons\n",[756,2152,2150],{"__ignoreMap":758},[719,2154,2155,2156,2159],{},"Extension monitors network requests via ",[756,2157,2158],{},"webRequest"," API, detects media resources, then sends URL list to popup via message passing. Popup reuses online tool's core download logic.",[719,2161,2162,764],{},[740,2163,2164],{},"Extension Communication Flow",[749,2166,2169],{"className":2167,"code":2168,"language":754},[752],"Content Script ←→ Background Service Worker ←→ Popup UI\n      │                      │                      │\n  Page DOM access        Network request monitor  User interaction UI\n  Media element detect   M3U8\u002FMPD filtering      Download trigger & manage\n",[756,2170,2168],{"__ignoreMap":758},[831,2172,2173],{},[719,2174,2175,2176,2180,2181,844],{},"For Manifest V3 restrictions on extensions and countermeasures, see ",[837,2177,2179],{"href":2178},"\u002Fdocs\u002Ftroubleshooting\u002Fknown-issues#manifest-v3-restrictions","Known Limitations — Manifest V3 Restrictions",". For extension installation and permission explanation, see ",[837,2182,843],{"href":19},[730,2184],{},[733,2186,2188],{"id":2187},"related-documentation","Related Documentation",[1567,2190,2191,2196,2201,2206,2211,2216,2221,2226,2231,2237,2242],{},[1570,2192,2193,2195],{},[837,2194,161],{"href":162}," — Development environment setup, code standards, and PR workflow",[1570,2197,2198,2200],{},[837,2199,91],{"href":92}," — Complete technical implementation of core download engine",[1570,2202,2203,2205],{},[837,2204,40],{"href":41}," — HLS\u002FDASH manifest parsing and encryption detection",[1570,2207,2208,2210],{},[837,2209,60],{"href":61}," — FFmpeg WASM engine and output formats",[1570,2212,2213,2215],{},[837,2214,86],{"href":87}," — Browser API support and degradation strategies",[1570,2217,2218,2220],{},[837,2219,81],{"href":82}," — Online tool usage and limitations",[1570,2222,2223,2225],{},[837,2224,28],{"href":29}," — Concurrency, filter, and other settings",[1570,2227,2228,2230],{},[837,2229,843],{"href":19}," — Extension installation and activation",[1570,2232,2233,2236],{},[837,2234,2235],{"href":146},"Known Limitations"," — Current version technical limitations and edge cases",[1570,2238,2239,2241],{},[837,2240,141],{"href":142}," — Diagnostic tools and troubleshooting steps",[1570,2243,2244,2246],{},[837,2245,55],{"href":56}," — Permission explanation and privacy protection",[2248,2249,2250],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":758,"searchDepth":986,"depth":986,"links":2252},[2253,2254,2259,2263,2269,2270,2271],{"id":735,"depth":986,"text":727},{"id":849,"depth":986,"text":850,"children":2255},[2256,2257,2258],{"id":854,"depth":1017,"text":855},{"id":1538,"depth":1017,"text":1539},{"id":1659,"depth":1017,"text":1660},{"id":1711,"depth":986,"text":1712,"children":2260},[2261,2262],{"id":1715,"depth":1017,"text":1716},{"id":1831,"depth":1017,"text":1832},{"id":1854,"depth":986,"text":1855,"children":2264},[2265,2266,2267,2268],{"id":1858,"depth":1017,"text":1859},{"id":1915,"depth":1017,"text":1916},{"id":1965,"depth":1017,"text":1966},{"id":2001,"depth":1017,"text":2002},{"id":2043,"depth":986,"text":2044},{"id":2142,"depth":986,"text":2143},{"id":2187,"depth":986,"text":2188},"Technical architecture details of FlowPick, including system design, module breakdown, data flow, and key design decisions.","md",{},{"icon":169},{"title":166,"description":2272},"aH8xxsYsRbXl6qOXhpLPrINU1XzPsiwVaGDptX05QC8",[2279,2281],{"title":161,"path":162,"stem":163,"description":2280,"icon":164,"children":-1},"How to contribute code, documentation, or report issues for the FlowPick project.",{"title":181,"path":177,"stem":178,"description":2282,"icon":16,"children":-1},"FlowPickはブラウザベースのメディアストリーム検出・ダウンロードツールで、HLS\u002FDASHストリーミングプロトコルをサポートし、拡張機能とオンラインツールの2つの利用方法を提供します。",1783158230892]