touping模块实现局域网内基于DLNA的视频投屏功能,并支持搜索设备,投屏播放,调节播放进度,调节音量,退出投屏等功能。
`1. <!DOCTYPE HTML>

  1. <html>
  2. <head>
  3.     <meta charset="utf-8">
  4.     <meta name="viewport" content="maximum-scale=1.0,minimum-scale=1.0,user-scalable=0,width=device-width,initial-scale=1.0" />
  5.     <meta name="format-detection" content="telephone=no,email=no,date=no,address=no">
  6.     <title>AUI快速完成布局</title>
  7.     <link rel="stylesheet" type="text/css" href="../css/aui.css" />
  8. </head>
  9. <body>
  10.     <div class="aui-tips">
  11.         <div class="aui-tips-title aui-ellipsis-1" id="tips">请点击底部“搜索设备”按钮,进行可投屏设备搜索</div>
  12.     </div>
  13.     <div class="aui-content aui-margin-b-15">
  14.         <ul class="aui-list aui-list-in" id="deviceList">
  15.         </ul>
  16.     </div>
  17.     <div >
  18.         <div class="aui-range" >
  19.             音量 <input type="range" class="aui-range" value="0" max="100" min="1" step="1" id="rangeVolume" />
  20.         </div>
  21.         <div class="aui-range" >
  22.             进度 <input type="range" class="aui-range" value="0" max="100" min="1" step="1" id="rangeSeek" />
  23.         </div>
  24.     </div>
  25.     <footer class="aui-bar aui-bar-tab" id="footer">
  26.         <div class="aui-bar-tab-item " tapmode>
  27.             <div class="aui-bar-tab-label">搜索设备</div>
  28.         </div>
  29.         <div class="aui-bar-tab-item" tapmode>
  30.             <div class="aui-bar-tab-label">视频投屏</div>
  31.         </div>
  32.         <div class="aui-bar-tab-item" tapmode>
  33.             <div class="aui-bar-tab-label">切换视频</div>
  34.         </div>
  35.         <div class="aui-bar-tab-item" tapmode>
  36.             <div class="aui-bar-tab-label">退出投屏</div>
  37.         </div>
  38.         <div class="aui-bar-tab-item" tapmode >
  39.         </div>
  40.     </footer>
  41. </body>
  42. <script type="text/javascript" src="../script/api.js"></script>
  43. <script type="text/javascript" src="../script/aui-tab.js"></script>
  44. <script type="text/javascript" src="../script/aui-range.js"></script>
  45. <script type="text/javascript">
  46.     var touping;
  47.     var deviceIndex;
  48.     apiready = function() {
  49.         api.parseTapmode();
  50.         touping = api.require('touping');
  51.     }
  52.     var tab = new auiTab({
  53.         element: document.getElementById("footer"),
  54.         index: 5,
  55.         repeatClick: true
  56.     }, function(ret) {
  57.         console.log(ret.index);
  58.         if (ret) {
  59.             if (ret.index == 1) {
  60.                 browse();
  61.             } else if (ret.index == 2) {
  62.                 play();
  63.             } else if (ret.index == 3) {
  64.                 playUrl();
  65.             } else if (ret.index == 4) {
  66.                 stop();
  67.             }
  68.         }
  69.     });
  70.     function browse() {
  71.         $api.byId('deviceList').innerHTML = '';
  72.         touping.browse(function(ret, err) {
  73.             if (ret.status) {
  74.                 showDeviceList(ret.deviceList);
  75.                 document.getElementById("tips").textContent = "搜索到" + ret.deviceList.length + "个设备,请选择要投屏的设备";
  76.             } else {
  77.                 document.getElementById("tips").textContent = "未搜索到设备,请检查当前局域网内是否有可投屏设备";
  78.             }
  79.         });
  80.     }
  81.     function showDeviceList(deviceList) {
  82.         for (var i = 0; i < deviceList.length; i++) {
  83.             var item = '<li class="aui-list-item" onclick="choiceDevice("' + deviceList[i].name + '",' + i + ')">';
  84.             item += '<div class="aui-list-item-inner">';
  85.             item += deviceList[i].name;
  86.             item += '</div>';
  87.             item += '</li>';
  88.             $api.byId('deviceList').insertAdjacentHTML('beforeEnd', item);
  89.         }
  90.     }
  91.     function choiceDevice(name, index) {
  92.         deviceIndex = index;
  93.         document.getElementById("tips").textContent = "您选择了 " + name + " 进行投屏";
  94.     }
  95.     function play() {
  96.         touping.play({
  97.             index: deviceIndex,
  98.             url: "http://wvideo.spriteapp.cn/video/2016/0328/56f8ec01d9bfe_wpd.mp4"
  99.         }, function(ret, err) {
  100.               alert(JSON.stringify(ret));
  101.         });
  102.     }
  103.     function playUrl() {
  104.         touping.playUrl({
  105.             url: "http://file.qiushiriji.com/file/video/2019-08-13/172/1565702535263.mp4"
  106.         }, function(ret, err) {
  107.             alert(JSON.stringify(ret));
  108.         });
  109.     }
  110.     function stop() {
  111.         touping.stop(function(ret, err) {
  112.             alert(JSON.stringify(ret));
  113.         });
  114.     }
  115.     function volume(value) {
  116.         touping.volume({
  117.             value: value
  118.         }, function(ret, err) {
  119.             console.log(JSON.stringify(ret));
  120.         });
  121.     }
  122.     function seek(value) {
  123.         touping.seek({
  124.             value: value
  125.         }, function(ret, err) {
  126.             console.log(JSON.stringify(ret));
  127.         });
  128.     }
  129.     var range1 = new auiRange({
  130.         element: document.getElementById("rangeVolume") //滑块容器
  131.     }, function(ret) {
  132.         volume(ret.value);
  133.     })
  134.     var range2 = new auiRange({
  135.         element: document.getElementById("rangeSeek") //滑块容器
  136.     }, function(ret) {
  137.         seek(ret.value);
  138.     })
  139. </script>
  140. </html>

_复制代码_`


YonBuilder
17 声望9 粉丝

用友YonBuilder移动低代码开发平台,快速构建高性能多端应用