自鯖でストリーミング再生
やりたいこと
自鯖にある各種動画ファイルをストリーミング再生できるようにします.
やったこと
大まかな流れ
以下,すべてサーバ側の設定となります.
apacheの設定
httpd.confを開いて
[root@centos ~]# vim /etc/httpd/conf/httpd.conf
以下のようにvideo/mp4をAddTypeします.
詳しくはこちらのサイト(http://www.adminweb.jp/apache/docroot/index4.html)を参考にさせて頂きました.
# # AddType allows you to add to or override the MIME configuration # file mime.types for specific file types. # #AddType application/x-tar .tgz <FilesMatch "\.mp4$"> AddType video/mp4 .mp4 </FilesMatch>
httpdを再起動することを忘れずに.
[root@centos ~]# service httpd restart
これでmp4ファイル(avc+aac)に対してブラウザからapache経由でアクセスすると,ブラウザで再生できるようになります.
動画ファイルのエンコード
今回の方法で再生できるフォーマットはmp4(avc+aac)のみです.
コンテナが同じでも,コーデックの組み合わせが異なれば再生出来ません.*2
なので,すべてのファイルをmp4(avc+aac)にしておく必要があります.
しかし,一般に,エンコードはすればするほど品質が劣化してしまいます.
そこで,なるべくエンコードせずにフォーマットを揃えるようにします.
つまり,非多重化*3してから,エンコードが必要な場合のみエンコードしmp4に多重化*4します.
以下,4つのパターンに分類してスクリプトを作成します.
# 映像・音声コーデックが同じでコンテナが異なる場合(例えばflv(avc+aac)) $ ffmpeg -i input.flv -acodec copy -vcodec copy output.mp4 # 映像コーデックが同じで音声コーデックが異なる場合(例えばmp4(avc+mp3)) $ ffmpeg -i input.mp4 -acodec libvo_aacenc -vcodec copy output.mp4 # 映像コーデックが異なり音声コーデックが同じ場合(例えばavi(vp6+aac)) $ ffmpeg -i input.avi -acodec copy -vcodec libx264 output.mp4 # 映像・音声コーデックが異なる場合(例えばavi(xvid+mp3)) $ffmpeg -i input.avi -acodec libvo_aacenc -vcodec libx264 output.mp4
あとは各ファイルについてfor文などで回して処理します.