Skip to content

使用方法

安卓腾讯视频播放器UTS原生插件是根据腾讯云视立方 Android 播放器组件(原超级播放器)开发的插件,插件包含了播放器UI组件的全部功能,在uniapp和uniappx中集成简单,插件支持uniapp和uniapp x,支持vue2和vue3的选项式和组合式

注意

如果插件的UI组件不符合你的要求可以联系作者优化

插件使用注意事项

  • 如果您在使用插件的过程中有任何问题,可以联系作者,作者将全力协助您使用插件
  • 本文档同时提供了uniapp的用法示例和uniappx的用法示例,插件市场导入的示例项目仅为uniapp的用法示例,如果您需要uniappx的示例项目可以通过下方的链接下载示例

https://pan.baidu.com/s/1B6pyL0tOujMzFz-cQVNorQ?pwd=55q7

sdk文档地址

https://cloud.tencent.com/document/product/881/20213

联系作者

关注微信公众号可联系作者

插件地址

https://ext.dcloud.net.cn/plugin?id=29434

API用法

在使用插件的地方引入以下代码:

js
import * as module from "@/uni_modules/leven-uts-txPlayer"
js
import * as module from "@/uni_modules/leven-uts-txPlayer"

组件用法

在使用插件的地方引入以下代码:

vue
<leven-uts-txPlayer ref="refLevenPlayer" v-if="isConfig" style="flex:1; height: 200px; margin-bottom: 20px;"
  :config="config" @onError="onError" @onEvent="onEvent" @onEventMethod="onEventMethod">
</leven-uts-txPlayer>
vue
<leven-uts-txPlayer ref="refPlayer" v-if="isConfig" style="flex:1; height: 200px; margin-bottom: 20px;"
  :configX="config" @onError="onError" @onEvent="onEvent" @onEventMethod="onEventMethod">
</leven-uts-txPlayer>

//组件的引用
const refPlayer = ref<LevenUtsTxPlayerElement | null>(null)

用法示例

api用法示例

vue
<template>
  <view>
    <uni-list>
      <uni-list-item title="超级播放器" clickable link @click="toPage('superPlayer')"></uni-list-item>
    </uni-list>
  </view>
</template>

<script>
  import * as module from "@/uni_modules/leven-uts-txPlayer"
  export default {
    data() {
      return {}
    },
    mounted() {
      this.$nextTick(() => {
        //申请插件所需权限
        this.requestPermissions();
      })
    },
    methods: {
      toPage(type) {
        switch (type) {
          case "superPlayer":
            uni.navigateTo({
              url: "/pages/index/superPlayer"
            })
            break
        }
      },
      showMessage(message) {
        uni.showToast({
          title: message,
          icon: "none"
        })
      },
      initSdk() {
        module.init({
          params: {
            licenceUrl: "https://1253283439.trtcube-license.cn/license/v2/1253283439_1/v_cube.license",
            licenseKey: "049a398d7d177700b18c3299098067f7"
          },
          complete: (res) => {
            if (res.code == 0) {
              this.showMessage("初始化成功")
            } else {
              this.showMessage(res.message)
            }
          }
        })
      },
      toAllFilesPermissionPage() {
        module.toAllFilesPermissionPage({
          complete: (res) => {
            if (res.code == 0) {
              let data = res.data;
              if (!data.status) {
                this.showMessage("所有文件访问权限未打开")
              } else {
                this.initSdk()
              }
            } else {
              this.showMessage(res.message)
            }
          }
        })
      },
      checkAllFilesPermission() {
        module.checkAllFilesPermission({
          complete: (res) => {
            if (res.code == 0) {
              let data = res.data;
              if (!data.status) {
                this.toAllFilesPermissionPage();
              } else {
                this.initSdk()
              }
            } else {
              this.showMessage(res.message)
            }
          }
        })
      },
      //申请插件所需权限
      requestPermissions() {
        module.requestPermissions({
          params: {
            permissions: [
              "android.permission.READ_EXTERNAL_STORAGE",
              "android.permission.WRITE_EXTERNAL_STORAGE"
            ]
          },
          complete: (res) => {
            if (res.code == 0) {
              //判断是否有所有文件访问权限
              this.checkAllFilesPermission();
            } else {
              this.showMessage(res.message)
            }
          }
        })
      },
    }
  }
</script>

<style>

</style>
vue
<template>
  <!-- #ifdef APP -->
  <scroll-view style="flex:1">
  <!-- #endif -->
    <rice-cell-group border>
      <rice-cell title="超级播放器" arrow clickable @click="toPage('superPlayer')"></rice-cell>
    </rice-cell-group>
  <!-- #ifdef APP -->
  </scroll-view>
  <!-- #endif -->
</template>

<script setup lang="uts">
  import * as module from "@/uni_modules/leven-uts-txPlayer"
  import { LevenResult, LevenOptions } from "@/uni_modules/leven-uts-txPlayer"

  function toPage(type : string) {
    switch (type) {
      case "superPlayer":
        uni.navigateTo({
          url: "/pages/txPlayer/superPlayer"
        })
        break
    }
  }

  //显示消息
  function showMessage(message : string) {
    uni.showToast({
      title: message,
      icon: "none"
    })
  }

  function initSdk() {
    module.init({
      params: {
        licenceUrl: "https://1253283439.trtcube-license.cn/license/v2/1253283439_1/v_cube.license",
        licenseKey: "049a398d7d177700b18c3299098067f7"
      },
      complete: (res : LevenResult) => {
        if (res.code == 0) {
          showMessage("初始化成功")
        } else {
          showMessage(res.message)
        }
      }
    } as LevenOptions)
  }

  //跳转到所有文件访问权限页面
  function toAllFilesPermissionPage() {
    module.toAllFilesPermissionPage({
      complete: (res : LevenResult) => {
        if (res.code == 0) {
          let data = res.data;
          let status : boolean = data.getBoolean("status")!
          if (!status) {
            showMessage("所有文件访问权限未打开")
          } else {
            initSdk();
          }
        } else {
          showMessage("跳转到所有文件访问权限页面失败")
        }
      }
    } as LevenOptions)
  }

  //检测是否有所有文件访问权限
  function checkAllFilesPermission() {
    module.checkAllFilesPermission({
      complete: (res : LevenResult) => {
        if (res.code == 0) {
          let data = res.data;
          let status : boolean = data.getBoolean("status")!
          if (!status) {
            toAllFilesPermissionPage();
          } else {
            initSdk();
          }
        } else {
          showMessage("查询文件权限失败")
        }
      }
    } as LevenOptions)
  }

  //申请权限
  function requestPermissions() {
    module.requestPermissions({
      params: {
        permissions: [
          'android.permission.READ_EXTERNAL_STORAGE',
          'android.permission.WRITE_EXTERNAL_STORAGE'
        ]
      },
      complete: (res : LevenResult) => {
        console.log(res)
        if (res.code == 0) {
          checkAllFilesPermission()
        } else {
          showMessage("权限申请未通过")
        }
      }
    } as LevenOptions)
  }

  //页面加载
  onMounted(() => {
    //申请权限
    requestPermissions();
  })
</script>

<style>

</style>

组件用法示例

vue
<template>
  <view>
    <leven-uts-txPlayer ref="refLevenPlayer" v-if="isConfig" style="flex:1; height: 200px; margin-bottom: 20px;"
      :config="config" @onError="onError" @onEvent="onEvent" @onEventMethod="onEventMethod">
    </leven-uts-txPlayer>
    <uni-segmented-control :current="controlIndex" :values="controlItems"
      @clickItem="changeControl"></uni-segmented-control>
    <uni-list v-if="controlIndex == 0">
      <uni-list-item v-for="(item, index) in liveList" :title="item.title" :thumb="item.coverPictureUrl" :key="index"
        thumb-size="lg" clickable link @click="playLive(item)"></uni-list-item>
    </uni-list>
    <uni-list v-if="controlIndex == 1">
      <uni-list-item v-for="(item, index) in vodList" :title="item.title"
        :thumb="item.coverPictureUrl || item.placeholderImage" :key="index" thumb-size="lg" clickable link
        @click="playVod(item)"></uni-list-item>
    </uni-list>
  </view>
</template>

