WebCodecs
DOM API でソフトウェア・ハードウェアのコーデックにアクセスできるようにする提案。WHATWG Streams の TransformStream と MediaStreamTrack をベースにしている。 2019/06/27-28 の W3C Workshop on Web Games での発表で触れられている。
今までの API でもコーデックにアクセスするものはあったが、高レベルであったり特定の用途でしか使えなかった。
HTMLMediaElement + Media Source Extensions
<video> と <audio> で再生することを目的としているため、柔軟なことが出来ない
再生位置の変更の考慮を必要の有無に関わらず強いられる
デコードの速度調整が出来ず、どこまでデコードされたかが得られない
エンコードに非対応
Web Audio API
ストリームに非対応
MediaRecoder API
API が高レベルで、リアルタイムエンコーディングを保証しない
WebRTC
MediaStream API と密接になっていて、他の用途で使用できない
これらを解決するために {Audio, Video}{TrackReader, TrackWriter, Encoder, Decoder} を定義する。
code: (js)
const demuxer = ...; // Transforms to demuxed/deserialized frames
const audioBuffer = ...; // TransformStream that buffers frames
const audioDecoder = new AudioDecoder({ codec: "opus" });
const audioWriter = new AudioTrackWriter();
demuxer.audio
.pipeThrough(audioBuffer)
.pipeThrough(audioDecoder)
.pipeTo(audioTrackWriter.writable);
個人的に PCM を扱えるようにするのを3年くらい待ってるけど、そのあたりはどうなるんじゃろうか。