能否通过视频元素的Blob URL匹配到对应的源.m3u8播放地址?
问题
我用Chrome浏览器扩展解析一个通过.m3u8 URL流式播放视频的网页,想知道能不能通过视频元素里的Blob URL匹配到对应的源.m3u8 URL。
视频元素代码示例:
<video class="jw-video jw-reset" tabindex="-1" disableremoteplayback="" src="blob:https://www.example.com/c15f59e0-872f-43c0-9811-ef907362ef2b" webkit-playsinline="" playsinline="" id="yui_3_17_2_1_1731598374038_37"> </video>
同时有几个候选的.m3u8 URL:
https://souvod.bynetcdn.com/vod/smil:vod/example/PRV2/se8SHJBRO2/App/se8SHJBRO2_10.smil/playlist.m3u8?md5=1eIJ0a3gmKuZsbXj2GIA7g&expires=1731653039https://souvod.bynetcdn.com/vod/smil:vod/example/PRV2/T9fPkHmcGS/App/T9fPkHmcGS_10.smil/chunklist_b400000.m3u8?md5=yoWmdzXdGRVlOvJQjsqVwg&expires=1731653048https://souvod.bynetcdn.com/vod/smil:vod/openu/PRV2/se8SHJBRO2/App/se8SHJBRO2_10.smil/chunklist_b400000.m3u8?md5=vq7cq3DmDwbN2YlwGx0zpA&expires=1731653742
解答
- 直接匹配行不通:Blob URL是浏览器生成的本地临时链接,仅在当前会话有效,本身不带任何指向源m3u8的关联信息,没法从
blob:xxx字符串里直接解析出对应的m3u8地址。 - 可行的关联思路:
- 拦截网络请求:用Chrome扩展的
webRequest或devtools.networkAPI,拦截页面所有m3u8请求,记录每个请求的响应和后续媒体加载的关联关系。 - 跟踪MediaSource对象:m3u8流式播放一般依赖MediaSource API,Blob URL会绑定到MediaSource实例上。可以监听页面中MediaSource的创建、源缓冲区添加等事件,把MediaSource和对应的m3u8请求关联,再匹配到视频元素的Blob URL。
- 分析播放器实例:示例里用的是JW Player,直接通过页面中的JW Player实例就能获取它加载的媒体源信息,拿到对应的m3u8 URL,不用绕Blob URL这一步。
- 拦截网络请求:用Chrome扩展的
- 候选URL验证方法:要从给出的3个候选里找对应源,可以:
- 检查
expires参数是否在视频播放的有效时间范围内; - 对比URL里的唯一标识(比如
se8SHJBRO2),看是否和页面其他资源的标识一致; - 请求候选URL,查看返回的m3u8内容是否包含当前视频的分片信息,再和播放时的分片请求匹配。
- 检查
内容的提问来源于stack exchange,提问作者Ceznex
相关产品推荐
相关产品推荐

