com.jblend.media
クラス MediaPlayer

java.lang.Object
  |
  +--com.jblend.media.MediaPlayer
直系の既知のサブクラス:
JpegPlayer, KaraokePlayer, MngPlayer, PngPlayer, SmafPlayer, SmdPlayer

public abstract class MediaPlayer
extends java.lang.Object

このクラスはすべてのメディアプレイヤーの基底となる抽象クラスです。

メディアデータ、およびメディアリソースを総称してメディアと呼びます。 また、MediaPlayerクラスのインスタンスをメディアプレイヤーと呼びます。

メディアプレイヤークラスはJPEG、PNG、MNG、SMAF、SMD(着信メロディ)などのメディア種別ごとに定義されます。個々のメディアプレイヤーは必ずMediaPlayerクラスを継承して作成します。

Javaアプリケーションは再生するメディアに対応したプレイヤークラスのインスタンスを生成し、メディアの設定、再生、一時停止、再開などのためのメソッドで使用します。メディアの再生開始、一時停止、再生終了に同期したイベントを待ち受けるためには、MediaPlayerListenerオブジェクトを登録します。


1. メディアプレイヤーの使用法

メディアプレイヤーはMIDPのCanvasやScreeenなどの画面表示用クラスとは独立に動作します。メディアプレイヤーを生成し再生させると、「現在のDisplayable」とは関係なくメディアの再生画面が表示されます。たとえばCanvasの派生クラスを画面表示している状態でメディアプレイヤーを再生させると、Canvasの派生クラスで描画した画面はメディアの再生画面で上書きされます。逆にメディアプレイヤーを再生開始したのちに、何らかのCanvas派生クラスでの画面描画を行うとメディアプレイヤーの表示領域は上書きされます。メディアが動画であればメディアプレイヤー領域はさらに画像が更新されます。

したがって、メディアプレイヤーの表示領域以外に何らかのグラフィックスを描画するには、プログラマがメディアプレイヤーの表示領域とCanvas派生クラスでの描画内容について画面上の位置関係を考慮しなくてはなりません。

また、Canvasはメディアプレイヤーの再生とは関係なく、ローレベルイベント(キーイベント)やコマンドイベントをMIDletに通知します。メディアプレイヤーを再生させているときに、ユーザ操作によりメニュー画面が表示されるときには、メディアプレイヤーの再生がメニュー表示を阻害しないように配慮しなくてはなりません。具体的には、たとえばCanvasのhideNotify()およびshowNotify()の実装において、メディアプレイヤーの一時停止または再開などの制御が必要となります。

2. メディアプレイヤーの生成・メディアの設定

メディアデータ・メディアプレイヤーの生成

MIDletは、再生するメディアの種類を既知の情報としてプログラムされることとします。すなわちMIDletはメディアデータをサポートするメディアデータ保持クラスとMediaPlayer派生クラスのインスタンスを明示的に生成しなくてはなりません。具体的には、たとえば再生するメディアデータフォーマットがSMAFであれば、SmafDataオブジェクトとSmafPlayerオブジェクトをコンストラクタで生成します。生成時にはメディアデータを指定します。SmdData、JpegData、PngData、MngData、およびSmafData クラスのコンストラクタは、メディアデータをバイト配列で与えるものとリソースファイル名で指定するもの2種類が用意されています。

メディアプレイヤーにsetData()メソッドでメディアデータを設定します。setData()メソッドはバイト配列を設定するものと、メディアの種類に対応したインスタンスを設定するもの2種類が用意されています。たとえば、SmafPlayerにはSmafDataオブジェクトをパラメータとして指定するsetData()メソッドが用意されています。

メディアサイズの取得

画像を含むメディアのメディアデータ保持クラスではgetWidth()およびgetHeight()でそれぞれメディアの幅と高さを取得可能です。また、画像を含むメディアのプレイヤーでデータが設定されていると、MediaImageOperatorインタフェースのgetMediaWidth()、およびgetMediaHeight()メソッドでそれぞれメディアの幅と高さを取得することができます。

メディアが音声データのみからなり、画像データを含んでいない場合は、サイズ取得のためのメソッドは存在しません。再生時は画面上では何も表示されず、音声だけが再生されることになります。

メディア表示位置の設定

メディアプレイヤー は、ソフトキー領域を除いた端末の表示画面の任意の領域に配置できます。メディアプレイヤークラスのフィールド値REAL_WIDTH、REAL_HEIGHT は、それぞれこの表示領域の幅と高さを表します。