<script>
  import {
    TXVodConstants
  } from "@/utils/TXVodConstants.js"
  export default {
    data() {
      return {
        //配置是否准备完毕
        isConfig: false,
        config: {

        },
        //直播列表
        liveList: [{
          title: "FLV直播",
          placeholderImage: "http://1500005830.vod2.myqcloud.com/6c9a5118vodcq1500005830/66bc542f387702300661648850/0RyP1rZfkdQA.png",
          url: "http://liteavapp.qcloud.com/live/liteavdemoplayerstreamid.flv",
          coverPictureUrl: "http://1500005830.vod2.myqcloud.com/6c9a5118vodcq1500005830/66bc542f387702300661648850/0RyP1rZfkdQA.png"
        }, {
          title: "RTMP直播",
          placeholderImage: "http://1500005830.vod2.myqcloud.com/6c9a5118vodcq1500005830/66bc542f387702300661648850/0RyP1rZfkdQA.png",
          url: "rtmp://liteavapp.qcloud.com/live/liteavdemoplayerstreamid",
          coverPictureUrl: "http://1500005830.vod2.myqcloud.com/6c9a5118vodcq1500005830/66bc542f387702300661648850/0RyP1rZfkdQA.png"
        }, {
          title: "WebRTC直播",
          placeholderImage: "http://1500005830.vod2.myqcloud.com/6c9a5118vodcq1500005830/66bc542f387702300661648850/0RyP1rZfkdQA.png",
          url: "webrtc://liteavapp.qcloud.com/live/liteavdemoplayerstreamid",
          coverPictureUrl: "http://1500005830.vod2.myqcloud.com/6c9a5118vodcq1500005830/66bc542f387702300661648850/0RyP1rZfkdQA.png"
        }, {
          title: "HLS直播",
          placeholderImage: "http://1500005830.vod2.myqcloud.com/6c9a5118vodcq1500005830/66bc542f387702300661648850/0RyP1rZfkdQA.png",
          url: "http://liteavapp.qcloud.com/live/liteavdemoplayerstreamid.m3u8",
          coverPictureUrl: "http://1500005830.vod2.myqcloud.com/6c9a5118vodcq1500005830/66bc542f387702300661648850/0RyP1rZfkdQA.png"
        }],
        vodList: [{
          appId: "1500005830",
          videoId: {
            fileId: "387702299774251236",
          },
          title: "腾讯云音视频成就",
          coverPictureUrl: "http://1500005830.vod2.myqcloud.com/43843ec0vodtranscq1500005830/48d0f1f9387702299774251236/coverBySnapshot/coverBySnapshot_10_0.jpg"
        }, {
          appId: "1500005830",
          videoId: {
            fileId: "387702299774390972",
          },
          title: "动态水印演示",
          coverPictureUrl: "http://1500005830.vod2.myqcloud.com/6c9a5118vodcq1500005830/4b6e0e84387702299774390972/387702299947629622.png",
          dynamicWaterConfig: {
            tipText: "shipinyun",
            tipTextSize: 30,
            tipTextColor: "#FF3333"
          }
        }, {
          appId: "1500005830",
          videoId: {
            fileId: "387702299774253670",
          },
          title: "化繁为简,以小建大",
          coverPictureUrl: "http://1500005830.vod2.myqcloud.com/6c9a5118vodcq1500005830/48d21c3d387702299774253670/387702299947604155.png"
        }, {
          appId: "1500005830",
          videoId: {
            fileId: "387702299774574470",
          },
          title: "数字是什么",
          coverPictureUrl: "http://1500005830.vod2.myqcloud.com/6c9a5118vodcq1500005830/4ff64b01387702299774574470/387702304138941858.png"
        }, {
          appId: "1500005830",
          videoId: {
            fileId: "387702299774545556",
          },
          title: "试看功能演示",
          coverPictureUrl: "http://1500005830.vod2.myqcloud.com/6c9a5118vodcq1500005830/4fc091e4387702299774545556/387702299947278317.png",
          vipWatchModel: {
            tip: "可试看15s,开通VIP观看完整视频",
            canWatchTime: 15
          }
        }, {
          appId: "1500005830",
          playAction: 1,
          videoId: {
            fileId: "8602268011437356984",
          },
          title: "自定义封面演示",
          coverPictureUrl: "http://1500005830.vod2.myqcloud.com/6c9a5118vodcq1500005830/cc1e28208602268011087336518/MXUW1a5I9TsA.png"
        }, {
          appId: "1500005830",
          playAction: 1,
          title: "加密视频_腾讯云业务介绍",
          videoId: {
            fileId: "243791578431393746",
            pSign: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhcHBJZCI6MTUwMDA" +
              "wNTgzMCwiZmlsZUlkIjoiMjQzNzkxNTc4NDMxMzkzNzQ2IiwiY3VycmVudFRpbWVTdGFtc" +
              "CI6MTY3MzQyNjIyNywiY29udGVudEluZm8iOnsiYXVkaW9WaWRlb1R5cGUiOiJQcm90ZWN0" +
              "ZWRBZGFwdGl2ZSIsImRybUFkYXB0aXZlSW5mbyI6eyJwcml2YXRlRW5jcnlwdGlvbkRlZmluaX" +
              "Rpb24iOjEyfX0sInVybEFjY2Vzc0luZm8iOnsiZG9tYWluIjoiMTUwMDAwNTgzMC52b2QyLm15cWNs" +
              "b3VkLmNvbSIsInNjaGVtZSI6IkhUVFBTIn19.q34pq7Bl0ryKDwUHGyzfXKP-CDI8vrm0k_y-IaxgF_U"
          },
          placeholderImage: "https://1500005830.vod2.myqcloud.com/6c9a5118vodcq1500005830/35ab25fb243791578431393746/onEqUp.png",
        }, {
          appId: "1500006438",
          playAction: 1,
          title: "幽灵水印视频",
          videoId: {
            fileId: "387702307847129127",
            pSign: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhcHBJZCI6MTUwMDA" +
              "wNjQzOCwiZmlsZUlkIjoiMzg3NzAyMzA3ODQ3MTI5MTI3IiwiY29udG" +
              "VudEluZm8iOnsiYXVkaW9WaWRlb1R5cGUiOiJSYXdBZGFwdGl2ZSIsIn" +
              "Jhd0FkYXB0aXZlRGVmaW5pdGlvbiI6MTB9LCJjdXJyZW50VGltZVN0YW1w" +
              "IjoxNjg2ODgzMzYwLCJnaG9zdFdhdGVybWFya0luZm8iOnsidGV4dCI6I" +
              "mdob3N0IGlzIHdhdGNoaW5nIn19.0G2o4P5xVZ7zF" +
              "lFUgBLntfX03iGxK9ntD_AONClUUno"
          },
          placeholderImage: "http://1500006438.vod2.myqcloud.com/4384ba25vodtranscq1500006438/558b62f3387702307847129127/coverBySnapshot_10_0.jpg",
        }, {
          placeholderImage: "http://1500005830.vod2.myqcloud.com/43843ec0vodtranscq1500005830/dc455d1d387702306937256938/coverBySnapshot_10_0.jpg",
          url: "http://1500005830.vod2.myqcloud.com/43843ec0vodtranscq1500005830/dc455d1d387702306937256938/adp.10.m3u8",
          title: "多字幕视频",
          subtitleSourceModelList: [{
            name: "ex-cn-srt",
            url: "https://mediacloud-76607.gzc.vod.tencent-cloud.com/DemoResource/TED-CN.srt",
            mimeType: TXVodConstants.VOD_PLAY_MIMETYPE_TEXT_SRT
          }, {
            name: "ex-in-srt",
            url: "https://mediacloud-76607.gzc.vod.tencent-cloud.com/DemoResource/TED-IN.srt",
            mimeType: TXVodConstants.VOD_PLAY_MIMETYPE_TEXT_SRT
          }, {
            name: "ex-en-vtt",
            url: "https://mediacloud-76607.gzc.vod.tencent-cloud.com/DemoResource/TED-EN.vtt",
            mimeType: TXVodConstants.VOD_PLAY_MIMETYPE_TEXT_VTT
          }]
        }, {
          title: "多音轨视频",
          url: "http://1500005830.vod2.myqcloud.com/6c9a5118vodcq1500005830/3a76d6ac387702303793151471/iP3rnDdxMH4A.mov",
          placeholderImage: "http://1500005830.vod2.myqcloud.com/6c9a5118vodcq1500005830/3a76d6ac387702303793151471/387702307093360124.png"
        }, {
          title: "视频列表轮播演示",
          isEnableCache: false,
          placeholderImage: "http://1500005830.vod2.myqcloud.com/6c9a5118vodcq1500005830/6f443f33387702302226773793/2luyOg7pOR0A.png",
          videoModelList: [{
            appId: "1500005830",
            videoId: {
              fileId: "387702299774211080",
            },
            title: "腾讯云音视频——全",
            coverPictureUrl: "http://1500005830.vod2.myqcloud.com/43843ec0vodtranscq1500005830/48888812387702299774211080/coverBySnapshot/coverBySnapshot_10_0.jpg"
          }, {
            appId: "1500005830",
            videoId: {
              fileId: "387702299774644824",
            },
            title: "腾讯云音视频——真",
            coverPictureUrl: "http://1500005830.vod2.myqcloud.com/43843ec0vodtranscq1500005830/52153a82387702299774644824/coverBySnapshot/coverBySnapshot_10_0.jpg"
          }, {
            appId: "1500005830",
            videoId: {
              fileId: "387702299774544650",
            },
            title: "腾讯云音视频——稳",
            coverPictureUrl: "http://1500005830.vod2.myqcloud.com/43843ec0vodtranscq1500005830/4fc009be387702299774544650/coverBySnapshot/coverBySnapshot_10_0.jpg"
          }]
        }, {
          title: "离线缓存(全屏)演示",
          isEnableCache: true,
          placeholderImage: "http://1500005830.vod2.myqcloud.com/6c9a5118vodcq1500005830/ae6444ab387702302227194724/n6SJb2ORhQMA.png",
          videoModelList: [{
            appId: "1500005830",
            videoId: {
              fileId: "387702299773851453",
            },
            title: "不只是音视频 1",
            coverPictureUrl: "http://1500005830.vod2.myqcloud.com/43843ec0vodtranscq1500005830/09d5b1bf387702299773851453/coverBySnapshot/coverBySnapshot_10_0.jpg",
            isEnableCache: true,
          }, {
            appId: "1500005830",
            videoId: {
              fileId: "387702299774155981",
            },
            title: "不只是音视频 2",
            coverPictureUrl: "http://1500005830.vod2.myqcloud.com/43843ec0vodtranscq1500005830/467e1943387702299774155981/coverBySnapshot/coverBySnapshot_10_0.jpg",
            isEnableCache: true,
          }, {
            appId: "1500005830",
            videoId: {
              fileId: "387702299773830943",
            },
            title: "不只是音视频 3",
            coverPictureUrl: "http://1500005830.vod2.myqcloud.com/43843ec0vodtranscq1500005830/09b10980387702299773830943/coverBySnapshot/coverBySnapshot_10_0.jpg",
            isEnableCache: true,
          }, {
            appId: "1500005830",
            videoId: {
              fileId: "387702299773823860",
            },
            title: "不只是音视频 4",
            coverPictureUrl: "http://1500005830.vod2.myqcloud.com/43843ec0vodtranscq1500005830/09a09220387702299773823860/coverBySnapshot/coverBySnapshot_10_0.jpg",
            isEnableCache: true,
          }, {
            appId: "1500005830",
            videoId: {
              fileId: "387702299774156604",
            },
            title: "不只是音视频 5",
            coverPictureUrl: "http://1500005830.vod2.myqcloud.com/43843ec0vodtranscq1500005830/467e97dc387702299774156604/coverBySnapshot/coverBySnapshot_10_0.jpg",
            isEnableCache: true,
          }]
        }, {
          title: "DRM视频",
          coverPictureUrl: "http://1500005830.vod2.myqcloud.com/6c9a5118vodcq1500005830/4ff64b01387702299774574470/387702304138941858.png",
          drmBuilder: {
            playUrl: "https://1500017640.vod2.myqcloud.com/439767a2vodtranscq1500017640/30eb640e243791578648828779/adp.1434415.mpd",
            keyLicenseUrl: "https://widevine.drm.vod-qcloud.com/widevine/getlicense/v2?drmToken=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9~eyJ0eXBlIjoiRHJtVG9rZW4iLCJhcHBJZCI6MTUwMDAxNzY0MCwiZmlsZUlkIjoiMjQzNzkxNTc4NjQ4ODI4Nzc5IiwiY3VycmVudFRpbWVTdGFtcCI6MCwiZXhwaXJlVGltZVN0YW1wIjoyMTQ3NDgzNjQ3LCJyYW5kb20iOjAsIm92ZXJsYXlLZXkiOiIiLCJvdmVybGF5SXYiOiIiLCJjaXBoZXJlZE92ZXJsYXlLZXkiOiIiLCJjaXBoZXJlZE92ZXJsYXlJdiI6IiIsImtleUlkIjowLCJzdHJpY3RNb2RlIjowLCJwZXJzaXN0ZW50IjoiT04iLCJyZW50YWxEdXJhdGlvbiI6MCwiZm9yY2VMMVRyYWNrVHlwZXMiOm51bGx9~bTRTEni3j96XeRa17olRo6KT_dvSNrjJCZQ4b7Wb-qw"
          },
          isEnableCache: true
        }],
        controlItems: ['直播列表', '点播列表'],
        controlIndex: 0
      }
    },
    mounted() {
      this.$nextTick(() => {
        this.setPlayConfig();
      })
    },
    methods: {
      changeControl(e) {
        if (this.controlIndex !== e.currentIndex) {
          this.controlIndex = e.currentIndex
        }
      },
      //获取播放内容
      setPlayConfig() {
        if (this.controlIndex == 0) {
          let model = this.liveList[0];
          this.config = {
            appId: "1252463788",
            qualityVisible: true,
            //不显示画中画按钮
            showPIPIV: false,
            playerModels: [model]
          }
          this.isConfig = true
        }
      },
      playLive(data) {
        console.log(data)
        this.$refs.refLevenPlayer.play({
          appId: "1252463788",
          qualityVisible: true,
          //不显示画中画按钮
          showPIPIV: false,
          playerModels: [data]
        })
      },
      playVod(data) {
        if (data.videoModelList) {
          this.$refs.refLevenPlayer.play({
            qualityVisible: true,
            //不显示画中画按钮
            showPIPIV: false,
            playerModels: data.videoModelList
          })
        } else {
          this.$refs.refLevenPlayer.play({
            qualityVisible: true,
            //不显示画中画按钮
            showPIPIV: false,
            playerModels: [data]
          })
        }
      },
      onError(e) {
        console.log("onError:" + JSON.stringify(e.detail))
      },
      onEvent(e) {
        console.log("onEvent:" + JSON.stringify(e.detail))
      },
      onEventMethod(e) {
        console.log("onEventMethod:" + JSON.stringify(e.detail))
      }
    }
  }
