WisW 发表于 2025-2-2 21:23:39

我最近在干什么:

本帖最后由 WisW 于 2025-2-2 21:35 编辑

也是当成博客用了, 乐


不管, 首先是(忽略我的塑料英语)


好吧, 确实太塑料了, 得改


一个开箱即用的状态检测页面, 很好用:kener

关键是为什么老的逻辑会挂: 最近它们更新了音频那块的逻辑
所有浏览器一样, edge和chrome都改掉了
本来我是通过强制修改响应的range, 比如你请求0-最后, 我就给你返回30,0000bytes来提高响应速度
但是新版本这个不行, 似乎加入了判断逻辑导致这个响应不会被接受
所以我不得不通过media source + blob url重新搞了一个, 手写了一下获取逻辑
b站用的m4a是mpeg 4家族的, 浏览器都有兼容, 也有现成库(mp4-box.js好用)
很重要的一点是: media source的append buffer方法的那个buffer必须和box(mpeg-4里面会有一堆box, 放不同的东西, 比如文件信息, 乐曲本体这种)对齐, 所以b站的请求你会发现range都是一些很奇怪的数字, 不是整数

因为线上平台用的格式肯定是可以分片加载的(你也不想b站上一个2h的视频必须全下载下来才能放吧), 所以很爽

说一说我在干什么吧: 这是一个播放音乐的网站
不用现有的大型音乐播放平台是因为
1. 乐曲资源分散, 新建一个可以整合所有资源(当然比如qq音乐要登陆有点难度)
2. 便于控制播放逻辑 (我们可以玩点高级的比如说给乐曲用机器学习建索引, 然后控制播放乐曲风格这类)
3. 音量统一(你也不想第一首曲子是蚊子叫, 第二首震碎耳膜吧)
4. 移动设备支持 (网页可以说是兼容性最好的了)
...

所以, 我有一个在vercel上的nextjs网站, 一个也在vercel上的api(拆出来比较好对吧)
另外一个在阿里云的api, 因为国外访问b站老慢了 (cors发力了, 不得不干)

然后接着上一个帖子说的密钥过期, 我给签了一个5年的
https://keyserver.ubuntu.com/pks ... erprint=on&op=index



乐子:

langyo 发表于 2025-2-3 09:46:53

我记得没错的话,B站不论如何下发的包装格式都是flv,以dash格式点播,然后拿到的编码格式可以是x264/vc8/av1

我之前有自己写过视频播放器库来着,这blob url说实话其实不是很优雅,动态拼接的片段要无缝衔接的问题一直搞不定(

WisW 发表于 2025-2-3 12:44:08

langyo 发表于 2025-2-3 09:46
我记得没错的话,B站不论如何下发的包装格式都是flv,以dash格式点播,然后拿到的编码格式可以是x264/vc8/a ...

media source extensions api把动态拼接搞定了,确实是个挺新的标准
其实我不关心视频流

langyo 发表于 2025-2-3 18:07:44

WisW 发表于 2025-2-3 12:44
media source extensions api把动态拼接搞定了,确实是个挺新的标准
其实我不关心视频流 ...
搞定了,但没完全搞定,因为拼接得要求是视频容器记录的时间戳必须是和源视频匹配上的,不能所有视频块都从 0 秒开始数

WisW 发表于 2025-2-3 19:09:53

langyo 发表于 2025-2-3 18:07
搞定了,但没完全搞定,因为拼接得要求是视频容器记录的时间戳必须是和源视频匹配上的,不能所有视频块都 ...

播放这一整段媒体的audio/video元素的src全程不会变,至少那个元素的时间戳和整个文件加载没区别,都是连续的
除非fmp4必须拼回一个mdat才能叫拼接(
页: [1]
查看完整版本: 我最近在干什么: