HTML Video Play

本文深入探讨了HTML5视频播放器的工作流程,包括如何在网页中调用视频播放器、播放器JNI关系在WebKit中的实现、HTML5VideoView的使用及其类型、定时器在HTML5VideoView中的应用,以及MediaPlayer类的时间变化事件处理。重点阐述了关键技术点,如播放器的创建、全屏播放、非全屏播放、时间更新机制和事件响应。

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

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)

 

转载于:https://www.cnblogs.com/elfylin/archive/2012/04/08/2437177.html

### 关于 VideoPlay 的技术实现与错误解决方案 #### 一、VideoPlay 技术实现的核心要点 HTML5 提供了 `<video>` 和 `<audio>` 标签用于多媒体文件的嵌入和播放功能。为了更好地控制视频或音频的播放行为,开发者通常会通过 JavaScript 调用 `play()` 方法来启动媒体资源的播放。 `video.play()` 和 `audio.play()` 均返回一个 Promise 对象[^1]。如果播放操作成功,则该 Promise 将被 resolve;反之,若由于某些原因(如浏览器策略限制),播放被拒绝,则 Promise 将被 reject 并抛出相应的异常。 以下是基于 HTML5 的基本实现方式: ```javascript const videoElement = document.querySelector('video'); // 使用 play() 方法尝试播放 videoElement.play().then(() => { console.log('视频已成功开始播放'); }).catch((error) => { console.error('视频播放失败:', error); }); ``` 上述代码片段展示了如何利用 `.play()` 方法并处理其可能的结果状态。当调用此方法时,需注意不同平台上的兼容性和限制条件[^4]。 #### 二、常见问题及其解决措施 ##### 1. **autoplay 属性失效** 部分现代浏览器出于用户体验考虑,默认禁用了自动播放功能,除非满足特定条件(例如用户交互触发)。即使设置了 `autoplay="true"` 属性,在许多情况下仍可能导致自动播放不起作用[^2]。 针对这一现象的有效应对策略包括但不限于以下几种: - 确保页面首次加载时不立即执行任何潜在干扰性的动作; - 结合用户的显式手势事件(比如点击按钮)后再发起实际的播放请求; 示例代码如下所示: ```html <video id="myVideo" muted playsinline></video> <button onclick="startPlayback()">Start Playback</button> <script> function startPlayback() { const myVideo = document.getElementById('myVideo'); myVideo.src = 'example.mp4'; myVideo.play().catch(error => { console.warn('未能完成自动播放', error.message); }); } </script> ``` 此处需要注意的是,对于 iOS 设备而言,“muted”属性通常是必需项之一才能顺利启用自动播放机制。 ##### 2. **网络连接中断引发的问题** 除了本地脚本逻辑之外,外部因素也可能影响到最终效果呈现。假如存在未捕获到的数据传输层面障碍,则同样会造成预期外的行为表现形式——即所谓的“无法正常加载”。 对此类状况可以采取下列建议予以排查修正: - 查阅开发工具中的 Console 面板是否存在关联性提示消息; - 审核所有涉及 HTTP 请求的部分是否均能顺利完成握手过程而无阻碍发生; - 如果发现有缺失的内容链接地址,请及时补充完整路径描述信息[^3]。 #### 总结说明 综上所述,围绕着 HMTL5 中有关音视频组件的操作过程中所遇到的各种挑战以及对应的处置手段进行了较为详尽地阐述分析。希望这些内容能够帮助您更高效地构建跨终端一致体验的应用程序产品! ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值