Chromium MediaPlayer原理分析初步

最近在修改一些问题,涉及到了网页播放视频的相关东西,分析了一下流程,把它记录下来,不然可能一个星期就忘掉了.
在chromium网页切换小屏至全屏的过程中,每一个视频url对应一个WebMediaPlayer(有唯一id), 从而对应一个Browser进程中的MediaPlayerBridge. HTMLMediaElement的src变化时都会调用到HTMLMediaElement::startPlayerLoad(),进而去创建一个新的WebMediaPlayer, 然后去load. 如果该Video已经处于全屏状态,则调用ChromeClient::enterFullScreenForElement保证新创建的WebMediaPlayer也进入全屏.
全屏时, 用的java MediaPlayer公用小屏时的MediaPlayer, 只是更换了MediaPlayer的Surface. 小屏时MediaPlayer的Surface为SurfaceTexure, 全屏是为ContentVideoView中的SurfaceView
播放完毕WebMediaPlayer会被release, 进而MediaPlayerBridge也会被release. 同时如果此时是全屏播放, 那么全屏id(fullscreen_player_id_, 保存在BrowserMediaPlayerManager中)会随着MediaPlayerBridge的消失而变成无效(赋值为kInvalidMediaPlayerId, BrowserMediaPlayerManager会使用fullscreen_player_id_来查找相应的MediaPlayerBridge,如果fullscreen_player_id_无效就说明此时没有全屏的播放器)
每次进入全屏时会将新的MediaPlayer的id设置为全屏的id, 这部分逻辑在BrowserMediaPlayerManager::OnEnterFullscreen(int player_id)中处理
 
简单说就是: 每个src对应一个WebMediaPlayer,也就对应一个MediaPlayerBridge. src变化后前一个的MediaP
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值