既知の制限事項と注意点

FlowPick 現在のバージョンの技術的制限、既知の問題、境界ケースの説明。

本ドキュメントは 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 をサポートしており、任意サイズのファイルをストリーミング書き込みできます。

三段階書き込み戦略の完全な比較とダウングレードロジックについては、ダウンロードエンジンアーキテクチャ — 戦略比較まとめをご参照ください。大容量ファイルダウンロード失敗のトラブルシューティング手順については、一般的な問題のトラブルシューティング — 大容量ファイルのダウンロードに失敗をご参照ください。各ブラウザの FSA API サポート状況については、ブラウザ互換性 — 機能サポートマトリックスをご参照ください。

メモリプレッシャー

ストリーミング書き込みを使用している場合でも、以下の要因がメモリを消費します:

  • 並列ダウンロード中のセグメントデータ(各セグメント通常 1-10MB)
  • FFmpeg WASM ランタイムメモリ(約 200-400MB)
  • ページ UI および他のコンポーネント

推奨

  • 超大容量ファイル(>5GB)のダウンロード時、並列スレッド数を 1-2 に減少
  • 他のメモリを占有するタブを閉じる
  • 複数の FFmpeg リマックスタスクを同時に実行しない
メモリセキュリティ管理の完全なメカニズム(サイズ見積もり、閾値チェック、ランタイム監視)については、ダウンロードエンジンアーキテクチャ — メモリセキュリティ管理をご参照ください。並列数の設定方法については、設定参考をご参照ください。

ストリーミングプロトコル制限

DRM 保護コンテンツ

FlowPick は以下の種類の保護コンテンツを処理できません

保護技術一般的なプラットフォームステータス
WidevineNetflix, Disney+非サポート
PlayReady一部 Windows プラットフォーム非サポート
FairPlayApple TV+非サポート
ClearKey一部のテストストリーム非サポート

検出方式:DASH プレイリストに <ContentProtection> タグが含まれる場合、ダウンロード機能は明示的に非サポートを提示します。

なぜ DRM をサポートできないのか?

DRM システムのコアはコンテンツ復号モジュール(CDM)であり、これはブラウザ組み込みのクローズドソースバイナリコンポーネントです。CDM は OS やハードウェアと深く結合しており、保護されたコンテンツを復号し、復号後のフレームを直接グラフィックカードに出力します。アプリケーション層では復号後のデータをインターセプトまたは読み取ることができません。これが DRM システムの設計目標です——復号から表示までの全チェーンでコンテンツが傍受されないことを保証することです。

DRM ストリームの検出プロンプトと UI 表現については、動画メディア検知 — DASH ストリームをご参照ください。メディア検出で DRM コンテンツが検出されない場合のトラブルシューティングについては、一般的な問題のトラブルシューティング — 拡張機能がメディアを全く検出できないをご参照ください。

AES-128 暗号化

FlowPick は HLS の AES-128 セグメント暗号化をサポートしていますが、以下の制限があります:

  • METHOD=AES-128 のみサポート、SAMPLE-AES は非サポート
  • キーファイルは HTTP(S)経由で直接アクセス可能である必要がある
  • Cookie 認証を必要とするキー URL は非サポート(オンラインツールモード)
AES-128 復号の完全な技術実装(Web Crypto API、IV 処理)については、ダウンロードエンジンアーキテクチャ — AES-128 復号をご参照ください。暗号化ストリームの検出フローについては、動画メディア検知 — 暗号化ストリームをご参照ください。

ライブストリーム

FlowPick は主にオンデマンド(VOD)コンテンツ向けに設計されています:

  • ライブ HLS ストリームはキャッシュ済みセグメントをダウンロード可能ですが、将来のセグメントは取得できません
  • ライブストリームのセグメントリストは継続的に更新され、ダウンロード機能は新規追加セグメントを自動追跡しません
  • ライブ配信終了後に完全なアーカイブをダウンロードすることを推奨

ライブストリームダウンロードの実際の効果

ライブ配信中(30 分間再生済み):
  M3U8 プレイリストに直近約 30 秒分のセグメントが含まれる
  → ダウンロード機能はこの 30 秒分のコンテンツのみ取得可能
  → 以前および以降のセグメントは取得不可

ライブ配信終了後:
  M3U8 プレイリストに完全なセグメントリストが含まれる
  → ダウンロード機能は全コンテンツ取得可能
  → オンデマンドダウンロードと同等
ライブ配信アーカイブダウンロードの完全なシーン説明については、ライブ配信アーカイブ保存をご参照ください。HLS ライブストリームのプレイリスト構造については、動画メディア検知 — HLS ストリームをご参照ください。

分離音视频ストリーム

