序
LWMP (localwebmediaplayer)は継続的に開発されており、最新はv2.4である。 記事にならなかったのは、v2.1〜2.3の更新が地味だったからだ。
前回の記事はv2.0のときだったので、v2.1〜v2.4の更新を話していこう。
更新
v2.1
faviconが追加された。私の手描きである。
ちなみにXXWMPにも追加されている。 XXWMPも手描きで、全く異なるデザイン。
従来play(), pause()のメディアキーに対応していなかったため、対応した。
実際はブラウザ側でよきにはからってくれて動作する場合が多かったのだが、明示的に書くようにして確実性を挙げた。
プレイリストの連続再生とサムネイルにバグを埋め込んでいたので修正。
v2.2
youtube-dl系が使用している.info.jsonをメタデータとして認識するようになった。
従来メタデータ機能は重く、セキュリティリスクもあるものだったが、.info.jsonを使うことで限定的に利用できるようになった。
ただし、.info.jsonのみを使う設定はできない。
v2.3
ブックリーダーはcanvasを使って描画する方式だったが、普通にimgを使う形式に戻した。
これは、環境によっては表示がガビガビになってしまう問題があったためだ。
実は当初の実装は普通にimgを使用するものだったものの、MS Copilotの意見によりcanvasを使う方式に変更した上でリリースしている。
ページめくりの体験的にそのほうが良いとのことだったのだが、個人的には賛同しかねる部分だったし、結局はcanvasは必要なかった。
ちゃんと自分の考えを貫くべきだったなとちょっと反省。
v2.4
Vidstack関連のサポートを色々と改善したのだが、バグも見つかってVidstackに報告したものの、Vidstack自体がもう終息しているとのだった。
そこで移行先とされたvideojsのサポートを追加。 かなりいい感じなので、MewductのほうもPlyrからvideojsに乗り換えるかもしれない。
ちなみに、v2.4に至る過程でLighttpdが.opusに対して返すMIMEタイプが間違っている(audio/oggを返すべきだがaudio/opusを返してしまっている)ことが発覚。
これについては報告し、修正された
また、画像ビューワ/ブックリーダーで全画面表示を切り替えられるようにした。 PCだと必要性を全く感じない機能だが、スマホだと利便性がかなり変わる。 また、スクリプト側から制御されると対象の要素だけが全画面で表示されるようになるので、挙動がブラウザで操作するのと同じというわけではない。
プレイヤースクリーンが表示されているかどうかはstateで管理されているので、popstate時に全画面表示は解除するようにした。
試した限り、ブラウザのスクリーンを全画面にしている場合はdocument.fullscreenElenmentが返ってこないようなので、ブラウザを全画面運用している人に影響が出ることはなさそうだ。
なお、スマホでの全画面表示の挙動は結構違いがあって、私のColorOS 16上では
- Firefox系 - ディスプレイ全体に渡って表示される (ノッチが目立つ)
- Chrome系 - ヘッダー領域を除外して表示される
- Firefox Focus - ヘッダー領域を除外して表示されるが、アドレスバーの太さ分あふれる
というものになる。
Firefox Focusの挙動は明らかにバグっているが、FirefoxとChromeどちらの挙動が望ましいかは微妙なところ。
XXWMPへのポート
XXWMPはまだdevelopブランチだが、LWMP 2.0以降の機能が移植された。
サーバー側の対応が必要な機能はまだ揃っていなかったりするが、そもそもaudio error handlingをXXWMPに入れるかどうかは微妙なところ。恐らく、入れない。
XXWMPは利用条件がLWMPと比べて厳しいため、私以外のユーザーを観測できていないのだ。使っている人がいたらコメントして欲しい。