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 FFMPEG 开发】Android Studio 工程配置 FFMPEG ( 动态
  2. Android中切换屏幕方向时Activity生命周期函数执行情况分析
  3. Android 加载图片文件 函数
  4. Android为Menu添加item及响应函数
  5. android之检查service运行状态函数
  6. Android Studio 基础 之 一键快速实现一个类的 构造函数、getter
  7. Android Studio如何提示函数用法
  8. Android Studio怎样提示函数使用方法
  9. Android NDK编程实现终端功能(调用system函数)

随机推荐

  1. 关于Istio v1.0,你需要知道的事儿
  2. Spring简介及Spring Mvc简介
  3. SpringMVC_Day01
  4. tab切换
  5. Vue:1.Vue组件的注册与挂载流程,实例演示;
  6. 1. 为翻页按钮添加功能; 2. 当鼠标移出时
  7. QLC SSD在未来10年都不可能取代HDD?希捷对
  8. Nvidia关机后自动释放授权
  9. 0416作业-Vue组件及路由
  10. 三维模型修饰、单体化,水面修复,道路还原,悬