JW Player- Flash Video Playerのプログレッシブダウンロード再生

MP4コンテナの動画ファイルを再生でき、かつ簡単にホームページに埋め込めるプレイヤーとして、Jeroen Wijering氏のJW Playerを使わせて頂いています。
HTTPストリーミング配信においてプログレッシブダウンロード再生ができるということで、Ver3.16くらいからずっと使用してきましたが、いつからかできなくなっていることに気付きました。

PlayNCブログのメンテナンスのため、ブラウザーはIEを使っていましたが、先日、ブラウザー終了時に毎回キャッシュデータをクリアするように設定変更した時にわかりました。
再生ボタンを押してから実際に再生されるまでの時間がだいたい30秒前後になっていて、「おせーぞ」ということでこれは「おかしくね?」となったわけです。

【事象】ブログ上の動画がプログレッシブダウンロード再生ができなくなった。

【原因】セキュリティソフトのウェブアンチウィルス機能の影響

【詳細】

JW Player-Flash Video Playerのバージョンは、Ver3.16⇒Ver4.1⇒Ver4.3⇒Ver4.5⇒Ver5と変えてきたわけですが、いつからなんでしょうか?
Ver3.XからVer4.Xに変わる際とVer4.X⇒Ver5に変わる際にオプションの記述を編集した記憶があります。
また、プレイリストファイル形式は、Ver3.XおよびVer4.XではXSPFファイル形式で正常に再生できていましたが、Ver5ではダメだったので、XSPFファイル形式からRSSファイル形式に書き換えて使用しています。

Ver4.5くらいからViral版もあり、Viral版でないとできないことがあったりと、いろいろな点で戸惑っていました。
やっと落ち着いたと思ったら、プログレッシブダウンロード再生ができていない・・・

検索サイトでしらべてみましたが、引っかかるのは"MP4はプログレッシブダウンロード再生できない"とか・・・ 
???
Ver3.16のころからできていました。
そのころだと、拡張子が.flvしかダメだったじゃん!といわれそうですが、metaタグを使って指定してやれば、拡張子.mp4も再生可能でした。
音声と映像のMUXでmp4box を実行していれば、プログレッシブダウンロード再生できていたのです。
他の方法で作成したMP4コンテナの動画ファイルでも、あとでmp4boxを実行してやればOKでした。

mp4boxにより、インターリーブは0.5s(デフォルト)に設定されています。
-interオプションで指定する値の単位は[ms]なので、"mp4box 動画ファイル名" で実行すれば-inter 500と指定したのと同じです。
※-outputオプションで出力ファイル名を指定しなかった場合は、入力ファイルに上書きされます。
※デフォルトでmetaデータを先頭に書き込みます。

ここまでは、動画公開当初の話になりますが、なぜできなくなったのでしょう。

検索サイトで調べると、「mp4box -isma -hint 動画ファイル名」を実行するとプログレッシブダウンロード再生できるようになったという記事がありました。
ヒントファイルは、専用ストリーミングサーバ(RTSPやRTP)で動画配信する際には必要だという認識だったので、HTTPを利用した擬似ストリーミング配信では無関係と思っています。

ヒントファイルの影響を検証

疑いつつも、検証してみました。
検証は以下の様にいろいろなパターンで行いました。
⓪~④で、再生ボタンをクリックしてから再生されるまでの時間、タイムスライダーの動きを比べてみました。

⓪オリジナル:MP4Box -new myfile.mp4 -add myfile.m4v -add myfile.m4a
①ISMA streaming用途のmp4作成:MP4Box -isma -hint myfile.mp4
②サーバに最適化したmp4の作成:MP4Box -hint -copy -tight myfile.mp4

③ストリーミング用にBIFS付きの複雑な mp4を作成:MP4Box -ocr -iod -hint myfile.mp4

④safe streaming用に3GP/MP4を作成:MP4Box -nosys -hint myfile.3gp

検証結果

⓪~④どれも、再生ボタンクリック⇒遅延⇒プログレッシブダウンロード再生開始
という状況で、再生までに同じくらいの時間がかかっています。

今回の件には、ヒントオプションは関係ないようで共通してプログレッシブダウンロード再生開始されるまでの遅延時間が問題のようです。
この遅延時間は、一体なにが原因なのでしょう。
※現在では上の笂ェ~④はプログレッシブダウンロード再生により再生されています。


いろいろ考え出すときりがないので、困ったときはセキュリティソフトを疑ってみます。

カスペルスキーインターネットセキュリティ2010を一時的に停止して、IEおよびFireFoxを再起動して試してみました。
※セキュリティソフトの停止は、自己責任で行ってください。
・・・・・・


あら?

遅延がなくなって、すぐにプログレッシブダウンロード再生が開始されました。

またまた原因は、カスペルスキーインターネットセキュリティ2010でしたか><

よって
mp4boxのヒントオプションには関係がなく、mp4boxを実行していればプログレッシブダウンロード再生が可能な動画ファイルが作成されます。
上の例ではヒントオプションを指定しましたがHTTP/FTPストリーミング配信では不要です。


セキュリティソフトのどの機能の影響なのかは、公式サイトのFAQなどを参考に判断します。

カスペルスキーインターネットセキュリティ2010の設定変更

設定⇒ウェブアンチウイルス⇒設定⇒フラグメントのバッファリング時間にチェック 
時間を1秒以内に設定

以上で、すぐにプログレッシブダウンロード再生が開始されました。

この設定は、Youtubeの動画再生でなかなか再生されない。という方にも効果があります。


プログレッシブダウンロード対応動画作成時のポイント

一番簡単なのは作成した動画ファイルをmo4boxで処理することです。

以下は最もシンプルな方法で、変換後のファイルは入力ファイル「test.mp4」を上書きします。

mp4box.exe -inter 500 test.mp4

mp4boxはCLIコマンドですので面倒に思うかたはGUI操作できるYAMBというものもあります。
しかし、プログレッシブダウンロード対応にする目的だけとか使用するオプションが毎回同じなら以下のようなバッチファイルを作成してドラッグ&ドロップするほうが便利です。

以下は、サンプルプログラムです。

@echo off

rem MP4BOX_CMD=にmp4box.exeのフルパスを設定してください。
set MP4BOX_CMD="D:\tools\MeGUI_1911_x86_WithoutInstaller\tools\mp4box\MP4Box.exe"

:target

rem variables
set SRC=%1

:start_label
echo ===============================================================================
echo %time% %SRC%の処理を開始しました。
echo ===============================================================================
echo 

%MP4BOX_CMD% -inter 500 %SRC%

rem next file
shift /1
if "%~1"=="" goto end
goto target

:end
pause
exit /b

 

(1)メタデータはファイルの先頭に配置する

ファイルの構成情報が後尾にあるとファイルをすべて読み込まないと再生ができません。mp4boxはメタデータを先頭に書き込みます。

(2)一定間隔でインターリーブする

HTTP/FTPストリーミング配信の最適化やディスクアクセスの削減に効果があります。mp4boxのデフォルトでは0.5s(500ms)です。
0に設定するとインターリーブしませんが、メタデータは先頭に書き込まれます。