</script>

<style>

</style>
vue
<template>
  <!-- #ifdef APP -->
  <scroll-view style="flex:1">
  <!-- #endif -->
    <view style="width: 750rpx; height: 200px; position: relative;">
      <leven-uts-txPlayer ref="refPlayer" v-if="isConfig" style="flex:1; height: 200px; margin-bottom: 20px;"
        :configX="config" @onError="onError" @onEvent="onEvent" @onEventMethod="onEventMethod">
      </leven-uts-txPlayer>
    </view>
    <rice-subsection v-model="controlIndex" :list="controlItems"></rice-subsection>
    <rice-cell-group v-if="controlIndex == 0" border>
      <rice-cell v-for="(item, index) in liveList" :title="item.title" :key="index" arrow clickable center
        @click="playLive(item)">
        <template #leftIcon>
          <rice-image style="margin-right: 5px;" width="30" height="30" :src="item.coverPictureUrl"
            radius="5px"></rice-image>
        </template>
      </rice-cell>
    </rice-cell-group>
    <rice-cell-group v-if="controlIndex == 1" border>
      <rice-cell v-for="(item, index) in vodList" :title="item.title" :key="index" arrow clickable center
        @click="playVod(item)">
        <template #leftIcon>
          <rice-image style="margin-right: 5px;" width="30" height="30"
            :src="item.coverPictureUrl  || item.placeholderImage" radius="5px"></rice-image>
        </template>
      </rice-cell>
    </rice-cell-group>
  <!-- #ifdef APP -->
  </scroll-view>
  <!-- #endif -->
