2012年5月13日日曜日

[Red5] 録画ファイルの保存先とかを変更してみよ〜

クライアント側で撮っている動画をサーバ側に保存するとき、デフォルトだと
webapps/<MyAppName>/streams
に保存されるのだけれども、やっぱstreamsのところ変えたいよね。

ということで今回はこの保存ディレクトリ、録画ファイル名をカスタマイズする方法を。

※他のRed5関連のエントリはこちら


まあ、参考サイトの通りやればできるのだけれども。

手順としては、
  1. Red5にて用意されているInterface「IStreamFilenameGenerator」を実装したクラスを作成し、パス/ファイル名生成メソッドを書く。
  2. 作成した「ファイル名生成クラス」をRed5に登録して使えるようにする。
みたいな感じ。

IStreamFilenameGeneratorインタフェースを実装したカスタムクラスを作成
IStreamFilenameGeneratorを実装するクラスを作成して、ファイル名を生成するgenerateFilenameメソッドとかを実装する。
とりあえず、ディレクトリ名とデフォルトじゃない固定パスに変えるのと、ファイル名に日付を入れてみよう。

generateFilenameメソッドの戻り値が録画ファイルのパスを含んだファイル名になる。
メソッド(2つあるうちの最初のやつ)の第2引数はファイル名、第3引数は拡張子で、クライアント側(Flashアプリ等)から送られてくるもの。 これにパスを付加することによって動画ファイル保存先を指定している。
パスは絶対パスと相対パスを扱えるようだ。resolvesToAbsolutePathメソッドの戻り値がtrueの場合は絶対パス、falseの場合は相対パスを扱っていることになる(はず)。相対パスは、webapps/<MyAppName>/が基準になってるみたい。(絶対パスは試してない)

第4引数のtypeで、再生する場合か録画する場合かを判別可能。IStreamFilenameGenerator内に内部クラスとしてGenerationTypeが定義されており、その内容は列挙型(Enum)で
PLAYBACK・・・再生時
RECORD・・・録画時 
のように定義されている。
つまり、再生時と録画時で別のルールにすることができるということだね。

残るは第1引数scopeの使い方だけど、ここはまた後日。

red5-web.xmlにbean定義を追記
自作したファイル名生成クラスをRed5サーバに認識してもらって使えるようにしよう。
やり方は、red5-web.xmlにこんなタグを書くだけ。
id="streamFilenameGenerator"は決まっているのでそのまま。
classには自作クラスの名前(パッケージ含む)を書く。

propertyのnameは自作クラスのメンバ変数。valueはその設定値。
つまり、ソースコードを書き換えなくてもred5-web.xmlファイルから動画保存パスなどを変更できるようにしている、ということ。

ここまでできたらクライアントのFlexアプリから動画を録画してみよう。
今回の場合は、
webapps/<MyAppName>/recordedStreams/filename20120512043502.flv
みたいな感じで、プログラムで指定したパスに日付入りの録画ファイルが保存されているはず。

[参考サイト]

0 件のコメント: