ユーザーがアップロードした動画をさまざまなブラウザー/プラットフォームで高品質で表示したい。かなり良いスタートを切ったと思いますが、いくつか問題があります。ffmpeg 0.10 (PHP から呼び出される) と jwPlayer 5.8 (ライセンス) を自由に使用できます。
理想的には、私はサポートしたいと思います:
- Flash 9 以降を搭載したブラウザ
- 最新の Firefox/Chrome/Safari (Flash なし)
- iOS 4.1+
- アンドロイド 2.2+
現在のコード変換コマンドは次のとおりです。
$commands = array(
'flv' => "/usr/bin/ffmpeg -y -i {$sourceFile} -b 500k -ar 22050 -ab 64 {$tmpFileName}.flv 2>&1",
'webm' => "/usr/bin/ffmpeg -i {$sourceFile} -acodec libvorbis -ac 2 -ab 96k -ar 44100 -b 500k {$tmpFileName}.webm 2>&1",
'mp4' => "/usr/bin/ffmpeg -i {$sourceFile} -acodec libfaac -ab 96k -vcodec libx264 -level 21 -refs 2 -vf 'scale=trunc(ih*a/2)*2:trunc(iw/a/2)*2' -b 500k -bt 1000k -threads 0 -f mp4 {$tmpFileName}.pre.mp4 2>&1",
'jpg' => "/usr/bin/ffmpeg -y -i {$sourceFile} -ss 5 -vcodec mjpeg -vframes 1 -an -f rawvideo {$tmpFileName}.jpg 2>&1"
);
$fastStartCommand = "/usr/bin/qt-faststart {$tmpFileName}.pre.mp4 {$tmpFileName}.mp4");
私の現在の表示コードは次のとおりです。
<video id="video" controls="controls" width="{$width}" height="{$height}" poster="{$fileJPG}" style="width: {$width}px; height: {$height}px;">
<source src="{$fileMP4}" type="video/mp4" data-ext="mp4" />
<source src="{$fileWEBM}" type="video/webm" data-ext="webm" />
<a href="{$fileMP4}" title="Play Video">
<img border="0" src="{$fileJPG}" width="{$width}" height="{$height}" alt="Play Video" />
</a>
</video>
<script type="text/javascript">
swfobject.embedSWF(
'/flash/jwPlayer.swf',
'video',
{$width},
{$height},
'9.0.0',
'',
{
file: '{$fileFLV}',
width: {$width},
height: {$height},
provider: 'video',
stretching: 'uniform',
smoothing: 'true',
dock: 'true'
},
{
menu: 'false',
allowfullscreen: 'true',
allowscriptaccess: 'always',
allownetworking: 'always',
wmode: 'transparent'
}
);
</script>
アイデアは、Flash プレーヤーを優先し (引き続き使用したいカスタム スキンが多数あります)、HTML 5 ビデオにフォールバックし、それが失敗した場合は、mp4 ファイルへのリンクを含む JPEG を表示することです (これは、 iOS 2/3 および古いブラウザの最後の手段として動作するため、少なくとも QuickTime を起動してビデオを再生できます)。
現時点で解決方法がわからない主な問題は次のとおりです。
- Flash で高品質のビデオを表示するにはどうすればよいですか? flv の代わりに mp4 ビデオを使用してみましたが、動作せず、音声のみでビデオは再生されません。最近の Flash は h.264 をサポートするはずだと思いますが、どうすればよいのでしょうか? Flash の古いバージョンと新しいバージョンでは、別のトランスコーディング方法を使用する必要がありますか?
- ビデオをより良い品質でトランスコードするにはどうすればよいですか? 現在、すべての解像度で同じビットレートを使用しています。ffmpeg がビットレートを自動的に調整する方法はありますか? または、アップロードされたビデオの解像度を検出して、解像度のリストに一致させることはできますか?