メディアを表示画面にどのように表示するかをMediaImageOperatorインタフェースのsetOrigin()メソッドとsetBounds()メソッドで設定します。setOrigin()ではパラメータoffset_xとoffset_yでメディアの左上を原点としたプレイヤー表示領域の切り出し位置を指定します。setBounds()では表示画面中でのプレイヤー表示領域(位置:x,y、幅と高さ:width, height)を指定します 。図1にこの様子を示します。

media_player_pos_jp.gif

図1. メディア表示領域の指定

メディアのサイズは表示画面サイズに対して大きいことも小さいこともあります。図2にメディアのサイズとプレイヤーのサイズとの大小関係に応じた3種類の設定例を示します。

media_player_pos_sample_jp.gif

図2. メディアプレイヤー切り出し位置設定

  1. メディアサイズが表示画面より大きな場合、メディアの部分矩形領域を表示するように指定できます。図の例ではoffset_xおよびoffset_yはともに正の値で指定します。

  2. メディアサイズが実画面より小さい場合、メディア全体を表示画面の中に配置できます。図の例ではoffset_xおよびoffset_yはともに負の値で指定します。

  3. メディアの幅のみが表示画面の幅より大きい場合、図示したようにメディア中の矩形領域を表示する領域として指定できます。図の例ではoffset_xの値は正、offset_yの値は負の値で指定します。メディアの高さのみが表示画面の高さより大きい場合も同様に指定できます。

メディアの配置位置は任意です。図中の2)のような場合でも、メディアの全領域がプレイヤー領域に入るように指定しなくても問題ありません。プレイヤー領域中にあるメディアの部分が表示されます。

プレイヤー表示領域の切り出し位置、および表示画面中でのプレイヤー表示領域の設定値はメディアプレイヤーのメソッドで取得可能です。それぞれのパラメータに対する取得メソッドを表1に示します。

表1. 表示位置取得メソッド
パラメータ メソッド
プレイヤー表示領域の切り出し位置 offset_x getOriginX()
プレイヤー表示領域の切り出し位置 offset_y getOriginY()
プレイヤー表示領域の表示画面中での位置 x getX()
プレイヤー表示領域の表示画面中での位置 y getY()
プレイヤー表示領域の表示画面中での幅 width getWidth()
プレイヤー表示領域の表示画面中での高さ height getHeight()

MIDLetはデータの内部構造に関して理解する必要はありませんが、MediaPlayerオブジェクトがそのメディアデータを再生できない可能性を考慮する必要があります。再生できない場合は、メディアを設定した時点に例外がスローされます。

3. メディアの再生

再生・停止

メディアプレイヤーにメディアが設定されると、メディアの再生が可能な状態になります。ただし、この状態ではメディアはまだ表示されていません。メディアプレイヤーのplay()メソッドを呼び出すと、再生が開始され、メディア中に画像データが埋め込まれている場合は、画面上に表示されます。play()メソッドでは下記のバージョンが用意されています。

繰り返しを指定した場合は、メディアプレイヤーは、所定の再生を終了するか、停止、または一時停止を指示されるまで再生を繰り返します。ただし、メディアが静止画であった場合は繰り返しを要求しても一度だけの再生となります。

停止はstop()メソッドで、一時停止はpause()メソッドで行います。 再生中もsetOrigin()、およびsetBounds()で表示位置関連の変更が可能です。

一時停止・再開

再生中のメディアプレイヤーに対して、pause()メソッドで一時停止させることができます。再開は、resume()メソッドで行います。

一時停止中のメディアプレイヤーを停止するにはstop()メソッドを呼び出します。

エラー発生の検出

再生中のメディアプレイヤーに何らかのエラーが発生した場合、メディアプレイヤーはイベントを発生してエラー状態に遷移します。MediaPlayerListener(後述)によってイベントを検知して、かつgetState()メソッドによって状態を把握するようにしてください。そして、エラー状態に遷移したことを検出した場合はstop()メソッドによってエラー状態を解消する必要があります。エラー状態を解消すると、メディアプレイヤーは停止状態になり、別のメディアデータを設定するなどの操作が可能になります。

注意事項:

4. イベントの待ち受け

MediaPlayerListenerは、メディアプレイヤーが発生するイベントを待ち受けるリスナを実装するためのインタフェースです。MediaPlayerListenerを実装したリスナは、メディアプレイヤークラスのaddMediaPlayerListener()メソッドでメディアプレイヤーに登録します。MediaPlayerListenerリスナのメソッドは下記のように呼び出されます。

MediaPlayerListenerのplayerRepeated()およびplayerStateChanged()にはイベントが発生したメディアプレイヤーのインスタンスが指定されます。playerStateChanged()が呼び出されたときは、指定されたインスタンスのgetState()メソッドによってその時点のメディアプレイヤーの状態を問い合わせることができます。playerStateChanged()が呼び出された時点でgetState()が返す状態を表2に示します。

