Android: エミュレータで動画を再生(2)

(「Android: エミュレータで動画を再生(1)」の続き)

エミュレータで動画を再生する場合は以下の手順を実行する。

1. SDカードイメージの作成
2. SDカードイメージファイル付きのAVDでエミュレータを起動
3. 動画ファイルをSDカードイメージ内にコピー

1. SDカードイメージの作成

Andorid SDKのインストールディレクトリの下のtools/mksdcardコマンドでSDカードイメージの作成する。

例) 2GBのSDカードイメージをsdcard-2GB.imgというファイル名で作成
 $ mksdcard 2000MB sdcard-2GB.img

2. SDカードイメージファイル付きのAVDでエミュレータを起動

1) Eclipse => [ウィンドウ]=>[Android SDK and AVD Manager]=> AVD選択 => [編集]
2) このウインドウ画面のSD Card: に作成したファイルのパスを指定する
3) [開始]をクリック

* Andorid SDKのインストールディレクトリの下のtools/emuratorコマンドにオプションとして指定して実行しても良い。

3. 動画ファイルをSDカードイメージ内にコピー

DDMSのファイル・エクスプローラーを利用します。(adbコマンドでもコピーできる)
転送先のディレクトリを選択し、[push a file onto the device]アイコンをクリックし、転送元のファイルを指定し、[OK]をクリックします。

次のようにコピーが行われます。

動画サイズ480x360のLinux-Pronunciation.flvをffmpegコマンドで256x192のLinux-Pronunciation-2.mp4に変換しました。
(動画サイズを小さくしないと、エミュレータではうまく再生できないようです。)
 $ ffmpeg -i Linux-Pronunciation.flv -s 256x192 Linux-Pronunciation-2.mp4

元の動画は以下のYoutubeからダウンロードしたもの。
http://www.youtube.com/watch?v=5IfHm6R5le0

requestFocus()について:

developer.android.comのサンプルコード(VideoViewDemo.java)に入っているrequestFocus()について。

http://developer.android.com/reference/android/view/View.html

public final boolean requestFocus ()
- Call this to try to give focus to a specific view or to one of its descendants. -

・requestFocus()を書かなくても動画は再生・表示される。
・requestFocus()を書かなくても、VideoViewのhasFocusもisFocusedもtrueになる。<= hierarchyviewerで確認
・setFocusable(false)を書くと、VideoViewのhasFocusもisFocusedもfalseになるが、それでも動画は再生・表示される。

私にはなぜrequestFocus()が入っているのかわからない。とりあえず、私のサンプルではrequestFocus()は外してあります。