Android webkit HTML5 Video Play

本文详细解析了HTML5视频在网页中播放的工作流程,从HTMLMediaElement的play方法调用开始,一直到底层MediaPlayer的启动过程。同时介绍了WebKit中Java与JNI交互实现细节,包括不同类型的HTML5VideoView使用场景及其内部计时器的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

HTML Video Play


1.How will the HTML call video player in the webpage?

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()

 

2. player JNI relationship in Webkit

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

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 to use? i am finding out)

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)

转自
http://www.cnblogs.com/elfylin/archive/2012/04/08/2437177.html





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值