公司最近想用小程序播放腾讯视频的视频,由于小程序的微信接口只是调用视频的vid就能进行播放,但是在pc网页上进行播放就要拿到视频的真实地址,然而实际上腾讯视频上传后只是给你一个:https://v.qq.com/x/page/d0744x87gdd.html这样的网址,那么就需要我们在后台代码中进行解析,腾讯工程师非常调皮的是我们即便解析到真实地址过一段时间也会失效,所以需要随播随解!

下面上代码,笔者用的net.sf.json以及org.apache.commons    jar包,请自行查找! net.sf.json类与Gson、fastjson相似就不相应描述了!

package com.shop.util;import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;import javax.net.ssl.HttpsURLConnection;import org.apache.commons.collections.map.ListOrderedMap;import net.sf.json.JSONArray;
import net.sf.json.JSONObject;/*** 解析腾讯视频上传地址* * @author 艾洪凯 time:2018-12-28**/public class JxQqVideo {public static String jiexi(String uri) {Map<String, Object> map = new HashMap<>();uri = uri.substring(uri.lastIndexOf("/") + 1, uri.lastIndexOf("."));uri = "vids=" + uri;String requestUrl = "http://vv.video.qq.com/getinfo?platform=101001&charge=0&otype=json&defn=shd";String response = "";try {response = getData(requestUrl, uri);response = response.replace("QZOutputJson=", "").replace(";", "");map = parseJSON2Map(response);Map<String, Object> map2 = (Map<String, Object>) map.get("vl");List<Map<String, Object>> list = (List<Map<String, Object>>) map2.get("vi");String vkey = list.get(0).get("fvkey").toString();// vkeyString fn = list.get(0).get("fn").toString();// fnmap2 = (Map<String, Object>) list.get(0).get("ul");list = (List<Map<String, Object>>) map2.get("ui");// 加判断String url1 = "";if (list.size() >= 2) {url1 = list.get(1).get("url").toString();} else {url1 = list.get(0).get("url").toString();}response = url1 + fn + "?vkey=" + vkey;} catch (MalformedURLException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return response;}public static Map<String, Object> parseJSON2Map(String jsonStr) {ListOrderedMap map = new ListOrderedMap();// 最外层解析JSONObject json = JSONObject.fromObject(jsonStr);for (Object k : json.keySet()) {Object v = json.get(k);// 如果内层还是数组的话,继续解析if (v instanceof JSONArray) {List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();Iterator<JSONObject> it = ((JSONArray) v).iterator();while (it.hasNext()) {JSONObject json2 = it.next();list.add(parseJSON2Map(json2.toString()));}map.put(k.toString(), list);} else {if (v.toString().contains("{")) {map.put(k.toString(), parseJSON2Map(v.toString()));} else {map.put(k.toString(), v);}}}return map;}public static String getData(String url, String request) throws UnsupportedEncodingException, IOException {String charset = "UTF-8";ByteArrayOutputStream outStream = new ByteArrayOutputStream();HttpURLConnection connect = (HttpURLConnection) (new URL(url).openConnection());connect.setRequestMethod("GET");connect.setDoOutput(true);connect.setConnectTimeout(1000 * 10);connect.setReadTimeout(1000 * 80);connect.setRequestProperty("ContentType", "application/x-www-form-urlencoded"); // 采用通用的URL百分号编码的数据MIME类型来传参和设置请求头connect.setDoInput(true);// 连接connect.connect();// 发送数据connect.getOutputStream().write(request.getBytes(charset));// 接收数据int responseCode = connect.getResponseCode();if (responseCode == HttpURLConnection.HTTP_OK) {InputStream in = connect.getInputStream();byte[] data = new byte[1024];int len = 0;while ((len = in.read(data, 0, data.length)) != -1) {outStream.write(data, 0, len);}in.close();}// 关闭连接connect.disconnect();String response = outStream.toString("UTF-8");return response;}public static void main(String[] args) {// TODO Auto-generated method stubSystem.out.println(jiexi("https://v.qq.com/x/page/d0744x87gdd.html"));}}

运行结果:

浏览器浏览效果:

代码写的不好,各位凑合看,还有什么好的方法,大家留言交流一下~

解析腾讯视频上传视频源地址网址相关推荐

  1. 腾讯视频上传视频如何同步到企鹅号

    企鹅号是腾讯的一个非常棒的产品,让一大批自媒体人赚了钱,我们都知道腾讯视频和企鹅号是互通的,腾讯视频中的视频也可以同步到企鹅号中.所以今天播放器家园网小编教大家如何将视频进行同步. 腾讯视频上传视频如 ...

  2. iOS图片,视频上传视频内容旋转

    #前言 我最近在接手一个智能盒子的iOS应用,上面有一个功能是这样的.把你本地的照片和视频可以甩屏到你绑定的盒子上. 我的上一位前辈做的时候必须要求再同一个局域网,但是当我做的时候要求不同的局域网也要 ...

  3. php 编辑器 插入视频,苗景云的博客-PHPCMS V9编辑器中新增上传mp4视频(上传视频并插入HTML5的video标签)的功能...

    由于PHPCMS v9默认的编辑器中上传的视频插入的是embed标签使用的是flash播放器,手机端无法播放,所以来改造下,让其上传视频并插入HTML5的video标签,这样电脑端的主流浏览器和手机端 ...

  4. 阿里云视频上传视频获取进度条问题(使用session方案,获取进度一直为0的解决方案)补充:前后端分离项目中获取进度解决方案

    1.场景描述: 之前用阿里云上传视频,前端反应上传视频经常出现获取视频url失败问题.但是接口我测过很多遍都是没有问题的.后台这边提供了一个视频上传的接口返回一个videoId,还提供了一个根据vid ...

  5. php腾讯云+视频上传失败,腾讯云视频上传和播放尝试总结

    项目中需要用到腾讯云视频,做了一个完整的流程尝试,总结一下. 基本需求是通过后台管理页面上传视频,然后通过网页,Android和iOS播放视频. 腾讯视频分三大部分:视频上传,视频处理,视频播放,相应 ...

  6. 腾讯云点播视频存储(Web端视频上传)

    官方文档 前言 所谓视频上传,是指开发者或其用户将视频文件上传到点播的视频存储中,以便进行视频处理.分发等. 一.简介 腾讯云点播支持如下几种视频上传方式: 控制台上传:在点播控制台上进行操作,将本地 ...

  7. yii2.0使用ueditior完成上传单张,多张图片,上传视频等操作

    一.前言 由于工作需求需要集成富文本编辑器,本来是想要选用之前用过的WangEditor的,但是考虑到WangEditor还是比较小众,所以最终选择了没用过的Uedtor,这篇文章主要讲述了Yii2. ...

  8. Java代码实现阿里云视频上传

    目录 视频上传 视频删除 视频上传 新建一个springboot项目,结构大概这样 添加依赖 <dependency><groupId>com.aliyun</group ...

  9. uniapp-上传图片、上传视频

    基于 uniapp 的应用上传图片/视频 资源的实现: 功能涉及的主要 uniapp API 如下: 1.选择图片:uni.chooseImage(OBJECT) | uni-app官网 2.选择视频 ...

最新文章

  1. 你花了多久弄明白架构设计?java多线程编程实战指南pdf
  2. oracle Data Modeler 使用教程
  3. python支持向量机回归_机器学习实战-支持向量机原理、Python实现和可视化(分类)...
  4. 恐怖地狱火恶魔叉404模板下载
  5. Linux命令kill和signal
  6. LKT系列加密芯片DES加解密以及OpenSSL DES接口实现加解密
  7. 怎样在计算机中找小键盘,笔记本怎么关小键盘【方法步骤】
  8. 比较无线局域网和无线广域网的特征
  9. JS,统计图表大全--三、饼形图(饼图及环形图)
  10. oracle假如存在才删除该字段,Oracle删除表、字段之前判断表、字段是否存在
  11. Linux 解压,压缩文件--tar 命令
  12. L75 Middle 颜色分类 三路快排
  13. 深圳天瑞地安:规范的Java开发让你编程更舒心
  14. Linux中的管道与连接符号
  15. 你还深陷在上半年工作和生活的一团乱麻中?可以试一下我说的这个“破局”之法
  16. 批量替换文本中的多组字符串
  17. mysql中对当前时间函数now()的操作
  18. Python之文件和数据格式化学习笔记
  19. 《Oracle编程自学与面试指南》17-03:多列子查询
  20. 初中计算机学的动画,初中信息技术《制作简单逐帧动画》教案

热门文章

  1. Android使用MediaPlayer播放音频
  2. DaisyDisk for Mac(Mac系统清理工具)
  3. NodeJS脚本中for循环中加入setTimeout实现每隔一段时间执行操作
  4. 小伙伴们,一个身份证可注册五个微信公众号了!
  5. TurtleBot4快速入门教程-软件综述
  6. indesign可以换暂存盘吗_InDesign CS5_快捷键大全
  7. 勿忘初心,保持饥渴的心态
  8. Tkinter保姆级教程(下)
  9. ~ 如何用C++自制一个日麻游戏 ~(二)听牌判断算法 § 1 判断听牌(附带C#实现)
  10. Android之ViewPager实现图片无限循环轮播