【uniapp】视频分享预览小程序

本文涉及的产品
文本翻译,文本翻译 100万字符
图片翻译,图片翻译 100张
语种识别,语种识别 100万字符
简介: 【uniapp】视频分享预览小程序

六一收到个不同以往的需求,我的指导老师最近有点忙,让我们帮忙做一个可以通过二维码预览视频的小程序

收到需求后,因为只是临时用一下,不打算写一套完整的系统,所以大概的思路就是,其他成员将视频通过ftp传入我的服务器上,我通过uniapp将视频路径写死在index页面上,跳转时将url中的参数传入到下一个页面即可,视频播放页面通过拼接路径最后得到完整的src资源文件,在写入data完成渲染即可,同理在点击生成二维码时将参数带着去新的页面进行处理,得到该视频播放页面的url后利用qrcode进行渲染输出二维码

basic:[
{"name":"蔡晓东英雄事迹","url":"/pages/video/video?url=1.mp4"},
{"name":"云南传统手工业银器制作","url":"/pages/video/video?url=2.mp4"},
{"name":"高山流水的典故","url":"/pages/video/video?url=3.mp4"}
'''
'''

index页面

点击预览,跳转到视频播放页面

点击qrcode,跳转到二维码生成页面

<template>
  <view>
    <view class="b-flex-x b-bg-white b-p-32">
      <image src="/static/logo.jpg" mode="aspectFit" class="logo b-radius-8"></image>
      <view class="b-flex-item b-ml-32">
        <view class="b-text-B b-text-48 b-text-black">B-ui v{{BuiVersion}}</view>
        <view class="b-font-24 b-mt-8 b-text-black-dd">@园游会永不打烊</view>
      </view>
    </view>
    <view class="b-pt-32 b-pr-32 b-pl-32 b-pb-24 b-text-black-dd">视频列表</view>
    <view class="b-list-user b-bg-white">
      <view class="b-list-item" 
        v-for="(item,index) in basic" :key="index">
        <view class="b-flex-x">
          <view class="b-icon b-text-black-d">
            <image src="/static/shipin-.png" mode="widthFix" style="width: 50rpx;height: 50rpx;"></image>
          </view>
          <view class="b-ml-16">{{item.name}}</view>
        </view>
        <view class="btns-box">
          <button class="b-btn b-btn-blue b-btn-sm" @click="jump(item.url)">观看</button>
          <button class="b-btn b-btn-blue b-btn-sm" style="margin-left: 10rpx;" @click="jumps(item.url)">qrcode</button>
          </view>
      </view>
    </view>
    <view class="b-p-32 b-text-black-dd b-text-c b-text-20">
      <view>欢迎使用 B-ui </view>
      <view class="b-mt-8">&copy; 园游会永不打烊</view>
    </view>
  </view>
</template>
<script>
  export default {
    data() {
      return {
        BuiVersion:"",
        basic:[
          {"name":"蔡晓东英雄事迹","url":"/pages/video/video?url=1.mp4"},
          {"name":"云南传统手工业银器制作","url":"/pages/video/video?url=2.mp4"},
          {"name":"高山流水的典故","url":"/pages/video/video?url=3.mp4"},
          {"name":"百里负米的典故","url":"/pages/video/video?url=4.mp4"},
          {"name":"环境保护相关视频或垃圾分类","url":"/pages/video/video?url=5.mp4"},
          {"name":"消防人员负重前行的相关","url":"/pages/video/video?url=6.mp4"},
          {"name":"介绍大学生打游戏耽误学业","url":"/pages/video/video?url=7.mp4"},
          {"name":"介绍大学生因作弊受处分","url":"/pages/video/video?url=8.mp4"},
          {"name":"介绍大学生团队创新获奖","url":"/pages/video/video?url=9.mp4"},
          {"name":"介绍网络并非法外之地","url":"/pages/video/video?url=10.mp4"},
          {"name":"中国天眼技术介绍","url":"/pages/video/video?url=11.mp4"},
          {"name":"介绍大学生网络犯罪","url":"/pages/video/video?url=12.mp4"},
          {"name":"介绍祖国大好河山","url":"/pages/video/video?url=13.mp4"},
          {"name":"介绍中国少数民族一家亲","url":"/pages/video/video?url=14.mp4"},
          ],
    }},
    onLoad() {
      this.BuiVersion = uni.Bui.version;
    },
    methods: {
  jump(url){
    uni.navigateTo({
      url:url
    })
  },
  jumps(url){
    console.log(url)
    uni.navigateTo({
      url:'/pages/qrcode/qrcode?url='+url
    })
  }
      }
  }
</script>
<style lang="scss">
  .logo{
    width: 140rpx;
    height: 140rpx;
  }
</style>

视频播放页面

资源渲染后即可直接播放,这部分的代码找了好久,起初以为uniapp没有支持网页播放的能力,需要用第三方的。

<template>
    <view>
        <view class="uni-padding-wrap uni-common-mt" style="display: flex;flex-direction: column;align-items: center;">
            <view>
         <video id="myVideo" :src="src"
                            @error="videoErrorCallback" :danmu-list="danmuList" enable-danmu danmu-btn controls></video>
            </view>
            <!-- #ifndef MP-ALIPAY -->
            <view class="uni-list uni-common-mt">
                <view class="uni-list-cell">
                    <view class="uni-list-cell-db">
                        <input v-model="danmuValue" class="uni-input" type="text" placeholder="在此处输入弹幕内容" />
                    </view>
                </view>
            </view>
            <view class="uni-btn-v">
                <button @click="sendDanmu" class="page-body-button">发送弹幕</button>
            </view>
            <!-- #endif -->
        </view>
    </view>
</template>
<script>
export default {
    data() {
        return {
            src: '',
            danmuList: [{
                    text: '第 1s 出现的弹幕',
                    color: '#ff0000',
                    time: 1
                },
                {
                    text: '第 3s 出现的弹幕',
                    color: '#ff00ff',
                    time: 3
                }
            ],
            danmuValue: ''
        }
    },
    onReady: function(res) {
        // #ifndef MP-ALIPAY
        this.videoContext = uni.createVideoContext('myVideo')
        // #endif
    },
  onLoad(options) {
    this.src="http://qrcode.taila.club/video/"+options.url
  },
    methods: {
        sendDanmu: function() {
            this.videoContext.sendDanmu({
                text: this.danmuValue,
                color: this.getRandomColor()
            });
            this.danmuValue = '';
        },
        videoErrorCallback: function(e) {
            // uni.showModal({
            //     content: e.target.errMsg,
            //     showCancel: false
            // })
        },
        getRandomColor: function() {
            const rgb = []
            for (let i = 0; i < 3; ++i) {
                let color = Math.floor(Math.random() * 256).toString(16)
                color = color.length == 1 ? '0' + color : color
                rgb.push(color)
            }
            return '#' + rgb.join('')
        }
    }
}
</script>

qrcode页面

可自定义中心图标logo

<template xlang="wxml">
  <view class="container">
    <view class="qrimg">
      <view class="qrimg-i">
        <tki-qrcode v-if="ifShow" cid="qrcode1" ref="qrcode" :val="val" :size="size" :unit="unit" :background="background" :foreground="foreground" :pdground="pdground" :icon="icon" :iconSize="iconsize" :lv="lv" :onval="onval" :loadMake="loadMake" :usingComponents="true" @result="qrR" />
      </view>
      <!-- <view class="qrimg-i">
        <tki-qrcode v-if="ifShow" cid="qrcode2" ref="qrcode2" val="第二个二维码" :size="size" :onval="onval" :loadMake="loadMake" :usingComponents="true" @result="qrR" />
      </view> -->
    </view>
    <view class="uni-padding-wrap uni-common-mt">
      <view class="uni-title">设置二维码大小</view>
    </view>
    <view class="body-view">
      <slider :value="size" @change="sliderchange" min="50" max="500" show-value />
    </view>
    <view class="uni-padding-wrap">
      <view class="btns">
        <button type="primary" @tap="selectIcon">选择二维码图标</button>
        <button type="primary" @tap="creatQrcode">生成二维码</button>
        <button type="primary" @tap="saveQrcode">保存到图库</button>
    <!--    <button type="warn" @tap="clearQrcode">清除二维码</button>
        <button type="warn" @tap="ifQrcode">显示隐藏二维码</button> -->
      </view>
    </view>
  </view>
</template>
<script>
import tkiQrcode from '@/components/tki-qrcode/tki-qrcode.vue'
export default {
  data() {
    return {
      ifShow: true,
      val: 'http://www.taila.club', // 要生成的二维码值
      size: 300, // 二维码大小
      unit: 'upx', // 单位
      background: '#ffffff', // 背景色
      foreground: '#252625', // 前景色
      pdground: '#32dbc6', // 角标色
      icon: '/static/logo.jpg', // 二维码图标
      iconsize: 40, // 二维码图标大小
      lv: 3, // 二维码容错级别 , 一般不用设置,默认就行
      onval: false, // val值变化时自动重新生成二维码
      loadMake: true, // 组件加载完成后自动生成二维码
      src: '' // 二维码生成后的图片地址或base64
    }
  },
  methods: {
    sliderchange(e) {
      this.size = e.detail.value
    },
    creatQrcode() {
      this.$refs.qrcode._makeCode()
    },
    saveQrcode() {
      this.$refs.qrcode._saveCode()
    },
    qrR(res) {
      this.src = res
    },
    clearQrcode() {
      this.$refs.qrcode._clearCode()
      this.val = ''
    },
    ifQrcode() {
      this.ifShow = !this.ifShow
    },
    selectIcon() {
      let that = this
      uni.chooseImage({
        count: 1, //默认9
        sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
        sourceType: ['album'], //从相册选择
        success: function (res) {
          that.icon = res.tempFilePaths[0]
          setTimeout(() => {
            that.creatQrcode()
          }, 100);
          // console.log(res.tempFilePaths);
        }
      });
    }
  },
  components: {
    tkiQrcode
  },
  onLoad(options) {
    let that = this;
    that.val="http://qrcode.taila.club/#"+options.url
  },
}
</script>
<style>
/* @import "../../../common/icon.css"; */
.container {
  display: flex;
  flex-direction: column;
  width: 100%;
}
.qrimg {
  display: flex;
  justify-content: center;
}
.qrimg-i{
  margin-right: 10px;
}
slider {
  width: 100%;
}
input {
  width: 100%;
  margin-bottom: 20upx;
}
.btns {
  display: flex;
  flex-direction: column;
  width: 100%;
}
button {
  width: 100%;
  margin-top: 10upx;
}
</style>

完整代码包,已经打包上传,需要的请后面看评论区!

相关文章
|
21天前
|
人工智能 小程序 搜索推荐
uni app下开发AI运动小程序解决方案
本文介绍了在小程序中实现AI运动识别的解决方案。该方案依托于UNI平台,通过高效便捷的插件形式,实现包括相机抽帧控制、人体识别、姿态识别等在内的多项功能,无需依赖后台服务器,大幅提高识别效率和用户体验。方案内置多种运动模式,支持自定义扩展,适用于AI健身、云上赛事、AI体测等多场景,适合新开发和存量改造项目。
|
26天前
|
小程序 前端开发 JavaScript
在线课堂+工具组件小程序uniapp移动端源码
在线课堂+工具组件小程序uniapp移动端源码
26 0
在线课堂+工具组件小程序uniapp移动端源码
|
2月前
|
移动开发 小程序 数据可视化
基于npm CLI脚手架的uniapp项目创建、运行与打包全攻略(微信小程序、H5、APP全覆盖)
基于npm CLI脚手架的uniapp项目创建、运行与打包全攻略(微信小程序、H5、APP全覆盖)
315 3
|
3月前
|
开发工具
uniapp, 短剧视频类App实现参考,支持滑动播放,仿抖音 仿陌陌 短视频 无限滑动播放 视频流
阿里云点播服务web播放器sdk,短剧视频类App实现参考。仿抖音 仿陌陌 短视频 无限滑动播放 视频流。无uniapp video 原生组件的层级、遮挡、覆盖问题,适合与不同功能视图组合使用,实现丰富的应用功能。
uniapp, 短剧视频类App实现参考,支持滑动播放,仿抖音 仿陌陌 短视频 无限滑动播放 视频流
|
2月前
|
小程序 API
微信小程序更新提醒uniapp
在小程序开发中,版本更新至关重要。本方案利用 `uni-app` 的 `uni.getUpdateManager()` API 在启动时检测版本更新,提示用户并提供立即更新选项,自动下载更新内容,并在更新完成后重启小程序以应用新版本。适用于微信小程序,确保用户始终使用最新版本。以下是实现步骤: ### 实现步骤 1. **创建更新方法**:在 `App.vue` 中创建 `updateApp` 方法用于检查小程序是否有新版本。 2. **测试**:添加编译模式并选择成功状态进行模拟测试。
55 0
微信小程序更新提醒uniapp
|
2月前
|
移动开发 小程序 数据可视化
一招学会DIY官网可视化设计支持导出微擎、UNIAPP、H5、微信小程序源码
一招学会DIY官网可视化设计支持导出微擎、UNIAPP、H5、微信小程序源码
46 2
|
2月前
|
小程序 数据可视化 API
低代码可视化-uniapp商城首页小程序-代码生成器
低代码可视化-uniapp商城首页小程序-代码生成器
31 0
|
4月前
|
小程序 前端开发 Java
SpringBoot+uniapp+uview打造H5+小程序+APP入门学习的聊天小项目
JavaDog Chat v1.0.0 是一款基于 SpringBoot、MybatisPlus 和 uniapp 的简易聊天软件,兼容 H5、小程序和 APP,提供丰富的注释和简洁代码,适合初学者。主要功能包括登录注册、消息发送、好友管理及群组交流。
115 0
SpringBoot+uniapp+uview打造H5+小程序+APP入门学习的聊天小项目
|
2月前
|
存储 移动开发 小程序
uniapp富文本editor输入二次扩展兼容微信小程序
uniapp富文本editor输入二次扩展兼容微信小程序
87 0
|
2月前
|
小程序
uniapp实现微信小程序隐私协议组件封装
uniapp实现微信小程序隐私协议组件封装
50 0