たまたまOpusが気になってたら
Opusっていうコーデックがある。
https://twitter.com/sudosan/status/615819784001695744
見ての通りロイヤリティーフリーで幅広く扱える、WebRTCに不可欠1とも言われる便利そうなコーデック。
ffmpegもネイティブにコーデックを含んでいるため結構扱いやすい。もちろんVLCで再生可。
性質上使い勝手もよく、たとえば吉里吉里Zにも対応できたり(吉里吉里Z開発ブログ参照)、それを作中音声、BGMに使っているプロダクトも出てきてるらしい。
ブラウザではChrome 27+.Firefox 15+ がサポートしている2らしいんだけど致命的な問題がある。モバイル端末はいまだサポートされていない。もちろんChrome 44 + Android 5.13だって例外ではない。
さて、これをHTMLでaudioタグで使用しようとするとモバイルサポートには必然的に大体コーデックが必要となる。
とりあえずoggを使おうか。Apple系?しらんがな
ところがどっこい。これらのmimeはどちらもaudio/ogg
を指定する必要があるんだ。opusはaudio/opus
ってmimeもあるらしいが、これはブラウザが扱えないらしい。(非対応として)無視される。
つまり、以下のHTMLは思うように動かない。
1 2 3 4 |
<audio controls> <source src="sample1.opus" type="audio/ogg"> <source src="sample1.ogg" type="audio/ogg"> </audio> |
これをPCのChromeでみてみよう。
ちゃんと再生できるよね。
でもこれをモバイルChromeからみてみると再生できない。
1 2 3 4 |
<audio controls> <source src="sample1.opus" type="audio/opus"> <source src="sample1.ogg" type="audio/ogg"> </audio> |
もちろんこれで再生自体は出来るようになるがこれだと上述の通りいずれからのアクセスでもoggのほうが使われる。
opusが使いたいのに意味ないじゃん!!
と、しばらく途方に暮れていたところにたまたま流れ込んできた@sudosanのブログエントリー『 videoタグについて 』をみて気付いた。
そう。mediaタグのtypeにはmimeに加えてcodecs
を使用することができるのだ、と。
で、修正したHTMLがこんな感じ。
1 2 3 4 |
<audio controls> <source src="sample1.opus" type="audio/ogg; codecs=opus" > <source src="sample1.ogg" type="audio/ogg; codecs=vorbis"> </audio> |
これでちゃんとモバイルからも再生できるようになった。
ちなみにCodecsを指定するとブラウザに判断を任せられる、という事実はちゃんとMDNにも書かれていた。
サンプルは今は上げる余裕が無いのであとで追加する。とりあえず公式から拝借したものを何も考えずにエンコかけた。