微信小程序嵌入腾讯视频源过程详解

首先我们有一个接口可以获取动态的vkey

https://vv.video.qq.com/getinfo?otype=json&appver=3.2.19.333&platform=11&defnpayver=1&vid=

获取的数据格式是这样的

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":[]}}]}};

需要的视频播放地址的格式是这样的

url + fn + '?vkey=' + fvkey

我需要的是用户可以在后台发布时候只需要复制视频链接填入即可

vedio 是腾讯播放地址例如:https://v.qq.com/x/page/c0799d0jruj.html  所以稍加改造后,代码如下

function getVideoInfo(vedio) {
  if (!vedio) return
  var vid = vedio.substring(vedio.lastIndexOf('/') + 1, vedio.lastIndexOf('html') - 1);
  var that = this;
  var urlString = 'https://vv.video.qq.com/getinfo?otype=json&appver=3.2.19.333&platform=11&defnpayver=1&vid=' + vid;
  wx.request({
   url: urlString,
   success: function (res) {
    var dataJson = res.data.replace(/QZOutputJson=/, '') + "qwe";
    var data = JSON.parse(dataJson);
    var fileName = data['vl']['vi'][0]['fn'];
    var fvkey = data['vl']['vi'][0]['fvkey'];
    var host = data['vl']['vi'][0]['ul']['ui'][2]['url']
    that.setData({
     videoUrl: host + fileName + '?vkey=' + fvkey
    });
   }
  })
 }

生成的videoUrl即是我需要的最终可以直接插入播放的视频

最后写入wxml

<view class='video'>
 <video src='{{videoUrl}}' bindplay='playVideo' id="myVideo"></video>
 <view class='tips'>建议WIFI环境下播放</view>
</view>

在小程序中使用发现 需要绑定授权域名https://vv.video.qq.com 我们无法上传验证文件所以无法绑定,因为后面我在小程序接口中使用PHP方法获取视频地址

//腾讯视频获取实际播放放地址
function getVideoInfo($video){
  $vid = "";
  //正则表达式截取vid
  preg_match_all("/(?:\/page\/)(.*)(?:\.html)/i",$video, $vid);
  $vid = $vid[1][0];
  $urlString = 'https://vv.video.qq.com/getinfo?otype=json&appver=3.2.19.333&platform=11&defnpayver=1&vid='.$vid;
  $res = fopen_url($urlString);
  //字符串截取json
  $json = str_replace("QZOutputJson=","",$res);
  $json = str_replace("}}]}};","}}]}}",$json);
  //json转换为数组
  $json = json_decode($json,true);
  $fileName = $json['vl']['vi'][0]['fn'];
  $fvkey = $json['vl']['vi'][0]['fvkey'];
  $host = $json['vl']['vi'][0]['ul']['ui'][2]['url'];
  $url = $host.$fileName.'?vkey='.$fvkey;
  return $url;
}
/**
  获取远程文件内容
  @param $url 文件http地址
*/
function fopen_url($url)
{
  if (function_exists('file_get_contents')) {
    $file_content = @file_get_contents($url);
  } elseif (ini_get('allow_url_fopen') && ($file = @fopen($url, 'rb'))){
    $i = 0;
    while (!feof($file) && $i++ < 1000) {
      $file_content .= strtolower(fread($file, 4096));
    }
    fclose($file);
  } elseif (function_exists('curl_init')) {
    $curl_handle = curl_init();
    curl_setopt($curl_handle, CURLOPT_URL, $url);
    curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT,2);
    curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER,1);
    curl_setopt($curl_handle, CURLOPT_FAILONERROR,1);
    curl_setopt($curl_handle, CURLOPT_USERAGENT, 'Trackback Spam Check'); //引用垃圾邮件检查
    $file_content = curl_exec($curl_handle);
    curl_close($curl_handle);
  } else {
    $file_content = '';
  }
  return $file_content;
}

