追記
12/15
- iOS 10.2 で事象が解消された(@Mizue さんありがとうございます)
- 帝塚山大のCCC-TIESのblogにMoodle側を変更する形での試行が掲載されていたのに今更気がついた。流石です。
11/8
- iOS 10.1.1 では事象は解消していない(@takehironet さんありがとうございます)
- Im an iOS Beta-Tester. With iOS 10.2 (14C5062e) the bug seems to be fixed.(iOSのベータテスターだけど、iOS10.2だとこのバグ直ってるように見えるよ) との投稿あり
- I found out that the browser app Opera-mini works fine.(それ、Opera-Miniで動くよ) という投稿もあるけれど、本当だとしたらOpera-Miniは何を使って音声/動画再生してるんだろう(いずれにせよ根本的な解決ではないのですが)
10/28
- iOS 10.1 では事象は解消していない
- Moodle 3.x の対応アップデートは一進一退の様相
はじめに
Moodleで音声・映像を使った教材を展開している複数の教育機関が、教材の動作不具合としてアナウンスも出していたり、QiitaにMoodleタグもあるようなので、何かの参考になればと思い、メモ書き程度だけれども調査結果を記しておく。
なお、本稿はiOS 10.0.2, Moodle 2.7.16+ (Build: 20160915) で調査している。
事象の外観
iOS 10のSafariで、HTML5の<audio>
タグ(<video>
タグも駄目という報告あり)や、Audioオブジェクトを使った教材を利用すると、音声が再生できない。
具体的には、音声再生が標準のコントローラの場合、再生ボタンを押しても再生中にならなかったり、ロード後にエラーと表記される。
JavaScriptでエラーイベントをフックすると、イベントはフックできる。しかしerrorオブジェクトの内容は iOS 10.1から、エラーコードは undefined
。MEDIA_ERR_SRC_NOT_SUPPORTED
(値は 4
)になった。
サーバ(HTTPD)側のステータスコードは、下の例の様に 407 (Proxy Access Denied) を返している。(これは、SCORMパッケージとしてアップロードしたファイルの例である)
xxx.xxx.xxx.xxx - - [14/Oct/2016:17:19:52 +0900]
"GET /moodle/pluginfile.php/xxx/mod_scorm/content/xxx/xxx/xxx.mp3 HTTP/1.1" 407 20253
"http://xxx.xxx.xxx/moodle/pluginfile.php/xxx/mod_scorm/content/xxx/xxx/xxx.html"
"Mozilla/5.0 (iPad; CPU OS 10_0_2 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) Version/10.0 Mobile/14A456 Safari/602.1"
原因の推測
StackOverFlowの記事 HTML5 video/audio player on mobile Safari (iOS 7 & iOS 10) excludes cookies によれば、
Update 2016-09-20: The video player in iOS 10 (AppleCoreMedia) is not able to read session cookies. Only cookies set with an expire date is readable by the video player.
という報告があり、iOS10.0.2のブラウザが音声・映像の再生用に使っているAppleCoreMediaは、CookieのSession-Idを使ったHTTPリクエストを行うことができないことがうかがえる。
つまり、Sessionを使った認証の場合、ブラウザでログイン画面を経由して認証済みのはずだとしても、音声ファイルへのアクセスでは認証済みと扱われない(教材のHTMLは表示されても、音声がロードされないので、音声再生は実行できない)状態となり、上記の事象の外観とも辻褄があう。
影響範囲の推測
上記の原因推測が正しい場合、以下のような影響範囲が推定できる。
Moodle以外のLMSでも発生する
- 端末がiOS 10.0.2で、ブラウザでアクセスする
- 教材に利用する音声(映像)ファイルが、外部からのアクセスにCookie(Session-Id)を用いた認証が必要な領域に保存されている
を満たすと発症するので、Moodle以外のLMSであっても、音声/映像ファイルがSessionによる認証が必須の領域に置かれているシステムであれば、同様の事象が発生すると推定できる。
ブラウザを問わず発生する
Safariだけでなく、iOS 10.0.2のAppleCoreMediaを使うブラウザ(Chromeなど)ではもれなく同様の事象が発生すると推定できる。
考えられる対処方法の私案
- iOSの更新を待つ
- この記事の投稿時点で、バグなのか仕様なのかのAppleからの正式なアナウンスは見当たらない。
- Appleのサポートコミュニティには投稿があった模様。
- Moodle側の対処更新を待つ
- この記事の投稿時点で、Moodleのフォーラム、MoodleのBTSには報告があがっている。
- パッチなどは提供されていないが、BTSに「manager.php をいじったらいいのでは」という報告はあり。
- Moodle側を自前で修正する
- リクエスト時の拡張子などを見て、認証をスルーさせるなどの手段。ただし、投稿者はMoodleにもphpにも詳しくないので、 上記の
manager.php
やpluginfile.php
にそういった改変ができるのかはわからない。 - 改変できたと仮定して、誰でも音声・映像にアクセスできるようになることが考えられるので、セキュリティポリシー面の考慮が必要そう。
- 教材側を修正する
- 音声・映像ファイルを認証の必要のない場所に配置しなおし、教材側もその場所のファイルをソースとして参照するように修正する。
- 誰でも音声・映像にアクセスできるようになることが考えられるので、セキュリティポリシー面の考慮が必要そう。