-- framework/base/include/media/OMXPlayer.h
class OMXPlayer : public MediaPlayerInterface
{
public:
OMXPlayer(int nMediaType = 0);
virtual ~OMXPlayer();
virtual status_t initCheck();
virtual status_t setDataSource(const char *url, const KeyedVector *headers);
virtual status_t setDataSource(int fd, int64_t offset, int64_t length);
virtual status_t setVideoSurface(const sp& surface);
virtual status_t setVideoSurface(const android::sp& surface);
virtual status_t setVideoSurfaceTexture(const android::sp& surfaceTexture);
virtual status_t prepare();
virtual status_t prepareAsync();
virtual status_t start();
virtual status_t stop();
virtual status_t pause();
virtual bool isPlaying();
....
實做的大概是: frameworks/base/media/libmediaplayerservice/MediaPlayerService.cpp
..
實際上,這也是個空殼而已,真的 player 是在 prebuild .so 。在 device 下的 propriety/libs 下有一些 _omx_player_..
用較簡單的 Gallery 來看,啟動到最後,是 MovieView.java
這是一個 Activity,onCreate 後就直接播放影片了。
MovieView 只有實做三個 callback:
- onCreate : new MovieViewControl
- onPause : call MovieViewControl.onPause
- onResume : call MovieViewControl.onResume
- onWindowFocusChanged : call MovieViewControl.onResume/li>
Video 播放直接關聯到 VideoView 這個 layout,
在 res/layout/movie_view.xml 中放入一個 object:
<VideoView android:id="@+id/surface_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerInParent="true" />
然後在 source:
private final VideoView mVideoView;
.....
mVideoView = (VideoView) rootView.findViewById(R.id.surface_view);
取得 VideoView 元件後,就可以對 VideoView 操作:如果有時作幾個 需要的interface,就可以接著設定:
mVideoView.setOnErrorListener(this);
mVideoView.setOnCompletionListener(this);
設定要撥的file (uri),和 control.
mVideoView.setVideoURI(mUri);
mMediaController = new MediaController(context);
mVideoView.setMediaController(mMediaController);
然後,就可以開始播放:
mVideoView.start();
另外一個是在 development/samples/ApiDemos/src/com/example/android/apis/media/MeduaPlayerDemo_Video.java
還有有關 scanfile 的 sample code,在 development/samples 下也有...
development/samples/ApiDemos/src/com/example/android/apis/content/ExternalStorage.java
這一段code:
File path = Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES);
File file = new File(path, "DemoPicture.jpg");
....
....
// Tell the media scanner about the new file so that it is
// immediately available to the user.
MediaScannerConnection.scanFile(this,
new String[] { file.toString() }, null,
new MediaScannerConnection.OnScanCompletedListener() {
public void onScanCompleted(String path, Uri uri) {
Log.i("ExternalStorage", "Scanned " + path + ":");
Log.i("ExternalStorage", "-> uri=" + uri);
}
});
所以可以把 file path 丟到這裡scan 轉成 media Uri
?
最後拿 developement/sample 的 MediaPlayerDemo_Video.java 來測試。
原來是用 file path,改成用 scan 後的 Uri。
diff 是:
沒有留言:
張貼留言