<> Embedded Media Field 備忘録 その3 | PhoenixKnight

Embedded Media Field 備忘録 その3

Drupalバージョン
モジュール
Embedded Media Fieldの設定メニューは以下の様に、追加できました。



プレイヤー選択に併せて使用プレイヤを変わるところまで実装できました。
ただし、条件を満たしていない項目だけをグレー表示にするのは無理でした。(メニュー全部をグレーには可)
すぐにできるのは、条件を満たしていない項目の後ろに(disable)と記述を追記することくらいです。

Flow PlayerとDefaultはそのまま流用しているので、再生までの動作確認はできています。
あとは、JW FLV Media Playerの箇所だけです。

ここで、以下の問題が発生しました。
筐?プレイヤパスの取得方法
flvmediaplayerモジュールを使用しない場合は、指定した値から取得可能ですので、モジュールを使用した場合の話です。
youtubeプロバイダのオリジナル版では、$url変数が改めて設定されていますが、これはプレイヤパス(ファイル名除く)に設定されているのですが、なぜかNULLが渡されているようで、そのままではプレイヤそのものが表示できません。
プレイヤファイル(SWFファイル)のパスをどうやって取得するかが問題です。
モジュールを使っているのだからそっちの設定で良いのですが・・・
※参照するべきところを間違っていただけで、正確にパス+ファイル名を取得できていました。

②画像パスの取得方法
  emthumbモジュールにindex変数を渡して、emthumb_altとemthumb_titleを抽出してimageのパスを返してくれないかと試みましたが、そのままではダメなようです。画像パスさえ正しく取得できれば、プレイヤに画像を貼り付けれるところまでできています。
これに関連してViewsで表示するとthumbnail画像自体が表示されませんので、このままだとフロントページの作成もうまくできません。
そもそもemthumbモジュールがthumbnail変数には対応していて、emthumb_altやemthumb_titleの読み取りには対応していないのかもしれません。
※flowplayerの場合、プレイヤへの画像貼り付けはどうやってもダメでした。パス指定がどうこうでなくて構文の問題のようです。もしかすると制限があるのかもしれません。

③FLV Media Playerモジュールが必要かどうか
筐?に関連して、flvmediaplayerモジュールのtheme_flvmediaplayer_render_player関数に値を渡すために、わざわざemvideoモジュールからプレイヤーパスを渡すのもなんだか変な気がします。また、theme_flvmediaplayer_render_playerを直接使うことで、本来flvmediaplayerモジュールのpluginの指定やカラーの指定などのオプション設定は意味がなくなってしまいます。
もっといい関数があるのでしょうか・・・

emvideo側で設定したwidthやheightなどの情報だけ任意でわたし、プレイヤファイルパスやそれ以外のパラメータは、コンテンツタイプで判断して、flvmediaplyerモジュールのプロファイル設定やデフォルト設定を使ってくれるのが理想です。
これらをすべて反映できる方法は、わたしのスキルでは無理なようです。
flvmediaplayerのプロファイル設定を取得してきて、それにemvideoの設定を上書きすればいいだけなのかなぁ・・・

結果的には、flvmediaplayerモジュールと連携させても、zzz_custom_urlプロバイダ側でJW FLV Media Playerのプレイヤを使ったコードをベタで書いたものと大差ありません。
flvmediaplayerモジュール内で条件により分岐してしまうことを考慮すると、直接コードを書いたほうがシンプルにさえ思えます。

そうなると何をするためにFLV Media Playerが必要なのかわからなくなってきました。
emvideoのyoutubeプロバイダーでは、JW FLV Media Playerのパスを取得する方法は以下3つです。
筐?flvmediaplayerモジュールで設定されているパス
②General Settingsの項目で直接パスを入力
③自動検索(特定ディレクトリをキーワードで検索)

上の①~③について現状をいうと、①はメニュー表示が変わるのでパス設定がうまくいっているようにみえますが、実際には正しくパス設定ができていませんので、当然JW FLVプレイヤで再生できません。
あと②~③については、flvmediaplayerモジュールとは一切関係ありません。
将来的に、flvmediaplyerモジュール側の設定のすべてを反映できるようにする予定かもしれませんが、今現在まったく意味がなさそうです。
それよりも、flvmediplayerでも使用されることが想定されているswftoolsモジュールを直接使用したほうがよさそうではないかと思いました。

このPDF資料を見ると
・Embedded Media Field + SWF Tools
といった組み合わせの記載をみました。
以前見たときはスルーしていましたが、今では納得できます。

FLV Media Playerのプロジェクトサイトやドキュメントをみると、
・SWF Tools + FLV Media Player + XSPF Playlist
という組み合わせも良いみたいです。

ようするにmarkup?をどのモジュールで行うかを決めなくてはいけないようです。もしくは自分で簡単なPHPコードを書くかです。
flvmediaplayerモジュールはJW FLV Player用ラッパーモジュールであって用途が違うのでしょう。
そうなるとSWF Toolsが有力なのでしょうか

SWF Toolsも結局、プレイヤパスの指定は必須のようで、またSWF Tools側の設定がうまく反映されませんでした。 JW FLV 4.5用にはパッチがでているようですが、このパッチは設定メニューを全書き換えしているのでもしかするとパッチ適用でうまくいくのかもしれません。
ただ、パッチ適用の際は、せめてstatusがclosedになっていないと、さらに不具合が発生して修正パッチが必要な状況に陥る可能性もあるので注意が必要です。

久々にSWF Toolsを使用しましたが、セットアップが面倒だなと改めて思いました。
しかし、プレイヤー選択や生成コードのタイプ選択ができるのは良いかもしれませんが、flowplayerのサポートバージョンが古いため、このプレイヤーを使用する人には、最新版が同梱されているflowplayerモジュールのほうがお勧めかもしれません。
あと、swftoolsモジュールを有効にすると、flowplayerモジュールがモジュール一覧に表示されなくなりました。

運用がはじまり安定してくると、使用するプレイヤは1種類になるでしょうし、生成するコードもその都度変えるようなことはしないと思うので、私の要件にはやっぱりSWF Toolsはおおげさになります。

正直、今いろいろemfieldモジュールのソースコードをいじくりたおしていますが、PHPの勉強とThinkBoxとの連携です。
コードを埋め込みたいだけなら、本文に毎回自分で作ったテンプレートを埋め込むか、コンテンツテンプレートでPHPコードを書くか、テーマテンプレートを作っておけば良いだけです。

ThinkBoxとの連携については、
filefieldやimagefieldで試してみましたが、これだけではformatterに追加されません。やはり、emfieldを使うしかなさそうです。
bliptvやyoutubeプロバイダではうまくいきますが、zzz_cutom_urlではダメです。
ただ、bliptvやyoutubeの場合もカスタムサムネイル画像はダメなようなので、症状はzzz_cutom_urlの場合と同じだということになります。
そうなると、emthumb_altやemthumb_titleを参照していないということかなぁと推測されます。
逆な発想でうまくいっているbliptvやyoutubeを参考にするとthumbnailに画像のURLを代入してやればいいだけにも思います。
そうなると、デフォルト値のPHPコード欄を利用するのがもっとも楽なのかなぁ思いますが、現状、私が入力したPHPコードではうまく設定が保存できなくて、pending中です。

今日は、花火大会があるので、また時間があるときにでも試してみます。

2009.08.23追記 SWF Toolsについて訂正

SWF Toolsの構文は、以下になります。
swf ( $file, $args=array());

昨日は、$fileにプレイヤーファイルを指定していましたが、動画ファイル名を指定することでSWF Toolsのプレイヤ設定を使用するようになりました。

下の図は、emvideoのzzz_custom_urlプロバイダのオリジナルのまま(default)です。
この場合、Quick Time Playerが表示されます。

 

2番目の図は、コンテンツテンプレートを使用して、以下の様に記述したケースです。
(カスタマイズしたswftoolsモジュールがある場合と同じ内容です。)
print swf($palyer_path, array( 'params' => array('width' => $width, 'height' => $height), 'flashvars' => array('image' => $image), ) ); ※$player_pathはJW FLV Media Playerのplayer-viral.swfになります。
※$imageはfilefield_widgetでアップロードした画像ファイル名になります。

 

3番目の図は、同じくコンテンツテンプレートを使用して、以下の様に記述したケースです。
($player_pathの代わりに、動画ファイル名を指定しています。)
print swf($file, array( 'params' => array('width' => $width, 'height' => $height), 'flashvars' => array('image' => $image), ) ); ※$fileはemvideo_textfieldで、入力した動画ファイル名(URL)になります。
※$imageはfilefield_widgetで、アップロードした画像ファイル名になります。 ※これが可能なのは、SWF Tools設定のfile handlingでプレイヤを設定している場合のみです。Noneでは動作しません。

2番目と3番目について、事前に、SWF Tools設定でJW FLV Media Player4を使用するように設定しかつ、プレイヤーの色を黒っぽく変更してあります。この状態で、2番目で表示されたプレイヤは、JW FLV Media Playerのデフォルトの白っぽいままなので、SWF Toolsの設定が反映されていないことがわかります。3番目は、コントロール部が黒っぽくなっているのでSWF Toolsの設定が反映されています。 ということで、SWF Toolsを使用するのもありだと思います。使用した場合は、playerの選択はswftoolsで可能ですので、せっかく使ったメニューは不要になります。 theme_emvideo_zzz_custom_url_embedded_video関数では、swftoolsモジュールがあるかどうかの判定だけ組み込めば十分です。そうなるとflvmediaplayerモジュールの有無判定は不要だと思いますが、そのままでも問題ないでしょう。 あと、ThinkBoxで動画を再生させる方法については、 ①youtubeプロバイダーだと騙して対応できないか ②PHPコードで対応できないか ③ローカルの動画の場合のみfilefildで動画と画像をアップロードして対応できないかの3点で模索中です。 ①と②は同じような事だと思います。 ③番目の方法で実現できれば、モジュールのソースをいじらなくても良くなるので、今後を考えるとかなりいい感じになるでしょう。