MP4が再生できない場合の調査・対処方法

はじめに

多くのスマートフォンバイル端末やゲーム機がMP4動画ファイル(以下”MP4”とする)への対応を謳っているものの、再生できるMP4は機器によってバラバラの状態であるため「MP4が再生できない!」という問題にぶつかりやすく、慣れない内は解決に時間がかかる場合が多い。
MP4が再生できない場合に、わたしが実施している問題の切り分け方法をメモしておく。

問題の切り分けについて、まずはMP4の再生について「ローカル再生ができない」のか「ストリーミング再生ができない」のかで大別する。

ローカル再生ができない場合

Windowsやスマートフォンで、ローカルに保存したMP4が再生できない場合。

  1. PC上での再生確認
    この場合は、まずPCにVLC Player(以下、”VLC”とする)をインストールして再生してみる。VLCは動画(音楽)再生ソフトとしては非常に優秀であり、これで再生できないのであればそもそもファイルが壊れているかMP4の作法に従っていない(動画や音楽の形式や組み合わせがおかしい)ファイルであると考えられる。対策としては動画の作り直しとなる。動画作成の方法は各ソフトの説明サイトを参照のこと。
  2. MP4の情報を確認
    PCで再生できたら、つぎにMP4の情報を確認してみる。
    まずは真空波動研Liteを http://www.kurohane.net/ から探してインストール。
    続いて、真空波動研Liteを起動してMP4ファイルをドラッグアンドドロップすると下記のような情報が得られる。情報が出なかったり、真空波動研Liteが落ちたりする場合には、MP4ファイルが壊れている可能性がある。

    • Profile:High@4
    • fps:23.98
    • ビデオビットレート:2726.14kb/s
    • 音声形式:AAC-LC 48.00kHz 2ch
    • 音声ビットレート:318.96kb/s

    確認したら次のステップへ。

  3. 機器が再生できるMP4の仕様と突き合わせ
    機器が再生できるMP4の仕様を確認し、問題となっているMP4がその機器で再生できる形式なのかを確認してみる。下記は一例。

    一つでも仕様を逸脱した項目があった場合は再生できないと思ったほうがいい。
    その場合は機器に合った仕様でMP4を作り直すこと。
    問題となりやすい例を下記に示す。

    • Profile:Baseline→Main→Highの順に要求が厳しくなる。High Profileをまともに再生できる環境は多くない。(PS3とGalaxy Tabぐらいしか知らない)
    • Frame size(画面サイズ):たとえばPSPではFrame sizeが720×480までと制限されているので、それ以上のサイズの動画は再生不可。
    • fps:fpsが高すぎると(60fpsとか)、再生できない確率が高くなる。29.97ぐらいまでに抑えておくのが良い。
    • ビットレート:たとえばPSPでは768kbpsまでとなっている。
    • 音声形式:音声形式にAC-3(5.1ch)を使ったりすると再生できないことが多い。無難なのはAAC 2ch。

    などなど。つまり、再生する機器に応じて、MP4の作成には十分注意する必要がある。

ストリーミング再生ができない場合

ストリーミングサーバでトランスコード(MP4をFLVに形式変換して配信しているなど)している場合は別だが、ローカルで再生できないMP4はストリーミングでも再生できない。なのでまずはローカルで再生できるかどうかを確認する(→「ローカル再生ができない場合」を参照)。
しかし、ローカルで再生できるにもかかわらずストリーミングで再生できない場合がある。
これは、エンコーダがストリーミング配信に不適切なファイルを出力してしまうため。下記の説明が詳しい。
http://www.alpha.co.jp/biz/products/dlna/mlplayer/convert_to_mp4.shtml

上記にもある通り、この場合はMP4box(またはYambなどのmp4フロントエンド)を通せば修正が可能だ。再エンコードなどは発生しないので、画質・音質が落ちることはない。

MP4boxをコマンドラインで使用する場合は、
# MP4Box -add [元MP4ファイル名] -new [新MP4ファイル名]

Yambを使う場合は、

  1. [Creation] – [Click to create an MP4 file (省略)]
  2. ファイル選択
  3. [Next]ボタンを押す

でOK。

なお、エンコーダによってはストリーミング配信に適したMP4を出力することが可能になっている。
例えばHandBrakeでは、[Web optimized]にチェックを入れるだけで良い。

補足1:どの機器でも再生できるMP4は作れるのか?

作れる。だが、再生しようとしている機器すべての最大公約数をとることになるので、画質・音質はかなり犠牲となる。
それが嫌ならば、あとは妥協点を探していくしかない。
わたしの場合は、再生環境をWindows PC、PS3、Galaxy Tab(2.3)に絞った。これならば1080p(High Profile)の動画が問題なく再生できる。

補足2:エンコーダはどれを使うべきか?

完全に好みと言っていい。各々が使いやすいソフトを使えばいい。
個人的にはHandBrakeを使っている。正直、mp4のオプションは複雑すぎて全く理解していないが、デフォルトプリセット(High)で満足のいく仕上がりになっている。また、ストリーミングに最適化しやすいのも大きい(前述のとおり、[Web optimized]にチェックを入れるだけで済む。)。

以上

—–
検索用word:MP4 ストリーミング Pogoplug QNAP Qmobile

QNAPのPHPを高速化(eAccelerator) その2(補足)

前回はQNAPでeAcceleratorの高速化を紹介しました。
今回は、それに関する補足です。

eAccelerator管理画面(control.php)を使用する

eAcceleratorを有効にしても、実際にどれぐらいメモリがキャッシュされているのか、また何がキャッシュされているのかが分かりにくいと思います。
eAcceleratorではもともとそれを管理する画面(control.php)が用意されているので、QNAPに導入します。

  1. phpinfo()で、eAcceleratorのバージョンを確認しておきます。
  2. eAcceleratorの公式サイトから、上記で確認したバージョンと同じアーカイブをダウンロードし、解凍します。
  3. 解凍したフォルダの中にcontrol.phpがあるので、QNAPのQweb以下のどこか(例えばQweb/eaacelerator/など)に配置します。他のファイルは使わないので削除してOKです。
  4. QNAPのphp.ini編集で、[eaccelerator]セクションの一番下に、

    eaccelerator.allowed_admin_path = [配置したパス]/control.php

    を追記して適用します。(上記の例だと/share/Qweb/eaacelerator/control.phpとなります)

  5. デフォルトの設定だと誰でもcontrol.phpにアクセスできる設定になっているので、ファイルを開いて$authをtrueに、$userと$pwを適切に設定するか、.htaccessなどでアクセス制限をしておきます。
  6. ブラウザでcontrol.phpを開いてみます。eAccelerator control panelが表示されればOKです。
    画面下のボタンではキャッシュのクリアができるようですが、私の環境ではディスクキャッシュ(/.eaccelerator.tmp)のクリアができませんでした。

共有メモリサイズ(eaccelerator.shm_size)を変更する

eAcceleratorでは通常、共有メモリサイズ(eaccelerator.shm_size)を任意に指定できます。
QNAPでもphp.iniの中でパラメータeaccelerator.shm_sizeを持っていて、初期値は32(MB)となっています。
しかし、試した人は分かると思いますが、QNAPではなぜかこの値を変更しても32(MB)に戻ってしまいます。
(2011.03.24以下修正した)
調べてみると、この値は/etc/init.d/Qthttpd.shの中でハードコーディングされていることが分かりました。
Qthttpd.shを書き換えることによって、メモリサイズを書き換えられることは確認済みです(詳しくは書きません)。

以上です。

QNAPのPHPを高速化(eAccelerator)

QNAPで例えばWordPressを使っていると、「遅い!」と感じる人も多いと思います。
WordPressはPHP+MySQLで動的にコンテンツを生成するので、当然といえば当然です。

今回は、QNAPのPHPを高速化します。eAcceleratorを使い、メモリに中間コードをキャッシュするようにします。
仕組みについて詳しく知りたい方は、Googleで検索して下さい……。

では手順です。

  1. QNAPの管理画面に入る。
  2. 画面左のツリーから[ネットワークサービス] – [Webサーバ]を選択。
  3. 画面右で[php.iniのメンテナンス]にチェックを入れ、すぐ右のプルダウンで”編集”を選択。
  4. すぐ下にphp.iniの内容が表示されるので、”[eaccelerator]”の文字を探す。
  5. “[eaccelerator]”の直下に “extension = eaccelerator.so” を追加(ダブルクォートは抜いて下さい)。
  6. ちょっと下の[適用]ボタンを押す。

(2011.03.24色々修正……)
これで設定は終わりです。体感でかなり早くなるのが分かると思います。
ただし、私の環境では(TS-119)、キャッシュがルートパーティションを食いつぶし、システムが不安定になってしまいました。
なので、eaccelerator.shm_only = 0 の値を 1 に変えて(メモリのみ使う)運用しています。

以上です。