開発部

ChromeがAAC録音に対応していた

スタッフAです

自サービスでMediaRecoderAPIを使っていまして
Chromeが「audio/mp4」にいつの間にか対応していたため不具合が生じるということに出くわしました
それ以前までは「audio/webm」にしか対応していなかったのに(サービス自体の不具合はすぐに解消しました)
あまりに急な仕様変更でかなり驚きました
なので最新のChromeのMediaRecoderAPIの仕様はどうなっているんだ、と備忘録がてら確認

検証コード

window.onload = function(){

const codecs = [
    'audio/webm', 
    'audio/webm; codecs=opus', 
//以下は以前はダメだったコーデック
    'audio/mp4',
    'audio/mp4; codecs=opus',
    'audio/mp4; codecs=mp3',
    'audio/mp4; codecs=mp4a.40',
    'audio/mp4; codecs=mp4a.40.2',
    'audio/mp4; codecs=mp4a.40.5',
    'audio/mp4; codecs=mp4a.40.29'
];

for(let i in codecs){

    console.log(codecs[i]+' '+MediaRecorder.isTypeSupported(codecs[i]));

}

};

「audio/webm」
「audio/webm; codecs=opus」
がtrueなのは以前通り
そして
「audio/mp4」
が可能になっていました
「audio/mp4」でMediaRecorderAPIに入れるとcodecs=opusで出力されるようで
「audio/mp4; codecs=opus」
ももちろん可能でした

特筆すべきは
「audio/mp4; codecs=mp4a.40.2」
が可能になっているところです
え・・・?AACで出力してくれるの???という驚きしかなかったのですが
実際出力してみると確かにAACでした

ただこのmp4
iOSやMacで再生しようとしても出来ないというか
ffmpegやMP4BOXで入力ソースと使っても問題ないのでMP4の仕様的には合ってるのでしょうけど
恐らく内部のmp4タグの何かがiOS・Macの仕様に引っかかってるんだろうなという感想です
まあ普通に使う分には再変換すればいいので詳しく調べなくてもいいかなあと思いつつ
後々のため調べてみようかな

こういう仕様変更で今運営してる自サービスのエラーとかが減るのでは?と期待はしております(実際に使えるかはまた別問題ですが)

※2024年9月段階の最新バージョンのChromeで検証

文:スタッフA