やりたいこと
web上で動画を再生したい
問題
.mp4や.movの拡張子がついているファイルを再生しようとした時に再生できるものとできないものが存在する。
結論
ファイル形式(拡張子)で判断するのではなく、コーデックをブラウザが対応するものに変換する。
動画の構造
動画は大きく映像と音声という2つの構造でできている。
動画は容量が大きいファイルなので圧縮してやる必要がある。
(基本的に動画を録画した時点で勝手に圧縮されたファイルが作成される)
コーデック
圧縮する行為をエンコード
圧縮したままでは再生できないので、圧縮をもとに戻すのがデコードと呼ぶ。
エンコードとデコードの2つを組み合わせてコーデックと呼ぶ。
動画の場合は映像と音声の2つのコーデックが必要になる。
コーデックの種類
代表的な映像コーデック
MPEG-4・ MPEG-1・MPEG-2・ Xvid・Divx・H.263・H.264・HEVC(H.265) など
代表的な音声コーデック
MP3・AAC・AC-3・FLAC・LPCM・WMA など
動画が再生されない原因
映像が再生されないということは映像コーデックが対応していないブラウザである可能性がある。
映像コーデックをChromeなどブラウザの規格に合わせる必要がある。
逆に音声が流れないという場合は音声コーデックを見直す必要がある。
コンテナ
.mp4や.movはコーデックの組み合わせるためのコンテナと呼ばれるもの。
コンテナごとに扱えるコーデックが決まっている。
.mp4
映像: MPEG-4、H.263、H.264 など
音声: MP3、AC3、AACなど
.mov
映像: H.263、H.264、HEVCなど
音声: MP3、AAC 、FLAC など
具体的なケース
自分のケースで言うと、.movのコンテナで H.264とAACのコーデックだと正常に再生されるけど、.movコンテナ HEVCとAACのコーデックだと映像が再生されないということが起きた。
この場合はHEVCのコーデックを変換して、H.264などにする必要がある。
まとめ
1つのコンテナでも複数のコーデックを扱うことができるので、.mp4だからと言って全て再生できるとは限らない。コーデックがなんなのか?ブラウザはどのコーデックに対応しているのか?を確認する。