Google Chromeで音楽再生が出来なくなってしまうようです

Topページでもお知らせしているように、Google ChromeがNetscape Plug-In API (NPAPI)のブロックを開始しました。結果として、Windows Media Player プラグイン の仕様が出来なくなり、asxファイルをベースとして音楽再生するように記述している「Blue Sky Label」では音楽再生が出来なくなりました。
ただし、現状では回避策がないわけではないようなのですが、そう言う面倒をユーザーに強いるのはいかがなものかと思いますし、さらに言えばその回避策も9月時点で完全にアウトになります。

Googleは NPAPIをブロックする理由として「NPAPI 使用率」が減り続けていることを挙げていますが、それは言い訳にしかすぎないでしょう。
強者が弱者を閉め出して独占状態を作り出すという商売の仕方はもともとがマイクロソフトの流儀でした。その仕事の流儀がブーメランのように大きな弧を描いて自分の頭にぶつかったというだけの話です。
browser
ただし、それはがメーカーどうしの話ならばそれだけですむのですが、それにユーザーが巻き込まれて混乱させられるのは困った話です。しかし、困った話なのですが、いわゆるこの手の規格を巡っての覇権争いでユーザーが混乱に巻き込まれて不利益をこうむるのはここだけの話ではなくて、今までも愚かしいほどに何度も繰り返されてきたことでもあります。

プライバシーポリシーにも記述してあるのですが、「当サイトはアクセス解析を行っており、ユーザーの訪問した時間、アクセス元のホスト名、OSとブラウザのバージョン、リンク元の URL、モニターの情報等のパソコン環境情報を記録しています。」
その解析によると、ユーザーが使用している直近(2015年1月~2015年4月)のプラウザの環境は以下の通りです。

  1. Internet Explorer:47.78%
  2. Chrome:22.15%
  3. Firefox:13.83%
  4. Safari:10.53%

IEは当然のことながら問題なく再生できます。
Firefoxもユーザー側で対処してくれれば再生可能なようです。
そして、Chromeでの再生はこの4月からかなり難しくなり、9月からは完全に不可となるわけです。

問題はSafariで、10%というシェアは国内のプラウザのシェアを比較すると異常に高い数値です。ユーザーのOS環境を調べてみると「iOs」が10%近いので、おそらくその大部分はiPhoneなどを使われている方だと思うのですが、ちょっと驚いてしまいました。
果たして、iPhoneなどで音楽が再生できるのかどうかも分かりませんし(携帯を持たない人なので^^;、環境がない)、何よりもサイトの作り自体がそう言うモバイルユーザーのことは全く考えていない作りになっているからです。
これは、ここでの話とは直接関係ない話なのですが、これはこれで別途考え直してみないといけないと反省しています。

さて、こうしてアクセス解析の結果を分析してみると、さすがに「Chrome:22.15%」という数字は無視できない数字です。
最初は、Googleが「Windows Media Player プラグイン」を使えなくするなら、こちらはユーザーに「Internet Explorer」を使ってね!と言えばいいかと思っていたのですが、それはそれでまたユーザーに多大な迷惑がかかります。やはり全体の4分の1近い数字は無視できないようです。

そこで、取りあえずは4月以降に更新したページには従前通りの、Windows Media Playeを使用したプラグインとFlashを使用したプラグインの両方を埋め込むことにしました。
もう少し高機能なプラグインでもっと多くのプラウザに対応しているものもあるのですが、設置が簡単で手間がそれほど増えないというメリットを優先してこのとFlashベースのプラグインを採用しました。

ただし、既に2200を超えるページをアップしていますので、その全てに新しいプラグインを組み込むのはちょっと不可能です。ですから、古いページに関しては「Internet Explorer」を使ってね!」と開き直ることにしました。
これ以外にも何か良い方法があればお知恵をお貸しください。