</template>

<script setup lang="uts">
  import JSONObject from 'com.alibaba.fastjson.JSONObject'
  import { TXVodConstants } from "@/utils/txPlayer/TXVodConstants.uts"

  //组件引用
  const refPlayer = ref<LevenUtsTxPlayerElement | null>(null)

  const isConfig = ref(false);
  const config = ref({})
  const controlIndex = ref(0)
  const controlItems = ref(['直播列表', '点播列表'])

  //直播列表
  const liveList = [{
    title: "FLV直播",
    placeholderImage: "http://1500005830.vod2.myqcloud.com/6c9a5118vodcq1500005830/66bc542f387702300661648850/0RyP1rZfkdQA.png",
    url: "http://liteavapp.qcloud.com/live/liteavdemoplayerstreamid.flv",
    coverPictureUrl: "http://1500005830.vod2.myqcloud.com/6c9a5118vodcq1500005830/66bc542f387702300661648850/0RyP1rZfkdQA.png"
  }, {
    title: "RTMP直播",
    placeholderImage: "http://1500005830.vod2.myqcloud.com/6c9a5118vodcq1500005830/66bc542f387702300661648850/0RyP1rZfkdQA.png",
    url: "rtmp://liteavapp.qcloud.com/live/liteavdemoplayerstreamid",
    coverPictureUrl: "http://1500005830.vod2.myqcloud.com/6c9a5118vodcq1500005830/66bc542f387702300661648850/0RyP1rZfkdQA.png"
  }, {
    title: "WebRTC直播",
    placeholderImage: "http://1500005830.vod2.myqcloud.com/6c9a5118vodcq1500005830/66bc542f387702300661648850/0RyP1rZfkdQA.png",
    url: "webrtc://liteavapp.qcloud.com/live/liteavdemoplayerstreamid",
    coverPictureUrl: "http://1500005830.vod2.myqcloud.com/6c9a5118vodcq1500005830/66bc542f387702300661648850/0RyP1rZfkdQA.png"
  }, {
    title: "HLS直播",
    placeholderImage: "http://1500005830.vod2.myqcloud.com/6c9a5118vodcq1500005830/66bc542f387702300661648850/0RyP1rZfkdQA.png",
    url: "http://liteavapp.qcloud.com/live/liteavdemoplayerstreamid.m3u8",
    coverPictureUrl: "http://1500005830.vod2.myqcloud.com/6c9a5118vodcq1500005830/66bc542f387702300661648850/0RyP1rZfkdQA.png"
  }]

  //点播列表
  const vodList = [{
    appId: "1500005830",
    videoId: {
      fileId: "387702299774251236",
    },
    title: "腾讯云音视频成就",
    coverPictureUrl: "http://1500005830.vod2.myqcloud.com/43843ec0vodtranscq1500005830/48d0f1f9387702299774251236/coverBySnapshot/coverBySnapshot_10_0.jpg"
  }, {
    appId: "1500005830",
    videoId: {
      fileId: "387702299774390972",
    },
    title: "动态水印演示",
    coverPictureUrl: "http://1500005830.vod2.myqcloud.com/6c9a5118vodcq1500005830/4b6e0e84387702299774390972/387702299947629622.png",
    dynamicWaterConfig: {
      tipText: "shipinyun",
      tipTextSize: 30,
      tipTextColor: "#FF3333"
    }
  }, {
    appId: "1500005830",
    videoId: {
      fileId: "387702299774253670",
    },
    title: "化繁为简,以小建大",
    coverPictureUrl: "http://1500005830.vod2.myqcloud.com/6c9a5118vodcq1500005830/48d21c3d387702299774253670/387702299947604155.png"
  }, {
    appId: "1500005830",
    videoId: {
      fileId: "387702299774574470",
    },
    title: "数字是什么",
    coverPictureUrl: "http://1500005830.vod2.myqcloud.com/6c9a5118vodcq1500005830/4ff64b01387702299774574470/387702304138941858.png"
  }, {
    appId: "1500005830",
    videoId: {
      fileId: "387702299774545556",
    },
    title: "试看功能演示",
    coverPictureUrl: "http://1500005830.vod2.myqcloud.com/6c9a5118vodcq1500005830/4fc091e4387702299774545556/387702299947278317.png",
    vipWatchModel: {
      tip: "可试看15s,开通VIP观看完整视频",
      canWatchTime: 15
    }
  }, {
    appId: "1500005830",
    playAction: 1,
    videoId: {
      fileId: "8602268011437356984",
    },
    title: "自定义封面演示",
    coverPictureUrl: "http://1500005830.vod2.myqcloud.com/6c9a5118vodcq1500005830/cc1e28208602268011087336518/MXUW1a5I9TsA.png"
  }, {
    appId: "1500005830",
    playAction: 1,
    title: "加密视频_腾讯云业务介绍",
    videoId: {
      fileId: "243791578431393746",
      pSign: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhcHBJZCI6MTUwMDA" +
        "wNTgzMCwiZmlsZUlkIjoiMjQzNzkxNTc4NDMxMzkzNzQ2IiwiY3VycmVudFRpbWVTdGFtc" +
        "CI6MTY3MzQyNjIyNywiY29udGVudEluZm8iOnsiYXVkaW9WaWRlb1R5cGUiOiJQcm90ZWN0" +
        "ZWRBZGFwdGl2ZSIsImRybUFkYXB0aXZlSW5mbyI6eyJwcml2YXRlRW5jcnlwdGlvbkRlZmluaX" +
        "Rpb24iOjEyfX0sInVybEFjY2Vzc0luZm8iOnsiZG9tYWluIjoiMTUwMDAwNTgzMC52b2QyLm15cWNs" +
        "b3VkLmNvbSIsInNjaGVtZSI6IkhUVFBTIn19.q34pq7Bl0ryKDwUHGyzfXKP-CDI8vrm0k_y-IaxgF_U"
    },
    placeholderImage: "https://1500005830.vod2.myqcloud.com/6c9a5118vodcq1500005830/35ab25fb243791578431393746/onEqUp.png",
  }, {
    appId: "1500006438",
    playAction: 1,
    title: "幽灵水印视频",
    videoId: {
      fileId: "387702307847129127",
      pSign: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhcHBJZCI6MTUwMDA" +
        "wNjQzOCwiZmlsZUlkIjoiMzg3NzAyMzA3ODQ3MTI5MTI3IiwiY29udG" +
        "VudEluZm8iOnsiYXVkaW9WaWRlb1R5cGUiOiJSYXdBZGFwdGl2ZSIsIn" +
        "Jhd0FkYXB0aXZlRGVmaW5pdGlvbiI6MTB9LCJjdXJyZW50VGltZVN0YW1w" +
        "IjoxNjg2ODgzMzYwLCJnaG9zdFdhdGVybWFya0luZm8iOnsidGV4dCI6I" +
        "mdob3N0IGlzIHdhdGNoaW5nIn19.0G2o4P5xVZ7zF" +
        "lFUgBLntfX03iGxK9ntD_AONClUUno"
    },
    placeholderImage: "http://1500006438.vod2.myqcloud.com/4384ba25vodtranscq1500006438/558b62f3387702307847129127/coverBySnapshot_10_0.jpg",
  }, {
    placeholderImage: "http://1500005830.vod2.myqcloud.com/43843ec0vodtranscq1500005830/dc455d1d387702306937256938/coverBySnapshot_10_0.jpg",
    url: "http://1500005830.vod2.myqcloud.com/43843ec0vodtranscq1500005830/dc455d1d387702306937256938/adp.10.m3u8",
    title: "多字幕视频",
    subtitleSourceModelList: [{
      name: "ex-cn-srt",
      url: "https://mediacloud-76607.gzc.vod.tencent-cloud.com/DemoResource/TED-CN.srt",
      mimeType: TXVodConstants.VOD_PLAY_MIMETYPE_TEXT_SRT
    }, {
      name: "ex-in-srt",
      url: "https://mediacloud-76607.gzc.vod.tencent-cloud.com/DemoResource/TED-IN.srt",
      mimeType: TXVodConstants.VOD_PLAY_MIMETYPE_TEXT_SRT
    }, {
      name: "ex-en-vtt",
      url: "https://mediacloud-76607.gzc.vod.tencent-cloud.com/DemoResource/TED-EN.vtt",
      mimeType: TXVodConstants.VOD_PLAY_MIMETYPE_TEXT_VTT
    }]
  }, {
    title: "多音轨视频",
    url: "http://1500005830.vod2.myqcloud.com/6c9a5118vodcq1500005830/3a76d6ac387702303793151471/iP3rnDdxMH4A.mov",
    placeholderImage: "http://1500005830.vod2.myqcloud.com/6c9a5118vodcq1500005830/3a76d6ac387702303793151471/387702307093360124.png"
  }, {
    title: "视频列表轮播演示",
    isEnableCache: false,
    placeholderImage: "http://1500005830.vod2.myqcloud.com/6c9a5118vodcq1500005830/6f443f33387702302226773793/2luyOg7pOR0A.png",
    videoModelList: [{
      appId: "1500005830",
      videoId: {
        fileId: "387702299774211080",
      },
      title: "腾讯云音视频——全",
      coverPictureUrl: "http://1500005830.vod2.myqcloud.com/43843ec0vodtranscq1500005830/48888812387702299774211080/coverBySnapshot/coverBySnapshot_10_0.jpg"
    }, {
      appId: "1500005830",
      videoId: {
        fileId: "387702299774644824",
      },
      title: "腾讯云音视频——真",
      coverPictureUrl: "http://1500005830.vod2.myqcloud.com/43843ec0vodtranscq1500005830/52153a82387702299774644824/coverBySnapshot/coverBySnapshot_10_0.jpg"
    }, {
      appId: "1500005830",
      videoId: {
        fileId: "387702299774544650",
      },
      title: "腾讯云音视频——稳",
      coverPictureUrl: "http://1500005830.vod2.myqcloud.com/43843ec0vodtranscq1500005830/4fc009be387702299774544650/coverBySnapshot/coverBySnapshot_10_0.jpg"
    }]
  }, {
    title: "离线缓存(全屏)演示",
    isEnableCache: true,
    placeholderImage: "http://1500005830.vod2.myqcloud.com/6c9a5118vodcq1500005830/ae6444ab387702302227194724/n6SJb2ORhQMA.png",
    videoModelList: [{
      appId: "1500005830",
      videoId: {
        fileId: "387702299773851453",
      },
      title: "不只是音视频 1",
      coverPictureUrl: "http://1500005830.vod2.myqcloud.com/43843ec0vodtranscq1500005830/09d5b1bf387702299773851453/coverBySnapshot/coverBySnapshot_10_0.jpg",
      isEnableCache: true,
    }, {
      appId: "1500005830",
      videoId: {
        fileId: "387702299774155981",
      },
      title: "不只是音视频 2",
      coverPictureUrl: "http://1500005830.vod2.myqcloud.com/43843ec0vodtranscq1500005830/467e1943387702299774155981/coverBySnapshot/coverBySnapshot_10_0.jpg",
      isEnableCache: true,
    }, {
      appId: "1500005830",
      videoId: {
        fileId: "387702299773830943",
      },
      title: "不只是音视频 3",
      coverPictureUrl: "http://1500005830.vod2.myqcloud.com/43843ec0vodtranscq1500005830/09b10980387702299773830943/coverBySnapshot/coverBySnapshot_10_0.jpg",
      isEnableCache: true,
    }, {
      appId: "1500005830",
      videoId: {
        fileId: "387702299773823860",
      },
      title: "不只是音视频 4",
      coverPictureUrl: "http://1500005830.vod2.myqcloud.com/43843ec0vodtranscq1500005830/09a09220387702299773823860/coverBySnapshot/coverBySnapshot_10_0.jpg",
      isEnableCache: true,
    }, {
      appId: "1500005830",
      videoId: {
        fileId: "387702299774156604",
      },
      title: "不只是音视频 5",
      coverPictureUrl: "http://1500005830.vod2.myqcloud.com/43843ec0vodtranscq1500005830/467e97dc387702299774156604/coverBySnapshot/coverBySnapshot_10_0.jpg",
      isEnableCache: true,
    }]
  }, {
    title: "DRM视频",
    coverPictureUrl: "http://1500005830.vod2.myqcloud.com/6c9a5118vodcq1500005830/4ff64b01387702299774574470/387702304138941858.png",
    drmBuilder: {
      playUrl: "https://1500017640.vod2.myqcloud.com/439767a2vodtranscq1500017640/30eb640e243791578648828779/adp.1434415.mpd",
      keyLicenseUrl: "https://widevine.drm.vod-qcloud.com/widevine/getlicense/v2?drmToken=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9~eyJ0eXBlIjoiRHJtVG9rZW4iLCJhcHBJZCI6MTUwMDAxNzY0MCwiZmlsZUlkIjoiMjQzNzkxNTc4NjQ4ODI4Nzc5IiwiY3VycmVudFRpbWVTdGFtcCI6MCwiZXhwaXJlVGltZVN0YW1wIjoyMTQ3NDgzNjQ3LCJyYW5kb20iOjAsIm92ZXJsYXlLZXkiOiIiLCJvdmVybGF5SXYiOiIiLCJjaXBoZXJlZE92ZXJsYXlLZXkiOiIiLCJjaXBoZXJlZE92ZXJsYXlJdiI6IiIsImtleUlkIjowLCJzdHJpY3RNb2RlIjowLCJwZXJzaXN0ZW50IjoiT04iLCJyZW50YWxEdXJhdGlvbiI6MCwiZm9yY2VMMVRyYWNrVHlwZXMiOm51bGx9~bTRTEni3j96XeRa17olRo6KT_dvSNrjJCZQ4b7Wb-qw"
    },
    isEnableCache: true
  }]

  function playLive(data : UTSJSONObject) {
    let options = {
      appId: "1252463788",
      qualityVisible: true,
      //不显示画中画按钮
      showPIPIV: false,
      playerModels: [data]
    };
    let params = JSONObject.parse(JSON.stringify(options)) as JSONObject
    console.log(params)
    refPlayer.value?.play(params)
  }

  function playVod(data : UTSJSONObject) {
    let videoModelList = data.getArray("videoModelList")
    if (videoModelList != null) {
      let options = {
        qualityVisible: true,
        //不显示画中画按钮
        showPIPIV: false,
        playerModels: videoModelList
      };
      let params = JSONObject.parse(JSON.stringify(options)) as JSONObject
      refPlayer.value?.play(params)
    } else {
      let options = {
        qualityVisible: true,
        //不显示画中画按钮
        showPIPIV: false,
        playerModels: [data]
      }
      let params = JSONObject.parse(JSON.stringify(options)) as JSONObject
      refPlayer.value?.play(params)
    }
  }

  function setPlayConfig() {
    if (controlIndex.value == 0) {
      let model = liveList[0];
      config.value = {
        appId: "1252463788",
        qualityVisible: true,
        //不显示画中画按钮
        showPIPIV: false,
        playerModels: [model]
      }
      isConfig.value = true
    }
  }

  //错误事件
  function onError(e : JSONObject) {
    console.log("onError:" + JSON.stringify(e))
  }

  //其他事件
  function onEvent(e : JSONObject) {
    console.log("onEvent:" + JSON.stringify(e))
  }

  //方法事件
  function onEventMethod(e : JSONObject) {
    console.log("onEventMethod:" + JSON.stringify(e))
  }

  onMounted(() => {
    setPlayConfig();
  })
</script>

<style>

</style>