因此在小程序接口上我们使用getVideoInfo()方法来转换视频地址就行了

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 详解微信小程序文件下载--视频和图片

    文件下载(遇到的坑) 1.要区分下载的内容是什么 0.1  图片下载wx.saveImageToPhotosAlbum(Object object) 0.2  视频下载wx.saveVideoToPhotosAlbum(Object object) 以上算是两大类 2.路径问题 图片文件路径,可以是临时文件路径或永久文件路径,不支持网络图片路径 不支持怎么处理需要使用 DownloadTask wx.downloadFile(Object object) 下载文件资源到本地.客户端直接发起一个

  • 在小程序中使用腾讯视频插件播放教程视频的方法

    在我们开发的一个小程序里面,为了给客户了解一些教程内容,我们需要增加一个在线播放视频的模块,考虑过直接使用视频组件播放服务器上的视频不成功,因此使用腾讯视频插件来播放最终测试成功.本篇随笔介绍微信小程序使用视频组件和腾讯视频插件两种方式的解决方式,并重点介绍视频插件方式的处理过程. 1.使用视频组件播放视频 由于是我们自己录制的视频内容,本来想直接通过视频组件来播放自己服务器上的视频,理想很丰满,现实很骨感,不知道是视频内部比较大的原因还是腾讯禁止,虽然在开发工具上测试的时候可以播放,不过最终发

  • 详解微信小程序-获取用户session_key,openid,unionid - 后端为nodejs

    微信小程序-获取用户session_key,openid,unionid - 后端为nodejs8.0+ 步骤: 1.通过wx.login接口获取code既jscode,传递到后端: 2.后端请求 https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code 地址,就能获取到openid和unionid. 小程序接

  • 小程序视频列表中视频的播放与停止的示例代码

    效果类似一条视频的小程序,就是视频列表,然后每个视频上覆盖一张视频的封面图,点击封面图的播放按钮视频播放,点击别的视频的时候,停止播放当前视频,播放点击的视频.差不多是这样: 一条视频 首先上代码: wxml <block wx:for="{{videoList}}"> <view class='video-item'> <view class='wrapper'> <video class='video-video' wx:if='{{ind

  • 微信小程序开发一键登录 获取session_key和openid实例

    微信小程序开发一键登录 获取session_key和openid实例 思来想去不愿自己的微信小程序是个单机版本.自己又不会写后台.现在借助leancloud可以实现微信小程序一键登录功能.尝试后,做笔记. 第一步:下载av-weapp.js,放到utils下. 第二步:使用 const AV = require('../../utils/av-weapp.js');路径根据具体情况而定. 第三步:做初始化. AV.init({ appId: 'EJx0NSfY********-gzGzoHsz'

  • 微信小程序 vidao实现视频播放和弹幕的功能

    微信小程序 vidao视频播放及弹幕的功能的实现. vidao 我现在看到的官方文档是不带danmu(弹幕)属性的,之前是有的,不过现在这个属性还可以生效.控制视频的状态可以根据video标签的唯一id得到一个对象实例.video组件并不具备action属性,不能通过action来控制. .wxml <view class="section tc"> <video src="{{src}}" controls ></video>

  • 小程序视频或音频自定义可拖拽进度条的示例代码

    小程序原生组件的音频播放时并没有进度条的显示,而此次项目中,鉴于原生的视频进度条样式太丑,产品要求做一个可拖拽的进度条满足需求. 视频和音频提供的api大致是相似的,可以根据以下代码修改为与音频相关的进度条. wxml的结构如下: <video id="myVideo" src="http://wxsnsdy.tc.qq.com/105/20210/snsdyvideodownload?filekey=30280201010421301f0201690402534804

  • 微信小程序实现Session功能及无法获取session问题的解决方法

    因为小程序原生不支持Cookie,因此也不支持Session. 网上找到的的一些方法有缺陷,而且很多累赘,估计没有实际测试过,在此直接给出实测可用的代码. 大概思路就是借助小程序本地储存+网络请求的header可读可写来实现类似浏览器的cookies保存session功能. 直接上代码 function NetRequest({url, data, success, fail, complete, method = "POST", header = { 'Content-type':

  • 小程序点击图片实现自动播放视频

    通过列表的点击事件自动播放列表对应的视频,同时停止上一个视频的播放. 源码: <view> <view class='vv' wx:for='{{vedio_data}}' wx:key=''> <view class='block' style='margin-left:20rpx;'> <image src='/img/1.png' class='img1' style='margin-left:20rpx'></image> <tex

  • 微信小程序登录session的使用

    获取微信小程序登录的session,整个过程如下: 第一步:小程序取得要往服务端传的 js_code App({ onLaunch: function() { wx.login({ success: function(res) { if (res.code) { //TODO } else { console.log('获取用户登录态失败!' + res.errMsg) } } }); } }) 第二步:服务器接收js_code,然后调用微信接口验证,获取session_key 接口调用地址:h

  • 微信小程序 获取session_key和openid的实例

    微信小程序 获取session_key和openid的实例 说说获取session_key和openid的条件 1.AppID(小程序ID); 2.AppSecret(小程序密钥); 3.登录时获取code; 注意:即使获取到了appid,未通过打款验证,也是不能拿到code的. 打印出来是这样的. 获取流程: 1.公众平台上找到AppID(小程序ID)和AppSecret(小程序密钥); 2.微信小程序中调用API获取code wx.login({ success: function(res)

  • 小程序:授权、登录、session_key、unionId的详解

    微信应用的一个很大的优势就在于使用过程中是不需要进行注册和显式登录的,大部分问题基本上可以一键解决.但是在授权.登录和获取用户信息的过程中都发生了哪些事情,今天我们就来讨论一下.这篇文章主要分析以下几个问题: 授权和登录的意义 session_key 的作用 unionId 的作用,有哪些获取途径 在应用中如何保存用户登录态 1. 授权和登录的意义 首先必须要明白,授权和登录实际上是两个操作. 1.1 授权(已废弃) 那授权的作用是啥呢?从小程序官方文档中我们可以看到授权操作只需通过wx.aut

  • 微信小程序使用video组件播放视频功能示例【附源码下载】

    本文实例讲述了微信小程序使用video组件播放视频功能.分享给大家供大家参考,具体如下: 1.效果展示 2.关键代码 ① index.wxml 复制代码 代码如下: <video src="../../pages/video/movie.mp4" binderror="videoErrorCallback"></video> ② index.js Page({ data:{ // text:"这是一个页面" }, vide

随机推荐