杰者的备忘录 jiezhe.net

微信小程序video组件调用腾讯视频的解决方案

最近在折腾微信小程序,需要引用一些腾讯视频网站上的视频去播放,很多地方都是教人用F12抓一个mp4地址,这根本不行,因为那个地址是动态的,大概一两个小时就失效了。

翻了微信小程序的官方社区这方面的问题只有人提问,没有人有正确的回答(包括官方人员也都不懂),那就只能自己研究了。还好不是很难,折腾了一晚上终于搞定了。

 

1、首先我们从腾讯视频网站上找到一个视频网页的连接,格式是这样的

https://v.qq.com/x/page/b0136et5ztz.html

上面我标红色的是视频的vid

2、我们把vid放到接口地址上变成 

http://vv.video.qq.com/getinfo?vids=b0136et5ztz&platform=101001&charge=0&otype=json

3、直接访问返回的是

QZOutputJson={"dltype":1,"exem":0,"fl":{"cnt":2,"fi":[{"id":100701,"name":"msd","lmt":0,"sb":1,"cname":"流畅;(180P)","br":29,"drm":0,"video":1,"fs":35776912,"sl":1},{"id":2,"name":"mp4","lmt":0,"sb":1,"cname":"高清;(480P)","br":34,"drm":0,"video":1,"fs":74129447,"sl":0}]},"hs":0,"ip":"119.137.195.73","ls":0,"preview":1186,"s":"o","sfl":{"cnt":0},"tm":1503504934,"vl":{"cnt":1,"vi":[{"br":29,"ch":0,"cl":{"fc":0,"keyid":"b0136et5ztz.100701"},"ct":21600,"drm":0,"dsb":0,"fmd5":"87d7d2ef15f55a456bcdb359dd580795","fn":"b0136et5ztz.m701.mp4","fs":35776912,"fst":5,"fvkey":"EBB1F5C7B5100A3DA80802119E3FF9D0AAE3DA6670594D507B02AD489CF21D2868B0803B76F7434CE51B5C70D75554D68ED24A49EE3DE4791E0BA58444A77756FA7CBC6FB1B3E579F44F87AFB1CB79E8522A48576A4949037A5EDC1C842A9EF7536E090EBD018BB2","head":0,"hevc":0,"iflag":0,"level":0,"lnk":"b0136et5ztz","logo":1,"mst":8,"pl":null,"share":1,"sp":0,"st":2,"tail":0,"td":"1186.92","ti":"解密潮汕多神信仰","type":3,"ul":{"ui":[{"url":"http://113.105.167.156/vhot2.qqvideo.tc.qq.com/AuRJoSSIabzpOb1RsXSviFl-nYwRDSZoFU5OpwBhfrAk/","vt":200,"dtc":0,"dt":2},{"url":"http://113.105.167.155/vhot2.qqvideo.tc.qq.com/AuRJoSSIabzpOb1RsXSviFl-nYwRDSZoFU5OpwBhfrAk/","vt":200,"dtc":0,"dt":2},{"url":"http://113.105.167.154/vhot2.qqvideo.tc.qq.com/AuRJoSSIabzpOb1RsXSviFl-nYwRDSZoFU5OpwBhfrAk/","vt":200,"dtc":0,"dt":2},{"url":"http://video.dispatch.tc.qq.com/62098754/","vt":0,"dtc":0,"dt":2}]},"vh":272,"vid":"b0136et5ztz","videotype":27,"vr":0,"vst":2,"vw":480,"wh":1.7647059,"wl":{"wi":[]}}]}}; 

4、我们把前面的QZOutputJson=跟最后的 ; 过滤掉,得到一个json字符串了。解析它变成json对象,然后把标红的三个部分组合一下,顺序是 

url + fn + '?vkey=' + fvkey 

例如上面这串,组合下来就是 

http://113.105.167.156/vhot2.qqvideo.tc.qq.com/AuRJoSSIabzpOb1RsXSviFl-nYwRDSZoFU5OpwBhfrAk/b0136et5ztz.m701.mp4?vkey=EBB1F5C7B5100A3DA80802119E3FF9D0AAE3DA6670594D507B02AD489CF21D2868B0803B76F7434CE51B5C70D75554D68ED24A49EE3DE4791E0BA58444A77756FA7CBC6FB1B3E579F44F87AFB1CB79E8522A48576A4949037A5EDC1C842A9EF7536E090EBD018BB2

这个地址就可以直接放在小程序的video组件里面播放了。


注意:由于腾讯视频的地址vkey是定时变化的,所以肯定是不能写死在程序里面的。必须走后端照着上面写的方式抓取接口,过滤掉无用字符串,解析json,组合地址,通过接口返回给小程序video组件的src即可正常播放。

当然如果你的后端解析json比较麻烦的(例如古老的asp ^_^),可以把第2步最后的json去掉或者改成xml,直接解析xml也一样。

