Embedded Media Field 備忘録 その2

プレイヤー選択方法

Embedded Media Player Configuration
⇒Embedded Video Field
⇒Custom URL Configuration に以下を追加 
(Support TypesとSupport Featureの間)

Player Select
Use JW FLV Media Player
Use Flow Player
Use Default Player

うまく動かない場合の回避策としてDefault Playerを残しておく、JW FLV Media PlayerやFlowPlayerが見つからない場合は、チェックボタンをグレイ表示にして、選択不可にしておけばなお良し。

JW FLV Media Playerは、flvmediaplayerモジュールを使用した場合と本体だけを導入してパスを直接指定もしくは、sites/pluginsまたは、modules以下に導入している場合は自動検出するようにする。(emfieldの仕様どおりとする)

flowplayerは本体だけを導入した、いわゆるパスを直接指定するケースには未対応とし、flowplayerモジュール使用のみとする。(emfieldの仕様どおりとする)

これらメニュー設定は、emvideo_zzz_custom_url_settings関数内をカスタマイズすればよさそうです。

それに併せて、それぞれのプレイヤー使用時にあわせたコード生成箇所を見直しする 
theme_emvideo_zzz_custom_url_embedded_video関数をカスタマイズすればよさそうです。

現状のオリジナルのままだと、flowplayerモジュールがあると強制でそのプレイヤーになります。
ない場合は、ファイルタイプでコードを生成しています。
mp4はQuickTimeとなり、flvはhttp://freevideocoding.com/のflvプレイヤです

それを以下の様に変更します。

JW FLV Player選択時

FLV Media Player モジュール有りの場合:

return theme('flvmediaplayer_render_player', $url, $params, $options); 

FLV Media Playerモジュール無しの場合:

①General Settingsで指定したパスのプレイヤ
②sites/plugins/以下を自動検出して見つかったプレイヤ
③modules以下を自動検出して見つかったプレイヤ
 

Flow Player選択時

オリジナルの一部を変更

return $output; 'style' => "width:{$width}px;height:{$height}px;background-image:url([画像のURL);", return theme('flowplayer', $config, 'emvideo-zzz-custom-url-embedded-video', $attributes);

Default Player選択時

従来のファイルタイプにより設定(変更なし)

return '<embed src="・・・・・・


これによりCustom URL 使用時のみプレイヤー選択が可能になる。

補足

各プレイヤーに渡す引数は、url,params,flashvarsになります。
変数名は任意で最低3つの変数を渡す必要があります。

それぞれ、 
url:プレイヤのファイル名、使用するプレイヤーのSWFファイル名(URIパス含む)となる。
params:パラメータ、objectタグの場合は、変数名がnameでその値がvalueとなる。embedの場合は、変数名が左辺で値が右辺となる。ただし、記述方法はプレイヤー側で生成することになるのでarrayで渡す。
flashvars:動画ファイル名(URIパス)、画像ファイル名(URIパス含む)やautostartなど。ただし、記述方法はプレイヤにより異なり、それぞれのプレイヤー側で処理させるため、arrayで渡す。

あとはswfobjectを使用するにチェックした場合パスの指定は、swfobject_apiがある場合と直接指定した場合とになる。
JW FLV Media Playerのケースと同じで、swfobect_apiモジュールがあればそのパスを使用する。

肝心のswfobject.jsを使用したコード埋め込みをどうするか?

youtubeプロバイダーで、swfobjectを使用にチェックすると"Sorry, you need to install flash to see this content."が表示され、プレイヤーが表示されない。
どこかおかしな箇所があるようだ。
ちなみにyoutube.iniでは、以下の通り

①?JW FLV Media Playerを使用にチェックし、かつflvmediapayerモジュールがある場合

・swfobject_apiモジュール有り、swfobject_apiモジュールを使用(※flvmediaplayer.module内)

 return theme('swfobject_api', $player_path, $params, $flashvars );

・swftoolsモジュール有り、swftoolsモジュールを使用(※flvmediaplayer.module内)

return swf($player_path, array('params' => $params, 'flashvars' => $flashvars));

それ以外は、(objectタグとembedタグを使用したもの)(※flvmediaplayer.module内)

return flvmediaplayer_build_embed_code_string($player_path, $params, $flashvars);

となる。(優先順位は上から)

②SWF Objectを使用にチェックしかつswfobject_apiモジュールがある場合、またはswfobjectのパスが設定されている場合

・swfobject_apiモジュール有り、swfobject_apiモジュールを使用

return theme('swfobject_api', $url, $params, $options, $id);

・それ以外(※swfobjectのパスが設定されていている場合)
swfobjectのパスをdrupalに追加し、swfobjectを使用したコードを生成。
※戻り値なし

drupal_add_js(variable_get('emfield_swfobject_location', ''));
    $output = <<<FLASH
<div id="> Sorry, you need to install flash to see this content. FLASH; return ''; 

戻り値がないのが気がかりだったので以下の様に修正、これでSWF Object使用にチェックをいれてもプレイヤが表示されるようになった。

return $output;

補足

・swfobject使用にチェックをつけなくても、flvmediaplayerモジュールとswfobject_apiモジュールがあれば、swfobjectが使われる。
※flvmediaplayerの仕様による
・②のそれ以外のケースは、swfobjectを使用にチェックしていなくても実行されそうである。
・General Settingsの項目に関する処理はemfield.damin.incとemfield.moduleで行っている。

懸案事項 

theme_emvideo_zzz_custom_url_embedded_video関数の戻り値は、埋め込み用コードになっています。 
他のプロバイダ設定でもいえることですが、記述方法に一貫性がなく何か理由があってそうしているのか、それとも各々別々の開発者がコーディングしているためなのか 
後者なら、この関数内だけでも同じにしたいところです。

Drupalバージョン

Drupal 6.x モジュール

モジュール

Embedded Media Field