表2. メディアプレイヤー状態
状態 意味
MediaPlayer.NO_DATA データ未設定
MediaPlayer.PLAYING 再生中
MediaPlayer.PAUSED 一時停止中
MediaPlayer.READY 停止中
MediaPlayer.ERROR エラー発生により停止中

addMediaPlayerListener()でメディアプレイヤーに設定したリスナは、removeMediaPlayerListener()で登録解除することができます。

注意事項:

下記の場合はイベントは発生されません。

常駐Javaアプリケーションにおける注意事項

Javaアプリケーションが常駐型として実行 されていて、再生中のメディアが音声を含んでいるとき、音声着信、SMS着信、またはスケジュールアラームが発生するとメディアプレイヤーは停止してMediaPlayerListenerリスナのplayerStateChanged()が呼び出されます。その後、ネイティブシステムがユーザに着信やアラーム通知を行います。このときメディアプレイヤーを制御しようとすると例外が発生します。これらの詳細についてはResidentMIDletクラスの説明を参照してください。


フィールドの概要
static int ERROR
          エラー停止中 = 0x10000
static int NO_DATA
          再生データなし = 0
static int PAUSED
          一時停止中 = 3
static int PLAYING
          再生中 = 2
static int READY
          再生可能な状態 = 1
protected static int REAL_HEIGHT
          実画面の高さ
protected static int REAL_WIDTH
          実画面の幅
 
コンストラクタの概要
MediaPlayer()
           
 
メソッドの概要
abstract  void addMediaPlayerListener(MediaPlayerListener l)
          MediaPlayerListenerを登録する。
protected static void addNativeMediaEventDispatcher(com.jblend.io.j2me.events.NativeMediaEventDispatcher dispatcher)
          NativeMediaEventDispatcherを登録する。
abstract  int getState()
          プレイヤーの状態を取得する。
abstract  void pause()
          一時停止する。
abstract  void play()
          再生する。
abstract  void play(boolean isRepeat)
          繰り返し指定つきで再生する。
abstract  void play(int count)
          繰り返し回数を指定して再生する。
abstract  void removeMediaPlayerListener(MediaPlayerListener l)
          MediaPlayerListenerを登録解除する。
abstract  void resume()
          再開する。
abstract  void setData(MediaData data)
          データを設定する。
abstract  void stop()
          停止する。
 
クラス java.lang.Object から継承したメソッド
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

フィールドの詳細

NO_DATA

public static final int NO_DATA
再生データなし = 0

READY

public static final int READY
再生可能な状態 = 1

PLAYING

public static final int PLAYING
再生中 = 2

PAUSED

public static final int PAUSED
一時停止中 = 3

ERROR

public static final int ERROR
エラー停止中 = 0x10000

REAL_WIDTH

protected static final int REAL_WIDTH
実画面の幅

REAL_HEIGHT

protected static final int REAL_HEIGHT
実画面の高さ
コンストラクタの詳細

MediaPlayer

public MediaPlayer()
メソッドの詳細

setData

public abstract void setData(MediaData data)
データを設定する。
パラメータ:
data - 再生したいデータ

play

public abstract void play()
再生する。

play

public abstract void play(boolean isRepeat)
繰り返し指定つきで再生する。
パラメータ:
isRepeat - 繰り返しの有無

play

public abstract void play(int count)
繰り返し回数を指定して再生する。
パラメータ:
count - 繰り返し回数

stop

public abstract void stop()
停止する。
次にplayした場合、先頭から再生されます。

pause

public abstract void pause()
一時停止する。

resume

public abstract void resume()
再開する。 一時停止している位置から再開します。

getState

public abstract int getState()
プレイヤーの状態を取得する。
戻り値:
int - 現在の状態

addMediaPlayerListener

public abstract void addMediaPlayerListener(MediaPlayerListener l)
MediaPlayerListenerを登録する。
パラメータ:
l - 登録したいMediaPlayerListener

removeMediaPlayerListener

public abstract void removeMediaPlayerListener(MediaPlayerListener l)
MediaPlayerListenerを登録解除する。
パラメータ:
l - 登録解除したいMediaPlayerListener

addNativeMediaEventDispatcher

protected static void addNativeMediaEventDispatcher(com.jblend.io.j2me.events.NativeMediaEventDispatcher dispatcher)
NativeMediaEventDispatcherを登録する。
パラメータ:
dispatcher - 登録するNativeEventDispatcher