7 comments for “Google Chromeで音楽再生が出来なくなってしまうようです

  1. benetianfish
    2015年4月27日 at 7:26 PM

    いつもお世話になっております。

    Linux のコマンドで、ファイルの特定の行を書き換えることができるようなコマンドがあったような気がします。単独のコマンドでは不可能でも、シェルスクリプトで該当のファイルの特定の行に、新たなプラグインを組み込む記述を書き込むことは不可能では無いと思いますが(すみません、php には疎く、yung君のページがどのように作成されるてのかはわからないので、この方法では無理かもしれませんが…)。時間ができたらちょっと調べてみます。

    • yung
      2015年4月27日 at 8:15 PM

      yung君のページがどのように作成されるてのかはわからないので、この方法では無理かもしれませんが…

      そうですよね、もう少し具体的に書かないと知恵を借りる事なんて不可能ですよね。(^^;
      今までは、「Windows Media Player プラグイン」でasxファイルを読み込ませて再生していました。

      asxファイルはこんな感じで記述しています。
      お題は「ベルリオーズ:幻想交響曲 モントゥー指揮 サンフランシスコ交響楽団1950年2月27日録音」です。

      <ASX version=”3.0″>
      <Title>Berlioz:Symphonie Fantastique Op.14</Title>
      <Author>Pierre Monteux:San Francisco Symphony Orchestra Recorded 27/2/1950</Author>
      <Copyright>フリー(Pierre Monteux:San Francisco Symphony Orchestra Recorded 27/2/1950)</Copyright>
      <Entry>
      <Title>Berlioz:Symphonie Fantastique Op.14 [1.Reveries]</Title>
      <Ref href=”../../mp3/Belrioz/Symphony/Berlioz_Symphonie_Fantastique_Monteux_50/Berlioz_Symphonie_Fantastique_1_Monteux_50.mp3″/>
      </Entry>
      <Entry>
      <Title>Berlioz:Symphonie Fantastique Op.14 [2.Un bal]</Title>
      <Ref href=”../../mp3/Belrioz/Symphony/Berlioz_Symphonie_Fantastique_Monteux_50/Berlioz_Symphonie_Fantastique_2_Monteux_50.mp3″/>
      </Entry>
      <Entry>
      <Title>Berlioz:Symphonie Fantastique Op.14 [3.Scene aux champs]</Title>
      <Ref href=”../../mp3/Belrioz/Symphony/Berlioz_Symphonie_Fantastique_Monteux_50/Berlioz_Symphonie_Fantastique_3_Monteux_50.mp3″/>
      </Entry>
      <Entry>
      <Title>Berlioz:Symphonie Fantastique Op.14 [4.March au supplice]</Title>
      <Ref href=”../../mp3/Belrioz/Symphony/Berlioz_Symphonie_Fantastique_Monteux_50/Berlioz_Symphonie_Fantastique_4_Monteux_50.mp3″/>
      </Entry>
      <Entry>
      <Title>Berlioz:Symphonie Fantastique Op.14 [5.Song d’une nuit de sabbat]</Title>
      <Ref href=”../../mp3/Belrioz/Symphony/Berlioz_Symphonie_Fantastique_Monteux_50/Berlioz_Symphonie_Fantastique_5_Monteux_50.mp3″/>
      </Entry>
      </ASX>

      これを、例えばこんな感じに書き換えたいのです。

      <object type=”application/x-shockwave-flash” data=”http://www.yung.jp/player/player_mp3_multi.swf” width=”300″ height=”100″>
      <param name=”movie” value=”http://www.yung.jp/player/player_mp3_multi.swf” />
      <param name=”FlashVars” value=”mp3= ../mp3/Belrioz/Symphony/Berlioz_Symphonie_Fantastique_Monteux_50/Berlioz_Symphonie_Fantastique_1_Monteux_50.mp3 | ../mp3/Belrioz/Symphony/Berlioz_Symphonie_Fantastique_Monteux_50/Berlioz_Symphonie_Fantastique_2_Monteux_50.mp3 | ../mp3/Belrioz/Symphony/Berlioz_Symphonie_Fantastique_Monteux_50/Berlioz_Symphonie_Fantastique_3_Monteux_50.mp3 | ../mp3/Belrioz/Symphony/Berlioz_Symphonie_Fantastique_Monteux_50/Berlioz_Symphonie_Fantastique_4_Monteux_50.mp3 | ../mp3/Belrioz/Symphony/Berlioz_Symphonie_Fantastique_Monteux_50/Berlioz_Symphonie_Fantastique_5_Monteux_50.mp3 “>
      </object>

      mp3ファイルへの相対パスは変える必要はないのですから、「sed コマンド」あたりで何とか出来るはずだろうとは思っているのですが、なかなか時間がなくて困っています。

  2. benetianfish
    2015年4月28日 at 5:49 PM

    なるほど… これは一筋縄ではいかないかもしれませんね。
    各行を編集していくよりも、まず”<Ref href=" から始まる行を別のテキストファイルにコピー、コピーされた各行の最初の8字()を削除、そうしてできたファイルパスをswfのスクリプトにペースト、といった感じになるでしょうか。

    又は、ファイルパスをテキストファイルに抽出するのなら、”find -name *.mp3 -fprint ” でもいいですが、問題はいかに自動的にフォルダ間を移動するか、ということになりますね(手動でなら話は別ですが、論外でしょう(笑))。

  3. benetianfish
    2015年4月28日 at 7:47 PM

    何度もコメントしてすみません。

    一番自動化できる方法としては、次のような流れになると思います(詳細なコマンドは、まだ考え中です(汗)):
    1. まず、.mp3 ファイルが含まれるサブディレクトリを検索、結果をテキストファイルにエクスポート (「find -type -d >> list.txt」 で、すべてのサブダイレクトのエントリをファイル(list.txt)に書き出します。)

    2.シェルスクリプトで、do loop を使って上でできたリスト上のディレクトリに順々に移動できるようにする。
    while read line
    do
    dir=$line
    cd $dir

    # [more commands to follow]

    done < list.txt

    この時、list.txt 内がフルパスでないとうまくいかないので、手順1のコマンドを若干変更しなくてはいけませんが。

    3.ここから、手順2の #[more commands to follow] を埋めていきますが、まず各ディレクトリの .mp3 ファイル数を数えます:
    「ls -l -R *.mp3 | wc -l」: “ls -l -R” でサブディレクトリ内も含めてファイルを表示、”wc -l” で結果の行数を数える。最後に “> mp3list.tmp” 追加で一時ファイルに書き出し。そして、ファイル名も手順1の要領で同じファイルに書き出す:
    「find . -name “.mp3” >> mp3list.tmp」

    4.cat ないし sed ないし echo を使って、新たなswfファイルに最初の2行を書き込む(<object type… と <param name = “movie”…)。

    5.手順3で作成したリストを使用して、.mp3ファイルの数だけ、swf スクリプトファイルにエントリを書き込む。
    (いい加減ですが、こんな感じで:)
    for i=1,N
    entry=$line < mp3list.tmp
    echo “<param name=”FlashVars” value=”mp3=$entry |” >> [swf.script]
    end
    echo “<\ object >”

    6.3~5のコマンドを手順2の #[more commands to follow] に入れて、シェルスクリプトをトップディレクトリで実行すれば、うまくいくはずです、たぶん…
    7.うまくいったら、最後に rm -r -f *.tmp で、一時ファイル削除。

    追記:<と>が html コードと誤解されて一部の行が消えてしまったので、全部全角に変更しました。最初を投稿をこちらと差し替えていただければ幸いです。

    • yung
      2015年4月28日 at 10:17 PM

      なるほどね、なかなか複雑なことになってしまいますね。(^^;

      今回しみじみと感じたことは「先の見通し」です。
      最大の問題はそれぞれのページに付与しているID番号とMP3ファイルを管理しているID番号が途中で違ってしまったのを放置してしまったことです。
      この食い違いの原因は、MP3ファイルはアップして公開したものの、リスニングルームのページとして公開する「価値」がないと判断したものがかなり存在することです。もちろん、この判断はあって然るべきもので、それはそれで何の問題もないのですが、それぞれのデータベースでID番号を自動的に追加していく仕様になっていたために(普通はそうなのですが・・・)、リスニングルームに追加しないMP3ファイルが一つあらわれた時点で両者のID番号が食い違ってしまいました。
      結果として現在では両者の間に300を超える数値の違いが存在して、リスニングルームのID番号とMP3ファイルを管理しているID番号の間に整合性を見いだすのがほとんど不可能になってしまいました。

      この二つが一致していれば、どんな複雑なオブジェクトでも簡単にPHPファイルに書き出せるのですが、そんな死んだ子の年を数えるようなことをしても仕方がありません。
      いただいたお知恵も参考にしながら、何とか対処していきたいと思います。

  4. yung
    2015年4月29日 at 3:47 PM

    いろいろお知恵を拝借し、取りあえずは何とか対策を施しました。

    結論から言えば、既存の「asxファイル」をWindows環境で一括置換できるソフトを使って書き換えました。
    ちょっと難しいかな・・・とは思ったのですが。「Beethoven:ピアノ協奏曲第1番 ハ長調 Op.15」みたいな文字列を「.*」という正規表現で全てマッチングできることを発見してクリアできました。
    ファイル数は2300を超えていたのですが、最近のパソコンの馬鹿力を使えば、ほんの30分ほどで置き換えが完了しました。

    後はそれを「asxファイル」とは別のフォルダにアップして読み込ませて完了です。
    ただ、雰囲気的に幾つかのファイルが上手く変換できていないようなので、ザッと見た感じでは何とか対応は出来ているようなのですが、不都合はあちこちでおこっているかもしれません。
    でも、数は少ないと思いますので、多少はご容赦あれ。

    • benetianfish
      2015年4月30日 at 8:55 PM

      うまく解決策が見つかってなによりです。私の方法はだいぶ原始的でしたので余計に複雑に見えたと思いますが、やはり世の中には便利なソフトがありましたね(笑)。

yung へ返信する コメントをキャンセル

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です