青江的个人站

“保持热爱,奔赴星海”

  • 主页
  • 目录
  • 图床
  • 留言板
  • -关于我-
友链 搜索文章 >>

青江的个人站

“保持热爱,奔赴星海”

  • 主页
  • 目录
  • 图床
  • 留言板
  • -关于我-

为Hexo博客插入响应式Bilibili视频代码块


阅读数: 0次    2023-01-05
字数:1.1k字 | 预计阅读时长:4分钟

博客中有时候需要添加一些视频内容作为展示,一般使用上传到B站中的视频。

而仅仅将链接写在文中的方式太不优雅了,因此想要实现博客中包含一个可交互的视频播放模块的效果。

实现方式

首先需要去B站网页版视频链接的下方复制嵌入代码,以当时复刻自平衡莱洛三角的视频为例,如下图所示:

1

复制的内容为:

1
2
3
4
5
6
7
8
9
<iframe
src="//player.bilibili.com/player.html?aid=777262777&bvid=BV1E14y1g7tG&cid=951767237&page=1"
scrolling="no"
border="0"
frameborder="no"
framespacing="0"
allowfullscreen="true"
>
</iframe>

在Markdown文档中直接粘贴上面的代码,Typora会自动识别为可播放视频,生成博客后也可以正常播放,效果如下:

然而用上面的代码生成博客后视频的效果不太好,因为外链HTML没有与Hexo适配,虽然Typora中显示正常,但在网页上打开后,播放器界面靠左,而且窗口很小,并不优雅。

可以通过如下几个个操作来修改播放器样式,使得视频播放更优雅:

  • B站默认的嵌入代码是一个iframe,在iframe中添加css样式:

    1
    style="position: absolute; width: 100%; height: 100%; Left: 0; top: 0;"
  • 在原来的iframe外面嵌套一层div,div添加样式:

    1
    style="position: relative; width: 100%; height: 0; padding-bottom: 75%;"
  • 视频默认清晰度显示为360P,为改变默认播放清晰度,可以在src双引号中的内容最后添加&high_quality=1,可以改变视频播放时默认显示的视频清晰度。

    现在往iframe里面加&high_quality=1这个参数已经没办法调用高清晰度的b站外链视频了。

    加了这个参数之后,外链播放器上可能还会显示当前的视频清晰度是“720P”,但是目测实际上播放的视频只有最低的360P清晰度,也就是说上面显示的那个“720P”是假的。而且加了参数后外链播放器还无法切换到任意清晰度,一切换会显示“切换失败”或导致视频无法播放。

    目前没有找到替代的方法,看后续这个BUG会不会被修复。

代码修改后如下:

1
2
3
4
5
6
7
8
9
10
11
12
<div style="position: relative; width: 100%; height: 0; padding-bottom: 75%;">
<iframe
src="//player.bilibili.com/player.html?aid=777262777&bvid=BV1E14y1g7tG&cid=951767237&page=1&high_quality=1"
scrolling="no"
border="0"
frameborder="no"
framespacing="0"
allowfullscreen="true"
style="position: absolute; width: 100%; height: 100%; Left: 0; top: 0;"
>
</iframe>
</div>

如果你也想在Hexo博客中插入响应式Bilibili视频代码块,可以直接复制上面这段代码,将其中的src双引号中&high_quality=1前的内容替换为第一步复制的嵌入中src中的内容,然后粘贴到Markdown文件中即可。

不过粘贴上面的代码时在Typora中并不能直接进行播放,会而用Hexo推送后博客中可以正常播放,效果如下:

2024.10.09 Typora最新版本V1.9.5,视频已可以显示,但视频部分相对于整体的视频块较小,不能填充完整。总的来说还是有点问题,看后续会不会更新解决。

原理

  • iframe本身不可自动伸缩

  • iframe宽度和高度设置为100%后,会尽可能的填充满它的父级元素

  • 所以在iframe外部嵌套一个div,只要这个div根据页面大小变化按比例变化,就可以实现了

  • iframe使用绝对位置(position: absolute), 默认与父级div的左上角对齐

  • div使用相对位置,并且用padding-bottom来计算相对父元素的宽度(父元素宽度的75%作为div的高度),100:75则为4:3

参考链接

  • Hexo博客如何加入B站视频/How to add bilibili shared video in Hexo - 简书 (jianshu.com)
  • 如何在Hugo/Hexo博客中插入响应式Bilibili视频代码块_SimZhou的博客-CSDN博客
  • 引用B站嵌入代码如何提高清晰度? - 知乎 (zhihu.com)
  • hexo博客添加bilibili外链视频 | 烟雨陌上云霄 (yymsyx.com)
  • CSS position 属性 (w3school.com.cn)
  • 响应式web布局中iframe的自适应 - royalrover - 博客园 (cnblogs.com)
本文来源: 青江的个人站
本文链接: https://hanqingjiang.com/2023/01/05/230105_bilibiliForBlog/
版权声明: 本作品采用 CC BY-NC-SA 4.0 进行许可。转载请注明出处!
知识共享许可协议
赏

谢谢你请我喝可乐~

支付宝
微信
  • Blog

扫一扫,分享到微信

微信分享二维码
【Android学习笔记】一、Android初体验
2023新年快乐!
  1. 1. 实现方式
  2. 2. 原理
  3. 3. 参考链接
© 2021-2025 青江的个人站
晋ICP备2024051277号-1
powered by Hexo & Yilia
  • 友链
  • 搜索文章 >>

tag:

  • 生日快乐🎂
  • 新年快乐!
  • 小技巧
  • Linux
  • 命令
  • 语录
  • 复刻
  • Blog
  • Notes
  • Android
  • C
  • FPGA
  • Homework
  • MATLAB
  • Server
  • Vivado

  • 引路人-稚晖
  • Bilibili-稚晖君
  • 超有趣讲师-Frank
  • Bilibili-Frank