そのため、私が取り組んでいるプロジェクトには、組み込みプレーヤーで再生する必要のある大量の MP4 ファイルが既にサーバー上にあります。理想的には、ほとんどのビデオ用に既にセットアップされている JW Player を使用したいと考えています。残念ながら、古いビデオの多くは MPEG-4 でエンコードされており、ブラウザーで再生するには追加のプラグインが必要です。
私がやりたいのは、これらのビデオをオンザフライで JW Player がサポートする H.264 などの形式にトランスコードできるようにすることです。現在、古い MP4 ファイルを変換できるので途中までですが、データをプレーヤーに直接渡すのに苦労しています。
これは、変換を行っている現在のスクリプトです (これは ですmedia_converted.php
):
<?php
error_reporting(0);
if (!isset($_GET["MediaName"])) {
$_GET["MediaName"] = "GSX238";
}
require_once("php/media_center_functions.php");
$MediaURL = ConstructVideoURLInternap($_GET["MediaName"]);
header("Content-Transfer-Encoding: binary");
//header('Content-type: video/mp4');
//$calculatedFileSize = filesize($MediaURL);
//header("Content-Length: {$calculatedFileSize}");
$cmd = 'ffmpeg -i "'.$MediaURL.'" -vcodec libx264 -acodec copy -f mp4 -moov_size 32000 "_temp/'.time().'_temp.mp4" 2> _temp/media_converter_output.txt';
passthru($cmd);
?>
上記のファイルを取得して、ビデオ ソースとして JW Player に渡そうとしています。JW Player の変数スクリプトでは、次のようになります。
so.addVariable('file','media_converted.php?MediaName=12345');
これはうまくいくはずだと私は信じていますが、そうではありません。
変換が機能してプレーヤーに送信されているように見えても、ブラウザが何かを再生する前にファイル全体をダウンロードしようとしていると思われるため、わかりにくいです。明らかに、ユーザーをそのように待たせることはできません。
qt-faststart を調べたところ、コンピューターでそれを使用してファイルを変更し、ロード中に再生を開始できるようにすることができました。残念ながら、これには 2 つの手順が必要です。最初にファイルを完全に変換する必要があり、それが完了したら qt-faststart.exe を使用する必要があります。繰り返しますが、これは実際にはオンザフライのソリューションではありません。プレーヤーに出力される単一のコマンドで同様の結果を生成する方法が必要だと確信しています...そうですか?
サーバーには、現在ハード ドライブの容量よりも多くのビデオ データがあります。そのため、各ビデオを永続的に再エンコードするのは、たとえバッチであっても面倒です。それをしなければならない場合はそうしますが、それらをそのままにして、その場でトランスコードできるようにしたいと思います。
何か案は?