一部の DASH ストリームは動画とオーディオを独立した AdaptationSet に分離しています:

  • ダウンロード機能は動画ストリームとオーディオストリームをそれぞれ一覧表示
  • マッチする動画ストリームとオーディオストリームを手動選択する必要がある
  • 結合には FFmpeg WASM が必要で、時間がかかる
  • 音视频の長さが一致しない場合、結合結果で音画不同步が発生する可能性がある
DASH ストリームの音视频分離処理フローと FMP4 再構成については、ダウンロードエンジンアーキテクチャ — DASH ストリームの特殊処理をご参照ください。音画不同步のトラブルシューティングと修復については、一般的な問題のトラブルシューティング — 結合後の動画で音画不同步をご参照ください。

ブラウザの制限

File System Access API

ブラウザサポート状況
Chrome 86+完全サポート
Edge 86+完全サポート
Firefox非サポート
Safari非サポート

サポートされていないブラウザでは、すべてのダウンロードで Blob モードを使用し、1.5GB のサイズ制限を受けます。

各ブラウザの完全な機能サポートマトリックスとブラウザ選択推奨については、ブラウザ互換性をご参照ください。FSA API が使用不可の場合のトラブルシューティングについては、一般的な問題のトラブルシューティング — File System Access API が使用不可をご参照ください。

SharedArrayBuffer

FFmpeg WASM マルチスレッドモードには SharedArrayBuffer が必要であり、ウェブサイトで以下の HTTP レスポンスヘッダーの設定が必要です:

Cross-Origin-Opener-Policy: same-origin
Cross-Origin-Embedder-Policy: require-corp

これらのヘッダーが設定されていない場合、FFmpeg は自動的にシングルスレッドモードにダウングレードし、結合速度が約 40-60% 低下します。

SharedArrayBuffer のブラウザサポート詳細とセルフデプロイ設定については、ブラウザ互換性 — 高度な APIをご参照ください。シングルスレッドとマルチスレッドのパフォーマンス比較データについては、フォーマット変換 — マルチスレッドモードをご参照ください。

Service Worker

StreamSaver.js は Service Worker に依存しています。以下の状況で StreamSaver が使用不可になります:

  • ブラウザプライベートモード(一部のブラウザで Service Worker が制限される)
  • 企業ポリシーで Service Worker が無効化されている
  • ウェブサイトで mitm.htmlstreamsaver-sw.js が正しくデプロイされていない
StreamSaver.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 でリクエスト発行
→ 同一オリジンポリシーの制限を受けない
→ 任意のオリジンのレスポンスを読み取り可能
CORS エラーのトラブルシューティングと解決策については、一般的な問題のトラブルシューティング — ダウンロード途中で失敗するをご参照ください。拡張機能とオンラインツールの機能差異については、オンラインツールをご参照ください。

リクエスト頻度制限

一部の CDN は高頻度リクエストに対して流量制御を行います:

  • 並列スレッド数が高すぎると 429(Too Many Requests)エラーが発生する可能性がある
  • 並列数を 4 以内に抑えることを推奨
  • 流量制御に遭遇した場合、並列数を減らして再試行
並列数とパフォーマンスの関係(限界収益逓減分析含む)については、ダウンロードエンジンアーキテクチャ — 並列数とパフォーマンスの関係をご参照ください。ダウンロード速度が遅い場合の診断フローについては、一般的な問題のトラブルシューティング — ダウンロード速度が遅いをご参照ください。

セグメント URL 期限切れ

一部のストリーミングサービスのセグメント URL には期限付きトークンが含まれています:

  • トークン期限切れ後、セグメントはダウンロード不可
  • 期限は通常数分から数時間
  • プレイリスト取得後、できるだけ速くダウンロード開始を推奨
  • ダウンロード中断時間が長すぎる場合、プレイリストの再取得が必要になる可能性がある

典型的な期限切れシーン

サービスタイプ典型的な有効期間推奨
オンラインコースプラットフォーム2-4 時間プレイリスト取得後即座にダウンロード
ライブ配信アーカイブ30 分 - 2 時間できるだけ速く完了し、中断を避ける
短動画プラットフォーム5-15 分通常一回のダウンロードで十分
有料ストリーミング1-5 分極めて短いウィンドウ、迅速な完了が必要
ダウンロード途中での失敗のトラブルシューティング(HTTP 403 エラー処理含む)については、一般的な問題のトラブルシューティング — ダウンロード途中で失敗するをご参照ください。ダウンロードエンジンのリトライ機構については、ダウンロードエンジンアーキテクチャ — リトライ機構をご参照ください。

フォーマット変換制限

FFmpeg WASM パフォーマンス

FFmpeg はブラウザ内で WebAssembly として動作し、ネイティブ版より大幅にパフォーマンスが低くなります:

操作ネイティブ FFmpegFFmpeg WASM (シングルスレッド)FFmpeg WASM (マルチスレッド)
TS → MP4 (1GB)~5 秒~60-90 秒~30-50 秒
音视频結合 (1GB)~10 秒~120-180 秒~60-90 秒

パフォーマンス差の原因

  1. WASM 実行オーバーヘッド:WebAssembly はブラウザサンドボックス内で動作し、命令実行効率はネイティブの約 70-80%
  2. SIMD 制限:FFmpeg は SIMD 命令による最適化を大量に使用しているが、WASM SIMD のサポートはネイティブほど完全ではない
  3. メモリアクセス:WASM リニアメモリモデルとネイティブメモリ管理に差異がある
  4. I/O ボトルネック:仮想ファイルシステムの読み書き速度はネイティブファイルシステムより大幅に低い
FFmpeg WASM の完全な技術実装(ロード、マルチスレッド検出、命令実行)については、フォーマット変換 — FFmpeg WASM エンジンをご参照ください。TS 出力を選択して FFmpeg をスキップする方法については、フォーマット変換 — 出力フォーマット選択をご参照ください。

非サポートの変換

以下の変換パスは現在非サポートです:

  • 任意フォーマット → 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 密集
コンテナとコーデックの概念区分については、フォーマット変換 — コンテナとコーデックをご参照ください。TS と MP4 フォーマットのプレイヤー互換性については、フォーマット変換 — 出力フォーマット選択をご参照ください。

拡張機能版の制限

Manifest V3 制限

FlowPick 拡張機能は Chrome Manifest V3 を使用しており、以下のプラットフォーム制限があります:

  • Service Worker ライフサイクルが制限されている(アイドル状態で約 30 秒後に終了)
  • 永続的なバックグラウンドページを使用不可
  • ネットワークリクエスト監視は webRequest API に依存

Manifest V3 が FlowPick に与える影響

制限影響対応措置
Service Worker 30 秒タイムアウト長時間ダウンロードが中断される可能性ダウンロード中ハートビートを維持し、SW 休眠を防止
バックグラウンド永続化なしバックグラウンドでの継続的監視不可ユーザーがポップアップウィンドウを開いた際に検出をアクティベート
webRequest が読み取り専用に変更リクエストヘッダー変更不可FlowPick には影響なし(読み取りのみ、変更なし)
拡張機能のインストールと有効化手順については、インストールガイドをご参照ください。拡張機能が要求する権限とその用途については、プライバシーとセキュリティ — 権限説明をご参照ください。

検出範囲

拡張機能のメディア検出はネットワークリクエスト監視に依存しています:

  • 拡張機能有効化後に発行されたリクエストのみ検出可能
  • ページ更新で再検出可能
  • WebSocket または MSE を使用する一部のウェブサイトではメディア URL を検出できない可能性がある
  • iframe 内のメディアは検出できない可能性がある(iframe のクロスオリジンポリシーに依存)
メディア検出の技術原理と HLS/DASH プレイリスト解析については、動画メディア検知をご参照ください。メディアが検出されない場合のトラブルシューティング手順については、一般的な問題のトラブルシューティング — メディア検出の問題をご参照ください。

既知の Bug

大容量ファイル Blob ダウンロードでフリーズする可能性あり

症状:Blob モードで 1.5GB に近いファイルをダウンロードする際、ブラウザが長時間無応答になる可能性があります。

原因new Blob([...]) 構築時にすべてのデータをコピーする必要があり、大容量ファイルのメモリ割り当てとコピーに時間がかかるため。

暫定対策:Chrome ブラウザを使用してストリーミング書き込みを有効にしてください。

Blob モードのメモリ制限と代替案については、ダウンロードエンジンアーキテクチャ — 戦略三:Blob フォールバックをご参照ください。

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 秒
FFmpeg WASM の読み込みフローとマルチスレッド検出については、フォーマット変換 — FFmpeg WASM エンジンをご参照ください。

一部の CDN セグメントダウンロードで偶発的失敗

症状:ダウンロード中に個別のセグメントが 503 またはネットワークエラーを返す。

原因:CDN ノードの一時的障害またはネットワーク変動。

説明:FlowPick には 3 回のリトライ機構(指数バックオフ)が組み込まれており、通常自動的に回復可能です。すべてのリトライが失敗した場合、そのセグメントはスキップされログに記録されます。

リトライ機構の詳細な戦略(指数バックオフタイムテーブル、リトライがトリガーされない状況)については、ダウンロードエンジンアーキテクチャ — リトライ機構をご参照ください。

関連ドキュメント