作为浏览器,访问网络资源,除了文本网页,再就是音视频资源了。随着互联网的发展,视频资源除了提供让用户学习、娱乐的资源外,在当今时代,还演示着传播实时咨讯的角色。
趁着清明节,用一到两个blog,来说说chromium对于视频播放这块逻辑。
对于WebKit(chromium维护的版本更名为blink),解析到Video标签、Audio 标签时,会分别创建HTMLVideoElement和HTMLAudioElement。这两个类有共同的父类HTMLMediaElement。
这篇blog,先来介绍下对于视频播放MediaPlayer相关逻辑。下个blog来说说对于Video标签的MediaControls。
关于MediaPlayer。实际上是个概念。在WebKit中,有MediaPlayer这个对象,且在content api中有对应的平台实现,WebMediaPlayerAndroid。而对于Android系统来讲,有个播放器内核。即MediaPlayer的具体实现。在android系统源码的Java层,有MediaPlayer.java来暴露相关的接口。
一. MediaPlayer(blink中)的创建。
JS invoke(网页JS调用)
HTMLMediaElement::load()
HTMLMediaElement::prepareForLoad()
HTMLMediaElement::createMediaPlayer()
在函数:HTMLMediaElement::createMediaPlayer()中,有代码:
m_player = MediaPlayer::create(this);
这里的MediaPlayer。是blink中的概念MediaPlayer 。这个类在文件platform/graphics/media/MediaPlayer.h中。
关于MediaPlayer类,在blink中还有个子类:WebMediaPlayerClientImpl。
==========================================================
二. WebMediaPlayer的创建
说到上面的逻辑,但是我们还没有看到对系统MediaPlayer的调用。接着我们来看看对系统MediaPlayer调用这块。