1.How will the HTML call video player in the webpage? (from dom parsing to mediaplayer)

HTMLMediaElement::updatePlayState()->
HTMLMediaElement::m_player->play()->
MediaPlayer.cpp(in webkit)->play()//(this file use factory create player)->
MediaPlayerPrivateInterface->play()->
MediaPlayerPrivateAndroid.play()->android/webkit/HTML5VideoViewProxy.play()->
VideoPlayer.play(HTML5VideoViewProxy.java)->
HTML5VideoView.start()/HTML5VideoFullScreen/HTML5VideoInline.start()->
MediaPlayer.start(MediaPlayer.java)->(android_media_MediaPlayer.cpp)._start()

路径

external/webkit/Source/WebCore/platform/graphics/MediaPlayer.h

external/webkit/Source/WebCore/platform/graphics/MediaPlayer.cpp

external/webkit/Source/WebKit/android/WebCoreSupport/MediaPlayerPrivateAndroid.cpp
external/webkit/Source/WebCore/platform/graphics/android/MediaPlayerPrivateAndroid.h


2. player JNI relationship in Webkit

MediaPlayerPrivateAndroid.cpp 's jni class
"android/webkit/HTML5VideoViewProxy" and "android/webkit/HTML5Audio"

父类MediaPlayerPrivate中定义了一个

struct MediaPlayerPrivate::JavaGlue {
jobject m_javaProxy;
jmethodID m_play;
jmethodID m_teardown;
jmethodID m_seek;
jmethodID m_pause;
// Audio
jmethodID m_newInstance;
jmethodID m_setDataSource;
jmethodID m_getMaxTimeSeekable;
// Video
jmethodID m_getInstance;
jmethodID m_loadPoster;
};

在子类MediaPlayerVideoPrivate 和MediaPlayerAudioPrivate 构造函数中找到java函数记录到这个glue结构体中

There three classes in "MediaPlayerPrivateAndroid.cpp"

"MediaPlayerPrivate" as basic class;

"MediaPlayerVideoPrivate" as subclass for "android/webkit/HTML5VideoViewProxy"

"MediaPlayerVideoPrivate" as subclass for "android/webkit/HTML5Audio"

3. HTML5VideoView

in "VideoPlayer" (HTML5VideoViewProxy.java) we use "HTML5VideoView" for play.

how many kinds of HTML5VideoView are used?

a."HTML5VideoView" as basic class

b."HTML5VideoFullScreen" is used for full screen playing

c."HTML5VideoInline" is used when it's not full screen.

4. Timer in HTML5VideoView

a.HTML5VideoView.start();

mTimer.schedule(new TimeupdateTask(mProxy), TIMEUPDATE_PERIOD, TIMEUPDATE_PERIOD);

b. in TimeupdateTask's run()

        public void run() {            mProxy.onTimeupdate();        }

c. in HTML5VideoViewProxy.java

    public void onTimeupdate() {        sendMessage(obtainMessage(TIMEUPDATE));    }

d. in HTML5VideoViewProxy.java

nativeOnTimeupdate(msg.arg1, mNativePointer);

e. finally MediaPlayerPrivateAndroid.cpp

static void OnTimeupdate(JNIEnv* env, jobject obj, int position, int pointer){    if (pointer) {        WebCore::MediaPlayerPrivate* player = reinterpret_cast<WebCore::MediaPlayerPrivate*>(pointer);        player->onTimeupdate(position);    }}

f. HTMLMediaElement::mediaPlayerTimeChanged (why is this, i am trying to find out)


Fromhttp://blog.csdn.net/elfylin/article/details/7455999

更多相关文章

  1. android reboot重启分析
  2. Android(安卓)NDK 实现视音频播放器源码
  3. Android(安卓)Activity设置全屏
  4. Android(安卓)Log统一管理类
  5. Android(安卓)dp,sp,pt,in,mm,px换算
  6. Android(安卓)GPS学习笔记—HAL实现
  7. Android(安卓)Power Management
  8. android入门:zxing学习笔记
  9. 箭头函数的基础使用

随机推荐

  1. Android(安卓)SDK腾讯镜像
  2. Android(安卓)相机或者相册上传头像
  3. android直接读取数据库文件
  4. Android(安卓)百度地图定位指针(系列2)
  5. 【Android】loadData与loadDataWithBaseU
  6. Android(安卓)System Bring Up
  7. 智能手机软件平台 Android(安卓)VS iPhon
  8. Android(安卓)目录选择器实现
  9. Building Android(安卓)notifications 2.
  10. Android(安卓)之获取图片及视频缩略图