« 2016年3月 | メイン | 2017年9月 »

2016年4月

2016年4月21日 (木)

とりあえずの結論:MSのブラウザでは音が出ない?



とりあえずの結論:MSのブラウザでは音が出ない?
-------------------------------------------------------------------------------------------------------------
Microsoft のブラウザ Edge で音源が再生できない問題について調べてみました。
いくつかの事がわかりましたが、原因は特定できていません。
今の私の感じとしては、Microsoft Edge の問題ではないか・・・と思っています。
もちろん証明できるわけではありませんが、そんな気がします。

現状では、Mozilla Firefox、Google Chrome がおすすめ。問題なく動作しています。


以下のようなサーバー、クライアント、音源ファイルの位置の組み合わせでテストしてみました。

表の見方、略号の説明

表題行「Server    Client    Server    local    PC2」は、左から順に
Server.....Reclib システムが動作しているサーバー。
Client.....ブラウザを使って Server にアクセスしたPC

その右の3つは、音源ファイルが格納されたPCで
Server.....Reclib システムが動作しているサーバーに音源ファイルがある。
local......Client に音源ファイルがある。IISが動作している。
PC2........LAN上にある「PC2」というマシンに音源ファイルがある。IISが動作している。

「WWW」「PC1」「PC2」「PC1」「NotePC」はコンピュータの名前で
WWW.....Reclib システムの公開用サーバー。Linux
PC1.....開発用のPC。Webサーバー、サーブレットエンジン、データベースなどが動作している。
    開発作業に直接必要でないアプリ等はインストールしていない。Windows 10
PC2.....開発作業以外用のPC。Office、 Eメールなどがインストールされている。Windows 10
NotePC..LANに接続されていないノートPC。Office等はインストールしていない。Windows 10

○......音源が再生できた
☓......エラーとなり、再生できなかった

Server Client 音源の位置と結果
Server local PC1 PC2
WWW NotePC *1 *1
WWW PC2 ☓*2
WWW PC1 ☓*2 ○*5

Server Client 音源の位置と結果
Server local PC PC2
PC1 PC2 ○*3 ☓*2
PC1 PC1 ○*3 ○*3 ☓*4

*1 NotePC はLANに接続されていないので、LAN上にある「PC1」「PC2」にはアクセスできない。
*2 localhost と同じ条件である。
*3 Server に音源があるのと同じ条件である。
*4 後述

このテスト結果から
・音源ファイルがWebサーバー(ページを返したのと同じサーバー)にあれば再生できる。
・音源がWebサーバー以外のマシンにある場合の再生可否についての規則性は良くわからない。
ローカルリソースは全く再生できないのであれば分かりやすいのだが、サーバーとクライアントの組み合わせによって再生できたり、できなかったりする。
NotePC で local 音源が再生可能なのに PC1、PC2 ではエラーになる理由が分からない。
逆に、NotePC では再生できる理由も分からない。

・Webサーバーとは異なるマシンに音源があるという事は、CORS(Cross-Origin Resource Sharing)になるわけで、いくつか弄ってみたけど手応えなし。現象は変わらなかった。
FireFox などを用いると、音源(IIS を用いたローカルなWebサーバー)は正しいデータを返すので、IISの問題ではなく Edge の問題のように思える。

・エラーとなるまでの時間が場合によって大きく異なる。
localhost をアクセスしようとすると失敗までに2~3分かかるが、(*4)の場合はほぼ瞬時にエラーが発生する。
localhost の場合はタイムアウト、(*4)の場合はサーバーに拒否されたかに見えるが、ブラウザの「開発者ツール」で見る限り、両方共ネットワークをアクセスしていない。IISのログには失敗は記録されていないので、これ以上は分からない。

ネットワークをアクセスしない理由、(*4)が失敗し(*5)が成功する理由も分からない。

・IISのログを見ていたら、IPアドレスが「::1」などというのがある。ipv6 は禁止しているはずだが・・。
確認したが、ipv6 は禁止されている。なのに、localhost へのアクセスには「::1」が使われている。

・ping localhost とすると、IPアドレスは「::1」となる。

・となると、ipv6 を許可してみるか。で、許可してみたが現象は変わらず。ipv6 は禁止に戻す。

・PC2 で ping PC2 とすると、ipv6 のアドレスが表示された。IP Helper サービスが動いていた。これを止めると ::1 になった。

・ping localhost は「::1」のまま。こういう仕様らしい。

・アクセスする音源のURLをホスト名ではなくIPアドレスとしてみたが現象は変わらず。
「//localhost/」でも「//127.0.0.1/」でも動かない。「//PC1」「//192.168..../」も同様。

というわけで原因はつかめていませんが、これ以上やっても泥沼なので、このあたりで止めにします。

2016年4月17日 (日)

何事? MSのブラウザでは音が出ない?

今公開している音源対応版、マイクロソフトのブラウザではうまく動かない事が発覚しました。
公開前にテストした時には問題なかったのに。

Mizzila Firefox, GoogleChrome ならば、うまく音が出ます。

なぜ発覚したかというと、


音源対応版の新版を作っているのですが、思いっきりてこずっています。
やろうとしているのは
(1)1曲の音源が複数ファイルに分割されているものをサポートする。
(2)複数楽章が1つの音源ファイルに格納されているものを、楽章単位に扱う。
(3)音源ファイルが切り替わる時の無音の時間を最小限にする。
なんですが・・・

今作っているのは(1)と(3)。
ところが、HTML の <audio> 要素が予想していなかった動きをするのです。
audio.src=file1;  audio.load();  audio.play(); とした後に
audio.src=file2;  audio.load(); とすると、イベント durationchange が起こるのですが、
file2 について durationchange が起こった後に file1 について durationchange が起こるんです。
この動き、理解できない。

デバッグには firefox を使っているんですが、「もしや firefox のバグ?」という事で
MS(マイクロソフト)のブラウザで動かしてみました。そうしたら、これが全くダメ。・・・そんなバカな・・・

今公開している音源対応版は動いているのに、なぜ。という事で、現公開版を動かしてみました。そうしたら、

Microsoft Edge ..... 音が出るまでに、やたら長い時間がかかる。
Internet Explorer .. 音、出ない・・・もっと待てば、そのうち音が出るのかなぁ??

ちなみに、Mozzila FireFox, Google Chrome は全く問題なし。となると、マイクロソフトのバグか?
ところが、他のサイト(私が作ったのではないサイト)の音源は問題なく再生できるんです。
となると・・・私の作ったシステムの問題という事になります(v_v)

これから原因を探して修正します。
・本来の仕様を越えた使い方をして、あるいは仕様を勘違いしたまま作ってしまったのが、たまたま動いてしまった。
・古い仕様(廃止が予告されている仕様)に基づいて作ってしまった。
・単なるバグ
などが考えられますが、時間、かかりそう。