Tags:

发布: admin 分类: 微信 评论: 21 浏览: 5271
留言列表
来宾
来宾 牛逼
来宾
来宾 现在之歌方法是不是不行了,提示403错误!!!
admin
admin 上面已经说得很清楚了,“注意:由于腾讯视频的地址vkey是定时变化的,所以肯定是不能写死在程序里面的。必须走后端照着上面写的方式抓取接口,过滤掉无用字符串,解析json,组合地址,通过接口返回给小程序video组件的src即可正常播放。”现在距离我发这个博文都过去好几个月了,我演示最终拼接完成的例子的vkey早过期了,必须通过1、2、3步拿到新的vkey去拼接得到最新的地址。只要第2步的地址能够正常返回第3步提到的json,这个方案就一直有效。
来宾
来宾 怎么抓取vkey接口?
来宾
来宾 找你的后端程序员看这篇博文去实现
来宾
来宾 按照博主的步骤,可以获取到正常的播放地址
来宾
来宾 还有一个问题,就是ul->ui 数组里,不一定每次都能拿到想要的url。
来宾
来宾 你应该检查一下你的程序是否有问题,直接拿第二步那个实例地址在浏览器刷新了几百次,每次都会返回url
来宾
来宾 盗链你确定官方不会追究吗?
来宾
来宾 首先,这个接口是腾讯提供的,其次,你的小程序最终的发布上线是经过腾讯人工审核的,审核通过代表腾讯是认可你的小程序一切功能是符合规定的。再者你的公司是得大到什么程度值得腾讯去追究你?
来宾
来宾 博主厉害,就是不知道能用多久
来宾
来宾 厉害厉害
来宾
来宾 厉害厉害.牛逼牛逼
来宾
来宾 牛,谢谢了,非常赞
来宾
来宾 转载一下,谢谢
来宾
来宾 大家知不知道每一个链接的有效时期大概多久?肯定得比视频时间长,是不是有24小时?
来宾
来宾 没有那么长的。一般一两个小时,研究这个有效期没有意义
来宾
来宾 这个地址每次只能播放一分多种就停下来不动了。
来宾
来宾 大神,这个方法得到的地址,小程序是可以调用,但是是标清的,如果要用高清,超高清效果,需要加什么参数呢?
admin
admin 以上面这个3的json为例子,你看到"ui"后面有四组URL了没?有"vt":106跟"vt":116两种,就是代表不同清晰度的,你可以自己组合一下。
来宾
来宾 url + fn + '?vkey=' + fvkey +'&vt=116'
大神,是不是这样组合呀?我是大白,不是太懂。谢谢大神耐心指教。
来宾
来宾 N个组合,没什么用
admin
admin 抱歉,怪我没有仔细测试,凭感觉瞎说,经过测试跟后面几组URL无关,这个接口是抓包微信公众号引用腾讯视频的页面而来的,而微信公众号引用的腾讯视频只能支持高清480P,而不支持超高清,超高清需要去抓包腾讯视频APP,刚才抓了一下,参数比较复杂,需要花大量时间去研究,暂时放弃了。
来宾
来宾 嗯。如以后有好消息,麻烦发上来哦。谢谢。
来宾
来宾 大神,http://vv.video.qq.com 不在request 合法域名怎么办?
来宾
来宾 在小程序后台添加https://vv.video.qq.com 作为信任域名
来宾
来宾 小程序配置不了这个业务域名吧vv.video.qq.com 业务域名需经过ICP备案这个域名不是自己的域名 怎么设置啊
来宾
来宾 大神,为什么我request的返回和在浏览器中查看的不一样??
来宾
来宾 大神,是不是现在不行了?403错误。是抓取的。
来宾
来宾 大神,502错误
来宾
来宾 大神啊,按照您的方法,调试版没问题,手机预览就不行了。是不是因为现在只能https了?http的就说request不合法。。
来宾
来宾 我也是这样 =。= 测试版可以看,手机预览就是黑屏的。会不会是手机不支持普清的?需要挂个高清的参数呢?
来宾
来宾 打开手机调试 又正常了,好玄幻啊
来宾
来宾 腾讯视频支持 https 的,上线也可以,可以直接在前端写个 js 解决所有问题
来宾
来宾 您好,第四步、把前面的QZOutputJson=跟最后的 ; 过滤掉,得到一个json字符串了。解析它变成json对象,然后把标红的三个部分组合一下,这里的组合是怎么组合?用的什么类?或者什么方法?能直接拿到key对应的value值吗?在java后端中,我是通过截取字符串最后拼接成功的,但感觉有点麻烦,您有什么好一点的方法吗?
来宾
来宾 解析 json啊
来宾
来宾 好像只能 拿到五分钟的
发表留言
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。