Ruffleで「うちのこ」導入のFlashが再生できない問題・解決策

本記事では、転載防止スクリプト「うちのこ」を導入したswfファイルを、Flashエミュレーター「Ruffle」で再生しようとすると正規のURLでもロックされてしまう問題の原因と、その解説法について解説しています。

解説: なぜ「うちのこ」はRuffleで動かないのか?

端的に言えば、FlashPlayerとRuffleの動作環境の違いによるものです。

「うちのこ」の処理の流れ

「うちのこ」の処理の流れ(肝の部分だけ)をざっくりまとめるとこんな感じです。

本記事では、【無断転載】は「著作元から一旦保存して自分のサーバに複製すること」、【直リンク】は「著作元のアドレスから直接コンテンツを参照すること」を指します。

Step 1
【無断転載判定】Flashのファイルが格納されている場所のURLをチェック

許可していないURLならFlashの再生をロック。

問題がなければ Step 2 へ。

Step 2
ページの読み込み完了を待つ(設定によっては待たずにStep 3へ)

読み込み完了時にページ側からFlashに読み込み完了を知らせるJavaScriptが実行される。

Flashがそれを受け取る or 一定時間経過(タイムアウト)すると Step 3 へ

Step 3
【直リンク判定】今開いているページのURLをチェック

Flash側から今開いているページのURLを取得するJavaScriptを実行して、ページのURLをチェックする。

許可していないURLならFlashの再生をロックする。

問題がなければ処理を終了する。

赤色で示したのはFlash側とページ側でJavaScriptを使って値のやり取りをしている部分で、これまでのFlashPlayerではもちろん問題なく動作していました。

一方、Ruffleでは…

一方Ruffleでは、このFlash側とページ側の連携に制限が掛けられ(おそらく仕様上の問題)、「うちのこ」で処理していた値のやり取りができなくなりました。

ページのURLが取得できない→許可されたURLではないと判断されるようになってしまったというわけです。

解決の糸口

そのかわり、Ruffleでは特別に許可していない限り直リンクをブロックする仕様になっています。

我々が考えるのは無断転載だけで良くなっています。(ウーン、いい時代!)

解決策は色々ありますが、現状では「うちのこ」では無断転載のみ判定し、直リンク判定は「Ruffle」におまかせするというやり方が一番スマートでしょう。

解決策: 「うちのこ」をRuffleで動くようにする方法

さて、ここからはいよいよ「うちのこ」をRuffleで動くようにする方法を紹介していきます。

uchinoko.as の修正: 21~22行目あたり

pSWF.c_direct という設定項目があります。

直リンクを判定するかどうか決めている変数です。

この値が 1(ON)になっている場合は 0(OFF)に変更してください。

uchinoko.as を保存後、再度swfファイルを生成して再アップロードしてください。

プロジェクトファイルが残っていない場合

swfファイルのみ手元に残っていて、プロジェクトファイルがすでにない場合の対処法については、現在執筆中です。

いくらでも悪用できてしまうので、クリエイターの方にのみ限定で公開する予定です。

終わりに

まさか無断転載の魔の手から救ってくれた「うちのこ」に無断転載扱いされてしまう日が来るとは、思ってもみなかったですね…。