既知の制限事項と注意点
本ドキュメントは FlowPick 現在のバージョンの技術的制限と既知の問題をまとめています。これらの制限を理解することで、使用中に予期せぬ状況を避けることができます。
制限レベル説明
本ドキュメント内の各制限は影響度に基づいて 3 つのレベルに分類されます:
| レベル | アイコン | 意味 | 例 |
|---|---|---|---|
| ハード制限 | 🔴 | 回避不可能、現在のバージョンではサポートしていない | DRM 保護コンテンツ、Blob モード 1.5GB 上限 |
| ソフト制限 | 🟡 | 制限はあるが代替策がある | CORS クロスオリジン(拡張機能で回避可能)、FFmpeg パフォーマンス(TS 出力で代替可能) |
| 注意事項 | 🔵 | 機能には影響しないが理解が必要 | 初回読み込みが遅い、セグメント URL が期限切れになる可能性 |
ファイルサイズ制限
Blob モードハード制限
ブラウザが File System Access API または StreamSaver.js をサポートしていない場合、FlowPick は Blob モードでファイル書き込みにダウングレードします。このモードにはハードなサイズ制限があります:
| 制限タイプ | 閾値 | 動作 |
|---|---|---|
| 警告閾値 | 800MB | コンソールに警告を出力し、UI にプロンプト表示 |
| ハード制限 | 1.5GB | ダウンロードを拒否し、ブラウザ切り替えをユーザーに促す |
原因:Blob モードではファイル全体をメモリに読み込む必要があり、1.5GB を超えるとブラウザクラッシュやページ無応答を引き起こす可能性があります。
解決策:Chrome 86+ または Edge 86+ を使用してください。これらは File System Access API をサポートしており、任意サイズのファイルをストリーミング書き込みできます。
メモリプレッシャー
ストリーミング書き込みを使用している場合でも、以下の要因がメモリを消費します:
- 並列ダウンロード中のセグメントデータ(各セグメント通常 1-10MB)
- FFmpeg WASM ランタイムメモリ(約 200-400MB)
- ページ UI および他のコンポーネント
推奨:
- 超大容量ファイル(>5GB)のダウンロード時、並列スレッド数を 1-2 に減少
- 他のメモリを占有するタブを閉じる
- 複数の FFmpeg リマックスタスクを同時に実行しない
ストリーミングプロトコル制限
DRM 保護コンテンツ
FlowPick は以下の種類の保護コンテンツを処理できません:
| 保護技術 | 一般的なプラットフォーム | ステータス |
|---|---|---|
| Widevine | Netflix, Disney+ | 非サポート |
| PlayReady | 一部 Windows プラットフォーム | 非サポート |
| FairPlay | Apple TV+ | 非サポート |
| ClearKey | 一部のテストストリーム | 非サポート |
検出方式:DASH プレイリストに <ContentProtection> タグが含まれる場合、ダウンロード機能は明示的に非サポートを提示します。
なぜ DRM をサポートできないのか?
DRM システムのコアはコンテンツ復号モジュール(CDM)であり、これはブラウザ組み込みのクローズドソースバイナリコンポーネントです。CDM は OS やハードウェアと深く結合しており、保護されたコンテンツを復号し、復号後のフレームを直接グラフィックカードに出力します。アプリケーション層では復号後のデータをインターセプトまたは読み取ることができません。これが DRM システムの設計目標です——復号から表示までの全チェーンでコンテンツが傍受されないことを保証することです。
AES-128 暗号化
FlowPick は HLS の AES-128 セグメント暗号化をサポートしていますが、以下の制限があります:
METHOD=AES-128のみサポート、SAMPLE-AES は非サポート- キーファイルは HTTP(S)経由で直接アクセス可能である必要がある
- Cookie 認証を必要とするキー URL は非サポート(オンラインツールモード)
ライブストリーム
FlowPick は主にオンデマンド(VOD)コンテンツ向けに設計されています:
- ライブ HLS ストリームはキャッシュ済みセグメントをダウンロード可能ですが、将来のセグメントは取得できません
- ライブストリームのセグメントリストは継続的に更新され、ダウンロード機能は新規追加セグメントを自動追跡しません
- ライブ配信終了後に完全なアーカイブをダウンロードすることを推奨
ライブストリームダウンロードの実際の効果:
ライブ配信中(30 分間再生済み):
M3U8 プレイリストに直近約 30 秒分のセグメントが含まれる
→ ダウンロード機能はこの 30 秒分のコンテンツのみ取得可能
→ 以前および以降のセグメントは取得不可
ライブ配信終了後:
M3U8 プレイリストに完全なセグメントリストが含まれる
→ ダウンロード機能は全コンテンツ取得可能
→ オンデマンドダウンロードと同等
分離音视频ストリーム
一部の DASH ストリームは動画とオーディオを独立した AdaptationSet に分離しています:
- ダウンロード機能は動画ストリームとオーディオストリームをそれぞれ一覧表示
- マッチする動画ストリームとオーディオストリームを手動選択する必要がある
- 結合には FFmpeg WASM が必要で、時間がかかる
- 音视频の長さが一致しない場合、結合結果で音画不同步が発生する可能性がある
ブラウザの制限
File System Access API
| ブラウザ | サポート状況 |
|---|---|
| Chrome 86+ | 完全サポート |
| Edge 86+ | 完全サポート |
| Firefox | 非サポート |
| Safari | 非サポート |
サポートされていないブラウザでは、すべてのダウンロードで Blob モードを使用し、1.5GB のサイズ制限を受けます。
SharedArrayBuffer
FFmpeg WASM マルチスレッドモードには SharedArrayBuffer が必要であり、ウェブサイトで以下の HTTP レスポンスヘッダーの設定が必要です:
Cross-Origin-Opener-Policy: same-origin
Cross-Origin-Embedder-Policy: require-corp
これらのヘッダーが設定されていない場合、FFmpeg は自動的にシングルスレッドモードにダウングレードし、結合速度が約 40-60% 低下します。
Service Worker
StreamSaver.js は Service Worker に依存しています。以下の状況で StreamSaver が使用不可になります:
- ブラウザプライベートモード(一部のブラウザで Service Worker が制限される)
- 企業ポリシーで Service Worker が無効化されている
- ウェブサイトで
mitm.htmlとstreamsaver-sw.jsが正しくデプロイされていない
ネットワーク制限
CORS クロスオリジン制限
オンラインツールモード(/m3u8-downloader、/dash-downloader)はブラウザの同一オリジンポリシーの制限を受けます:
- ストリーミングサーバーが
Access-Control-Allow-Originレスポンスヘッダーを設定していない場合、リクエストはブロックされる - 一部の CDN は
RefererまたはOriginリクエストヘッダーをチェックする - 拡張機能版はこの制限を受けません(拡張機能権限でリクエストを発行するため)
CORS エラーの技術原理:
オンラインツール(flowpick.app)が CDN(cdn.example.com)にリクエスト:
ブラウザがリクエスト送信 → CDN がセグメントデータ返却
↓
ブラウザがレスポンスヘッダー確認:
Access-Control-Allow-Origin に flowpick.app が含まれているか?
↓
否 → ブラウザが JavaScript のレスポンス読み取りをブロック
はい → 正常読み取り
拡張機能版:
拡張機能が chrome.webRequest / chrome.fetch でリクエスト発行
→ 同一オリジンポリシーの制限を受けない
→ 任意のオリジンのレスポンスを読み取り可能
リクエスト頻度制限
一部の CDN は高頻度リクエストに対して流量制御を行います:
- 並列スレッド数が高すぎると 429(Too Many Requests)エラーが発生する可能性がある
- 並列数を 4 以内に抑えることを推奨
- 流量制御に遭遇した場合、並列数を減らして再試行
セグメント URL 期限切れ
一部のストリーミングサービスのセグメント URL には期限付きトークンが含まれています:
- トークン期限切れ後、セグメントはダウンロード不可
- 期限は通常数分から数時間
- プレイリスト取得後、できるだけ速くダウンロード開始を推奨
- ダウンロード中断時間が長すぎる場合、プレイリストの再取得が必要になる可能性がある
典型的な期限切れシーン:
| サービスタイプ | 典型的な有効期間 | 推奨 |
|---|---|---|
| オンラインコースプラットフォーム | 2-4 時間 | プレイリスト取得後即座にダウンロード |
| ライブ配信アーカイブ | 30 分 - 2 時間 | できるだけ速く完了し、中断を避ける |
| 短動画プラットフォーム | 5-15 分 | 通常一回のダウンロードで十分 |
| 有料ストリーミング | 1-5 分 | 極めて短いウィンドウ、迅速な完了が必要 |
フォーマット変換制限
FFmpeg WASM パフォーマンス
FFmpeg はブラウザ内で WebAssembly として動作し、ネイティブ版より大幅にパフォーマンスが低くなります:
| 操作 | ネイティブ FFmpeg | FFmpeg WASM (シングルスレッド) | FFmpeg WASM (マルチスレッド) |
|---|---|---|---|
| TS → MP4 (1GB) | ~5 秒 | ~60-90 秒 | ~30-50 秒 |
| 音视频結合 (1GB) | ~10 秒 | ~120-180 秒 | ~60-90 秒 |
パフォーマンス差の原因:
- WASM 実行オーバーヘッド:WebAssembly はブラウザサンドボックス内で動作し、命令実行効率はネイティブの約 70-80%
- SIMD 制限:FFmpeg は SIMD 命令による最適化を大量に使用しているが、WASM SIMD のサポートはネイティブほど完全ではない
- メモリアクセス:WASM リニアメモリモデルとネイティブメモリ管理に差異がある
- I/O ボトルネック:仮想ファイルシステムの読み書き速度はネイティブファイルシステムより大幅に低い
非サポートの変換
以下の変換パスは現在非サポートです:
- 任意フォーマット → AVI、MOV、MKV、WebM
- 動画コーディング変換(例:H.264 → H.265)
- オーディオコーディング変換(例:AAC → MP3)
- 解像度スケーリング
- ウォーターマークや字幕の追加
FlowPick の FFmpeg 統合はコンテナフォーマット変換(リマックス)に焦点を当てており、コーデックは関与しません。
リマックス vs トランスコード:
リマックス(FlowPick サポート):
TS コンテナ → H.264 動画ストリーム + AAC オーディオストリーム抽出 → MP4 コンテナに封装
特徴:コーディング変更なし、高速、無損
トランスコード(FlowPick 非サポート):
H.264 動画ストリーム → 復号 → H.265 に再エンコード → 封装
特徴:コーディング変更、低速、有損、CPU 密集
拡張機能版の制限
Manifest V3 制限
FlowPick 拡張機能は Chrome Manifest V3 を使用しており、以下のプラットフォーム制限があります:
- Service Worker ライフサイクルが制限されている(アイドル状態で約 30 秒後に終了)
- 永続的なバックグラウンドページを使用不可
- ネットワークリクエスト監視は
webRequestAPI に依存
Manifest V3 が FlowPick に与える影響:
| 制限 | 影響 | 対応措置 |
|---|---|---|
| Service Worker 30 秒タイムアウト | 長時間ダウンロードが中断される可能性 | ダウンロード中ハートビートを維持し、SW 休眠を防止 |
| バックグラウンド永続化なし | バックグラウンドでの継続的監視不可 | ユーザーがポップアップウィンドウを開いた際に検出をアクティベート |
webRequest が読み取り専用に変更 | リクエストヘッダー変更不可 | FlowPick には影響なし(読み取りのみ、変更なし) |
検出範囲
拡張機能のメディア検出はネットワークリクエスト監視に依存しています:
- 拡張機能有効化後に発行されたリクエストのみ検出可能
- ページ更新で再検出可能
- WebSocket または MSE を使用する一部のウェブサイトではメディア URL を検出できない可能性がある
- iframe 内のメディアは検出できない可能性がある(iframe のクロスオリジンポリシーに依存)
既知の Bug
大容量ファイル Blob ダウンロードでフリーズする可能性あり
症状:Blob モードで 1.5GB に近いファイルをダウンロードする際、ブラウザが長時間無応答になる可能性があります。
原因:new Blob([...]) 構築時にすべてのデータをコピーする必要があり、大容量ファイルのメモリ割り当てとコピーに時間がかかるため。
暫定対策:Chrome ブラウザを使用してストリーミング書き込みを有効にしてください。
FFmpeg 初回読み込みが遅い
症状:初めてフォーマット変換機能を使用する際、FFmpeg の読み込みに 10-30 秒かかります。
原因:FFmpeg WASM コアファイル(約 8MB)をネットワークからダウンロードしコンパイルする必要があるため。
説明:これは正常な動作です。以降の使用ではブラウザキャッシュが活用され、読み込み速度が著しく向上します。
読み込み時間の内訳:
初回読み込み:
WASM ファイルダウンロード(~8MB) → 2-5 秒(ネットワーク速度による)
WASM コンパイル → 5-15 秒(CPU 性能による)
仮想ファイルシステム初期化 → 1-3 秒
合計 → 10-30 秒
以降の読み込み(キャッシュヒット):
キャッシュから WASM 読み込み → <1 秒
WASM コンパイル(キャッシュ可能) → 1-3 秒
合計 → 2-5 秒
一部の CDN セグメントダウンロードで偶発的失敗
症状:ダウンロード中に個別のセグメントが 503 またはネットワークエラーを返す。
原因:CDN ノードの一時的障害またはネットワーク変動。
説明:FlowPick には 3 回のリトライ機構(指数バックオフ)が組み込まれており、通常自動的に回復可能です。すべてのリトライが失敗した場合、そのセグメントはスキップされログに記録されます。
関連ドキュメント
- 一般的な問題のトラブルシューティング — 症状別の診断手順と解決策
- よくある質問 — 高頻度質問と簡潔な回答
- ダウンロードエンジンアーキテクチャ — ダウンロードエンジンの完全な技術アーキテクチャ
- 動画メディア検知 — HLS/DASH プレイリスト解析と暗号化検出
- フォーマット変換 — FFmpeg WASM エンジンと出力フォーマット
- 一括ダウンロード — キュースケジューリングと並列制御
- ブラウザ互換性 — 各ブラウザ API サポートとダウングレード戦略
- オンラインツール — オンラインツールの使用と制限
- プライバシーとセキュリティ — 権限説明とプライバシー保護
- 設定参考 — 並列数、フィルタなどの設定項目
- インストールガイド — 拡張機能インストールと有効化
- ライブ配信アーカイブ保存 — 超大容量ファイルダウンロードシーン
- 貢献ガイド — Bug 報告とコード貢献の方法