ui_voice.html 41 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756
  1. <!--
  2. 使用说明:
  3. 1. 本页面为示例demo
  4. 2. 使用过程需要js,css,解码器(decoderPath,filePath)资源路径(/ezuikit-talk/ezuikit_v2.6.4/XX)更改为项目实际路径,引入依赖。
  5. -->
  6. <!DOCTYPE html>
  7. <html lang="en">
  8. <head>
  9. <meta charset="UTF-8"/>
  10. <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
  11. <meta http-equiv="X-UA-Compatible" content="ie=edge"/>
  12. <script>
  13. // 加载js
  14. function addJs(filepath, callback) {
  15. var oJs = document.createElement("script");
  16. oJs.setAttribute("src", filepath);
  17. oJs.onload = callback;
  18. document.getElementsByTagName("head")[0].appendChild(oJs);
  19. }
  20. // 加载css
  21. function addCss(filepath, callback) {
  22. var oJs = document.createElement('link');
  23. oJs.rel = 'stylesheet';
  24. oJs.type = 'text/css';
  25. oJs.href = filepath;
  26. oJs.onload = callback;
  27. document.getElementsByTagName("head")[0].appendChild(oJs);
  28. }
  29. console.log("ezuikitTalkData------", ezuikitTalkData)
  30. var layerPath = ezuikitTalkData.decoderPath + '/js/layer/layer.js';
  31. var ezuikitPath = ezuikitTalkData.decoderPath + '/ezuikit.js';
  32. var ezuikitTalkPath = ezuikitTalkData.decoderPath + '/ezuikit-talk.js';
  33. addJs(ezuikitTalkPath, function () {
  34. EZUITalk = new EZUITalk({
  35. accessToken: ezuikitTalkData.accessToken,
  36. url: url,
  37. filePath: ezuikitTalkData.decoderPath + '/js/talk/',
  38. handleError: function (err) {
  39. layer.msg("网络错误,请稍后再试");
  40. }
  41. });
  42. })
  43. addJs(ezuikitPath, function () {
  44. })
  45. addJs(layerPath, function () {
  46. })
  47. var liveCssPath = ezuikitTalkData.decoderPath + '/css/live.css';
  48. var recoderCssPath = ezuikitTalkData.decoderPath + '/css/recoder.css';
  49. addCss(liveCssPath, function () {
  50. });
  51. addCss(recoderCssPath, function () {
  52. });
  53. </script>
  54. <title>Document</title>
  55. <style>
  56. html,
  57. body {
  58. margin: 0;
  59. padding: 0;
  60. overflow: hidden;
  61. height: 100%;
  62. width: 100%;
  63. background: black;
  64. }
  65. .disabled {
  66. cursor: not-allowed;
  67. }
  68. .iframe-btn-container {
  69. display: inline-block;
  70. width: 100%;
  71. height: 32px;
  72. text-align: left;
  73. z-index: 1000;
  74. position: absolute;
  75. bottom: 0px;
  76. left: 0;
  77. color: #fff;
  78. background: rgba(0, 0, 0, 0.65);
  79. padding: 10px 0;
  80. cursor: pointer;
  81. }
  82. .iframe-btn-container span {
  83. display: inline-block;
  84. margin-left: 20px;
  85. }
  86. .iframe-btn-container span:last-child {
  87. position: absolute;
  88. right: 10px;
  89. }
  90. .in {
  91. opacity: 1;
  92. }
  93. .hide {
  94. display: none !important;
  95. }
  96. .transparency {
  97. opacity: 0;
  98. }
  99. </style>
  100. </head>
  101. <body>
  102. <script>
  103. var startSave = false;
  104. var playing = false;
  105. var decoder;
  106. </script>
  107. <div class="panel-top">
  108. <div id="deviceSerial" class="deviceSerial"></div>
  109. <div class="contros">
  110. <!-- 拍照 -->
  111. <span title="截图">
  112. <svg id="capturePicture" title="截图" t="1578882764585" class="icon" viewBox="0 0 1024 1024" version="1.1"
  113. xmlns="http://www.w3.org/2000/svg" p-id="5958" width="24" height="24">
  114. <path
  115. d="M887.296 315.904h-153.6c-51.2 0-68.096-102.4-119.296-102.4H392.704c-34.304 0-51.2 102.4-102.4 102.4h-153.6c-29.696 0-51.2 21.504-51.2 51.2v439.296c0 25.6 21.504 47.104 51.2 47.104h751.104c29.696 0 51.2-21.504 51.2-51.2v-435.2c-0.512-30.208-21.504-51.2-51.712-51.2zM512 768c-115.2 0-204.8-89.6-204.8-200.704s89.6-200.704 204.8-200.704 204.8 89.6 204.8 200.704-93.696 200.704-204.8 200.704z m247.296-354.304c-12.8 0-25.6-12.8-25.6-25.6s12.8-25.6 25.6-25.6 25.6 12.8 25.6 25.6c0 17.408-12.8 25.6-25.6 25.6zM256 264.704c0-8.704-8.704-16.896-16.896-16.896h-51.2c-8.704 0-16.896 8.704-16.896 16.896V281.6H256v-16.896z m256 148.992c-85.504 0-153.6 68.096-153.6 153.6s68.096 153.6 153.6 153.6 153.6-68.096 153.6-153.6-68.096-153.6-153.6-153.6z"
  116. fill="#ffffff" p-id="5959"></path>
  117. </svg>
  118. </span>
  119. <!-- 录制 -->
  120. <span title="开始录像">
  121. <svg id="startSave" t="1578882716693" class="icon" viewBox="0 0 1024 1024" version="1.1"
  122. xmlns="http://www.w3.org/2000/svg" p-id="3782" width="24" height="24">
  123. <path
  124. d="M915.2 729.6l-128-76.8c-25.6-12.8-44.8-32-44.8-51.2V435.2c0-25.6 19.2-38.4 44.8-51.2l128-76.8c25.6-12.8 44.8 0 44.8 19.2V704c0 32-19.2 38.4-44.8 25.6z m-332.8 89.6H96c-51.2 0-89.6-38.4-89.6-89.6V332.8c0-51.2 38.4-89.6 89.6-89.6h486.4c51.2 0 89.6 38.4 89.6 89.6v396.8c0 51.2-38.4 89.6-89.6 89.6zM192 364.8c-32 6.4-57.6 32-64 64-12.8 57.6 38.4 115.2 96 102.4 32-6.4 57.6-32 64-70.4 12.8-57.6-38.4-108.8-96-96z m0 0"
  125. p-id="3783" fill="#ffffff"></path>
  126. </svg>
  127. </span>
  128. <!-- 录制 -->
  129. <span title="结束录像">
  130. <svg id="stopSave" t="1578882716693" class="icon" viewBox="0 0 1024 1024" version="1.1"
  131. xmlns="http://www.w3.org/2000/svg" p-id="3782" width="24" height="24">
  132. <path
  133. d="M915.2 729.6l-128-76.8c-25.6-12.8-44.8-32-44.8-51.2V435.2c0-25.6 19.2-38.4 44.8-51.2l128-76.8c25.6-12.8 44.8 0 44.8 19.2V704c0 32-19.2 38.4-44.8 25.6z m-332.8 89.6H96c-51.2 0-89.6-38.4-89.6-89.6V332.8c0-51.2 38.4-89.6 89.6-89.6h486.4c51.2 0 89.6 38.4 89.6 89.6v396.8c0 51.2-38.4 89.6-89.6 89.6zM192 364.8c-32 6.4-57.6 32-64 64-12.8 57.6 38.4 115.2 96 102.4 32-6.4 57.6-32 64-70.4 12.8-57.6-38.4-108.8-96-96z m0 0"
  134. p-id="3783" fill="red"></path>
  135. </svg>
  136. </span>
  137. <!-- 电子放大 -->
  138. <span title="开启电子放大">
  139. <svg id="enableZoom" t="1578882639834" class="icon" viewBox="0 0 1000 1000" version="1.1"
  140. xmlns="http://www.w3.org/2000/svg" p-id="2227" width="24" height="24">
  141. <path
  142. d="M830.6119 441.1089c0-193.7756-157.0939-350.8641-350.8775-350.8641S128.8559 247.3333 128.8559 441.1089 285.9508 791.972 479.7344 791.972 830.6119 634.8845 830.6119 441.1089zM483.2821 710.4863c-146.7975 0-265.8187-118.9953-265.8187-265.8088S336.4847 178.8697 483.2821 178.8697s265.8197 118.9953 265.8197 265.8078S630.0796 710.4863 483.2821 710.4863zM770.6031 653.5739l-72.6417 75.9485 141.6917 160.1814 82.0737-90.0739L770.6031 653.5739zM527.5849 267.4727h-88.60655762279428v132.90489048425167H306.0690340253259v88.60292721534799h132.90933675248866v132.9038911617923h88.60655762279428V488.9794719180395h132.90933675248866v-88.60292721534799H527.5849284006089V267.4726535408993z"
  143. p-id="2228" fill="#ffffff"></path>
  144. </svg>
  145. </span>
  146. <span title="关闭电子放大">
  147. <svg id="closeZoom" t="1578882639834" class="icon" viewBox="0 0 1000 1000" version="1.1"
  148. xmlns="http://www.w3.org/2000/svg" p-id="2227" width="24" height="24">
  149. <path
  150. d="M830.6119 441.1089c0-193.7756-157.0939-350.8641-350.8775-350.8641S128.8559 247.3333 128.8559 441.1089 285.9508 791.972 479.7344 791.972 830.6119 634.8845 830.6119 441.1089zM483.2821 710.4863c-146.7975 0-265.8187-118.9953-265.8187-265.8088S336.4847 178.8697 483.2821 178.8697s265.8197 118.9953 265.8197 265.8078S630.0796 710.4863 483.2821 710.4863zM770.6031 653.5739l-72.6417 75.9485 141.6917 160.1814 82.0737-90.0739L770.6031 653.5739zM527.5849 267.4727h-88.60655762279428v132.90489048425167H306.0690340253259v88.60292721534799h132.90933675248866v132.9038911617923h88.60655762279428V488.9794719180395h132.90933675248866v-88.60292721534799H527.5849284006089V267.4726535408993z"
  151. p-id="2228" fill="red"></path>
  152. </svg>
  153. </span>
  154. </div>
  155. </div>
  156. <div id="playWind"></div>
  157. <div id="audioleft" style="display: none;"></div>
  158. <div id="audioright" style="display: none;"></div>
  159. <div class="audio-controls">
  160. <!-- 对讲 -->
  161. <div class="ptp-talk off" id="startTalk">
  162. <span title="对讲">
  163. <svg t="1581930496966" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"
  164. p-id="1641" width="16" height="16">
  165. <path
  166. d="M715.648 647.872c-30.208-22.336-61.568 39.36-100.992 77.44-39.36 38.08-34.112 31.488-123.392-17.088S311.488 540.224 280 491.648C248.448 443.072 265.472 424.704 265.472 424.704s78.72-62.976 97.152-81.344c18.368-18.368 13.12-30.208 13.12-30.208l-128.64-190.144c-23.616-5.184-64.32 5.12-128.576 57.6C54.208 233.088 30.592 353.856 151.296 575.68c120.768 221.824 347.84 330.752 485.568 374.08 137.856 43.328 228.416-61.696 249.408-103.68 21.056-41.984 13.12-85.312 13.12-85.312S745.856 670.208 715.648 647.872z"
  167. p-id="1642" fill="#ffffff"></path>
  168. <path
  169. d="M715.328 64C580.992 64 472.192 172.864 472.192 307.2s108.8 243.2 243.136 243.2 243.2-108.864 243.2-243.2S849.6 64 715.328 64zM715.328 461.056c-84.992 0-153.856-68.864-153.856-153.856s68.864-153.856 153.856-153.856 153.856 68.928 153.856 153.856S800.32 461.056 715.328 461.056z"
  170. p-id="1643" fill="#ffffff"></path>
  171. <path
  172. d="M777.472 277.376c-18.176 0-32.96-14.784-32.96-33.024 0-8.448 3.136-16.064 8.32-21.888-11.52-5.12-24.128-8-37.568-8-51.2 0-92.672 41.472-92.672 92.736s41.472 92.736 92.672 92.736S808.064 358.4 808.064 307.2c0-13.696-3.072-26.688-8.384-38.4C793.728 274.112 786.048 277.376 777.472 277.376zM715.328 340.928c-18.624 0-33.664-15.104-33.664-33.728 0-18.624 15.04-33.728 33.664-33.728 18.688 0 33.728 15.104 33.728 33.728C749.056 325.824 734.016 340.928 715.328 340.928z"
  173. p-id="1644" fill="#ffffff"></path>
  174. </svg>
  175. </span>
  176. <span>开启对讲</span>
  177. </div>
  178. <div class="ptp-talk on" id="stopTalk">
  179. <span title="对讲">
  180. <svg t="1581930496966" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"
  181. p-id="1641" width="16" height="16">
  182. <path
  183. d="M715.648 647.872c-30.208-22.336-61.568 39.36-100.992 77.44-39.36 38.08-34.112 31.488-123.392-17.088S311.488 540.224 280 491.648C248.448 443.072 265.472 424.704 265.472 424.704s78.72-62.976 97.152-81.344c18.368-18.368 13.12-30.208 13.12-30.208l-128.64-190.144c-23.616-5.184-64.32 5.12-128.576 57.6C54.208 233.088 30.592 353.856 151.296 575.68c120.768 221.824 347.84 330.752 485.568 374.08 137.856 43.328 228.416-61.696 249.408-103.68 21.056-41.984 13.12-85.312 13.12-85.312S745.856 670.208 715.648 647.872z"
  184. p-id="1642" fill="#ff0000"></path>
  185. <path
  186. d="M715.328 64C580.992 64 472.192 172.864 472.192 307.2s108.8 243.2 243.136 243.2 243.2-108.864 243.2-243.2S849.6 64 715.328 64zM715.328 461.056c-84.992 0-153.856-68.864-153.856-153.856s68.864-153.856 153.856-153.856 153.856 68.928 153.856 153.856S800.32 461.056 715.328 461.056z"
  187. p-id="1643" fill="#ff0000"></path>
  188. <path
  189. d="M777.472 277.376c-18.176 0-32.96-14.784-32.96-33.024 0-8.448 3.136-16.064 8.32-21.888-11.52-5.12-24.128-8-37.568-8-51.2 0-92.672 41.472-92.672 92.736s41.472 92.736 92.672 92.736S808.064 358.4 808.064 307.2c0-13.696-3.072-26.688-8.384-38.4C793.728 274.112 786.048 277.376 777.472 277.376zM715.328 340.928c-18.624 0-33.664-15.104-33.664-33.728 0-18.624 15.04-33.728 33.664-33.728 18.688 0 33.728 15.104 33.728 33.728C749.056 325.824 734.016 340.928 715.328 340.928z"
  190. p-id="1644" fill="#ff0000"></path>
  191. </svg>
  192. </span>
  193. <span>关闭对讲</span>
  194. </div>
  195. <!-- 语音播报 -->
  196. <div class="broadcast off" id="startBroadcast">
  197. <span title="语音播报">
  198. <svg t="1583561695846" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"
  199. p-id="1126" width="16" height="16">
  200. <path
  201. d="M513.82044445 964.38044445c-8.192 0-15.47377778-2.73066667-21.84533334-8.192 0 0-46.42133333-41.87022222-99.21422222-86.47111112-89.20177778-73.728-117.41866667-88.29155555-123.79022222-90.112H35.04355555c-14.56355555 0-26.39644445-11.83288889-26.39644444-27.30666666V271.70133333c0-14.56355555 11.83288889-27.30666667 26.39644444-27.30666666H246.21511111c7.28177778-2.73066667 37.31911111-15.47377778 137.44355556-91.02222222 58.25422222-43.69066667 111.04711111-86.47111111 111.04711111-86.47111112 5.46133333-4.55111111 12.74311111-7.28177778 20.02488889-7.28177778 4.55111111 0 10.01244445 0.91022222 14.56355555 3.6408889 10.92266667 5.46133333 18.20444445 17.29422222 18.20444445 30.03733333v837.40444444c0 12.74311111-7.28177778 25.48622222-19.11466667 30.94755556-5.46133333 1.82044445-10.01244445 2.73066667-14.56355555 2.73066667zM270.79111111 724.992c19.11466667 0 48.24177778 8.192 167.48088889 106.496 16.384 13.65333333 33.67822222 28.21688889 51.88266667 43.69066667l5.46133333 4.55111111V139.71911111l-5.46133333 3.64088889c-22.75555555 17.29422222-44.60088889 34.58844445-65.536 50.06222222C293.54666667 291.72622222 264.41955555 299.008 245.30488889 299.008H82.37511111c-20.02488889 0-21.84533333 12.74311111-21.84533333 26.39644445V694.04444445c0 23.66577778 6.37155555 30.03733333 28.21688889 30.03733333h180.224l1.82044444 0.91022222z m520.64711111 162.01955555c-14.56355555 0-26.39644445-11.83288889-26.39644444-27.30666666 0-11.83288889 8.192-20.02488889 16.384-24.576 112.86755555-67.35644445 182.04444445-191.14666667 182.04444444-324.03911111 0-132.89244445-70.08711111-256.68266667-182.04444444-324.03911111-10.01244445-5.46133333-15.47377778-14.56355555-15.47377778-24.576 0-14.56355555 11.83288889-27.30666667 26.39644445-27.30666667 5.46133333 0 10.01244445 1.82044445 16.384 5.46133333 128.34133333 76.45866667 207.53066667 218.45333333 207.53066666 369.55022222 0 152.00711111-80.09955555 293.09155555-208.44088889 369.55022223-6.37155555 5.46133333-10.92266667 7.28177778-16.384 7.28177777z m-90.112-152.91733333c-14.56355555 0-26.39644445-11.83288889-26.39644444-27.30666667 0-10.01244445 4.55111111-18.20444445 12.74311111-23.66577777 61.89511111-34.58844445 100.12444445-100.12444445 100.12444444-171.12177778 0-70.08711111-37.31911111-134.71288889-96.48355555-170.21155555-8.192-4.55111111-12.74311111-13.65333333-12.74311111-23.66577778 0-14.56355555 11.83288889-27.30666667 26.39644444-27.30666667 4.55111111 0 11.83288889 2.73066667 15.47377778 4.55111111 74.63822222 44.60088889 121.96977778 127.43111111 121.96977778 215.72266667 0 90.112-48.24177778 173.85244445-125.61066667 218.45333333-1.82044445 0-9.10222222 4.55111111-15.47377778 4.55111111z"
  202. fill="#ffffff" p-id="1127"></path>
  203. </svg>
  204. </span>
  205. <span>语音播报</span>
  206. </div>
  207. <div class="broadcast on" id="stopBroadcast">
  208. <div class="pop-hover">
  209. <div class="pop-hover-content">
  210. <div class="vioce-list" id="voice-list">
  211. <ul>
  212. <!-- <li id="voice-custom">自定义语音</li> -->
  213. </ul>
  214. <div id="voice-list-end"></div>
  215. </div>
  216. <div id="voice-custom" style="text-align: center;">自定义语音</div>
  217. </div>
  218. </div>
  219. <span title="语音播报">
  220. <svg t="1583561695846" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"
  221. p-id="1126" width="16" height="16">
  222. <path
  223. d="M513.82044445 964.38044445c-8.192 0-15.47377778-2.73066667-21.84533334-8.192 0 0-46.42133333-41.87022222-99.21422222-86.47111112-89.20177778-73.728-117.41866667-88.29155555-123.79022222-90.112H35.04355555c-14.56355555 0-26.39644445-11.83288889-26.39644444-27.30666666V271.70133333c0-14.56355555 11.83288889-27.30666667 26.39644444-27.30666666H246.21511111c7.28177778-2.73066667 37.31911111-15.47377778 137.44355556-91.02222222 58.25422222-43.69066667 111.04711111-86.47111111 111.04711111-86.47111112 5.46133333-4.55111111 12.74311111-7.28177778 20.02488889-7.28177778 4.55111111 0 10.01244445 0.91022222 14.56355555 3.6408889 10.92266667 5.46133333 18.20444445 17.29422222 18.20444445 30.03733333v837.40444444c0 12.74311111-7.28177778 25.48622222-19.11466667 30.94755556-5.46133333 1.82044445-10.01244445 2.73066667-14.56355555 2.73066667zM270.79111111 724.992c19.11466667 0 48.24177778 8.192 167.48088889 106.496 16.384 13.65333333 33.67822222 28.21688889 51.88266667 43.69066667l5.46133333 4.55111111V139.71911111l-5.46133333 3.64088889c-22.75555555 17.29422222-44.60088889 34.58844445-65.536 50.06222222C293.54666667 291.72622222 264.41955555 299.008 245.30488889 299.008H82.37511111c-20.02488889 0-21.84533333 12.74311111-21.84533333 26.39644445V694.04444445c0 23.66577778 6.37155555 30.03733333 28.21688889 30.03733333h180.224l1.82044444 0.91022222z m520.64711111 162.01955555c-14.56355555 0-26.39644445-11.83288889-26.39644444-27.30666666 0-11.83288889 8.192-20.02488889 16.384-24.576 112.86755555-67.35644445 182.04444445-191.14666667 182.04444444-324.03911111 0-132.89244445-70.08711111-256.68266667-182.04444444-324.03911111-10.01244445-5.46133333-15.47377778-14.56355555-15.47377778-24.576 0-14.56355555 11.83288889-27.30666667 26.39644445-27.30666667 5.46133333 0 10.01244445 1.82044445 16.384 5.46133333 128.34133333 76.45866667 207.53066667 218.45333333 207.53066666 369.55022222 0 152.00711111-80.09955555 293.09155555-208.44088889 369.55022223-6.37155555 5.46133333-10.92266667 7.28177778-16.384 7.28177777z m-90.112-152.91733333c-14.56355555 0-26.39644445-11.83288889-26.39644444-27.30666667 0-10.01244445 4.55111111-18.20444445 12.74311111-23.66577777 61.89511111-34.58844445 100.12444445-100.12444445 100.12444444-171.12177778 0-70.08711111-37.31911111-134.71288889-96.48355555-170.21155555-8.192-4.55111111-12.74311111-13.65333333-12.74311111-23.66577778 0-14.56355555 11.83288889-27.30666667 26.39644444-27.30666667 4.55111111 0 11.83288889 2.73066667 15.47377778 4.55111111 74.63822222 44.60088889 121.96977778 127.43111111 121.96977778 215.72266667 0 90.112-48.24177778 173.85244445-125.61066667 218.45333333-1.82044445 0-9.10222222 4.55111111-15.47377778 4.55111111z"
  224. fill="#ff0000" p-id="1127"></path>
  225. </svg>
  226. </span>
  227. <span>语音播报</span>
  228. </div>
  229. <div class="time-area" id="time-area">
  230. 00:00
  231. </div>
  232. <!-- 按住说话 -->
  233. <div class="speak off" id="startSpeak">
  234. <span title="按住说话">
  235. <svg t="1581994757678" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"
  236. p-id="1639" width="16" height="16">
  237. <path
  238. d="M757.059829 393.846154v-52.512821h262.564103v52.512821H757.059829z m-420.102564 481.367521v96.273504h175.042735a8.752137 8.752137 0 0 1 8.752137 8.752137v35.008547a8.752137 8.752137 0 0 1-8.752137 8.752137H109.401709a8.752137 8.752137 0 0 1-8.752136-8.752137v-35.008547a8.752137 8.752137 0 0 1 8.752136-8.752137h175.042735v-96.273504C129.767932 875.213675 4.376068 749.821812 4.376068 595.145299V463.863248a26.25641 26.25641 0 1 1 52.512821 0v113.777778c0 140.174222 113.637744 253.811966 253.811966 253.811965s253.811966-113.637744 253.811966-253.811965V463.863248a26.25641 26.25641 0 1 1 52.51282 0v131.282051c0 154.676513-125.391863 280.068376-280.068376 280.068376z m-26.25641-96.273504c-111.178393 0-201.299145-90.120752-201.299146-201.299145V201.299145C109.401709 90.120752 199.522462 0 310.700855 0s201.299145 90.120752 201.299145 201.299145v376.341881c0 111.178393-90.120752 201.299145-201.299145 201.299145z m691.418803-280.068376H757.059829v-52.512821h245.059829v52.512821z m-17.504273 105.025641H757.059829v-52.512821h227.555556v52.512821z m-17.504274 105.025641H757.059829v-52.512821h210.051282v52.512821z m-8.752137 105.025641H757.059829v-52.512821h201.299145v52.512821z m-17.504273 105.025641H757.059829v-52.512821h183.794872v52.512821z m-26.25641 105.025641H757.059829v-52.512821h157.538462v52.512821z"
  239. p-id="1640" fill="#ffffff"></path>
  240. </svg>
  241. </span>
  242. <span>按住说话</span>
  243. </div>
  244. <div class="speak on" id="stopSpeak">
  245. <span title="按住说话">
  246. <svg t="1581994757678" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"
  247. p-id="1639" width="16" height="16">
  248. <path
  249. d="M757.059829 393.846154v-52.512821h262.564103v52.512821H757.059829z m-420.102564 481.367521v96.273504h175.042735a8.752137 8.752137 0 0 1 8.752137 8.752137v35.008547a8.752137 8.752137 0 0 1-8.752137 8.752137H109.401709a8.752137 8.752137 0 0 1-8.752136-8.752137v-35.008547a8.752137 8.752137 0 0 1 8.752136-8.752137h175.042735v-96.273504C129.767932 875.213675 4.376068 749.821812 4.376068 595.145299V463.863248a26.25641 26.25641 0 1 1 52.512821 0v113.777778c0 140.174222 113.637744 253.811966 253.811966 253.811965s253.811966-113.637744 253.811966-253.811965V463.863248a26.25641 26.25641 0 1 1 52.51282 0v131.282051c0 154.676513-125.391863 280.068376-280.068376 280.068376z m-26.25641-96.273504c-111.178393 0-201.299145-90.120752-201.299146-201.299145V201.299145C109.401709 90.120752 199.522462 0 310.700855 0s201.299145 90.120752 201.299145 201.299145v376.341881c0 111.178393-90.120752 201.299145-201.299145 201.299145z m691.418803-280.068376H757.059829v-52.512821h245.059829v52.512821z m-17.504273 105.025641H757.059829v-52.512821h227.555556v52.512821z m-17.504274 105.025641H757.059829v-52.512821h210.051282v52.512821z m-8.752137 105.025641H757.059829v-52.512821h201.299145v52.512821z m-17.504273 105.025641H757.059829v-52.512821h183.794872v52.512821z m-26.25641 105.025641H757.059829v-52.512821h157.538462v52.512821z"
  250. p-id="1640" fill="#ff0000"></path>
  251. </svg>
  252. </span>
  253. <span>松开发送</span>
  254. </div>
  255. <div class="contros">
  256. <!-- 高清 -->
  257. <span id="video-hd"></span>
  258. <span title="全屏">
  259. <svg id="fullScreen" t="1578020167938" class="icon" viewBox="0 0 1024 1024" version="1.1"
  260. xmlns="http://www.w3.org/2000/svg" p-id="5035" width="16" height="16">
  261. <path
  262. d="M348.373333 625.706667l-128 128-64 64v-128a33.28 33.28 0 0 0-35.413333-35.413334A33.493333 33.493333 0 0 0 85.333333 689.706667v213.333333A33.706667 33.706667 0 0 0 120.96 938.666667h213.333333a35.626667 35.626667 0 0 0 0-71.04h-128l64-64 128-128a35.2 35.2 0 0 0-49.92-49.92zM206.293333 156.373333h128a33.28 33.28 0 0 0 35.413334-35.413333A33.493333 33.493333 0 0 0 334.293333 85.333333H113.706667c-7.04 0-14.08 7.04-21.333334 14.293334a26.026667 26.026667 0 0 0-7.04 21.333333v213.333333a33.493333 33.493333 0 0 0 35.626667 35.413334 33.28 33.28 0 0 0 35.413333-35.413334v-128l192 192a35.2 35.2 0 0 0 49.92-49.92zM903.04 85.333333h-213.333333a33.493333 33.493333 0 0 0-35.413334 35.626667 33.28 33.28 0 0 0 35.413334 35.413333h128l-64 64-128 128a35.2 35.2 0 0 0 49.92 49.92l128-128 64-64v128a35.626667 35.626667 0 0 0 71.04 0v-213.333333A33.706667 33.706667 0 0 0 903.04 85.333333zM903.04 654.293333a33.28 33.28 0 0 0-35.413333 35.413334v128l-64-64-128-128a35.2 35.2 0 0 0-49.92 49.92l128 128 64 64h-128a35.626667 35.626667 0 0 0 0 71.04h213.333333A33.706667 33.706667 0 0 0 938.666667 903.04v-213.333333a33.493333 33.493333 0 0 0-35.626667-35.413334z"
  263. p-id="5036" fill="#ffffff"></path>
  264. </svg>
  265. </span>
  266. </div>
  267. </div>
  268. <script>
  269. var url = ezuikitTalkData.ezopen;
  270. var accessToken = ezuikitTalkData.accessToken;
  271. addJs(ezuikitPath, function () {
  272. $("#stopSave").hide();
  273. $("#closeZoom").hide();
  274. var userName = 'aa';
  275. function handleError(e) {
  276. console.log("捕获到错误", e);
  277. // log(JSON.stringify(e),'error');
  278. //layer.msg(e)
  279. }
  280. function handleSuccess() {
  281. console.log("播放成功回调函数,此处可执行播放成功后续动作");
  282. playing = true;
  283. console.log("默认开启声音");
  284. decoder.openSound(0);
  285. }
  286. var autoplay = 1;
  287. var audioId = 0;
  288. var templete = 2;
  289. var deviceSerial = url.split('/')[3];
  290. var channelNo = url.split('/')[4].split('.')[0];
  291. // 查询设备名称
  292. // $.ajax({
  293. // url: "http://open.ys7.com/api/lapp/device/info",
  294. // type: 'POST',
  295. // data: {
  296. // accessToken: accessToken,
  297. // deviceSerial: deviceSerial
  298. // },
  299. // dataType: 'json',
  300. // success: function (data) {
  301. // if (data.code == 200 && data.data) {
  302. // // 设备序列号
  303. // $("#deviceSerial").text(data.data.deviceName);
  304. // }
  305. // },
  306. // error: function (err) {
  307. // console.log("err", err);
  308. // }
  309. // });
  310. // 查询设备名称
  311. // $.ajax({
  312. // url: "https://open.ys7.com/api/lapp/device/capacity",
  313. // type: 'POST',
  314. // data: {
  315. // accessToken: accessToken,
  316. // deviceSerial: deviceSerial
  317. // },
  318. // dataType: 'json',
  319. // success: function (data) {
  320. // if (data.code == 200 && data.data) {
  321. // // 设备序列号
  322. // var isSupportTalk = data.data.support_talk;
  323. // if(isSupportTalk == '0'){
  324. // layer.msg("该设备不支持全双工对讲,无法使用语音模板");
  325. // // layer.msg("该设备不支持全双工对讲,无法使用语音模板")
  326. // }
  327. // }
  328. // },
  329. // error: function (err) {
  330. // console.log("err", err);
  331. // }
  332. // });
  333. if (autoplay == '1') {
  334. init();
  335. }
  336. // var validCode = getQueryString('validCode');
  337. var width = document.documentElement.clientWidth;
  338. var height = document.documentElement.clientHeight;
  339. $("#playWind").height(height - (48 * 2));
  340. $("#video-hd").text(url.indexOf('hd') === -1 ? '标清' : '高清');
  341. function init() {
  342. try {
  343. decoder && decoder.stop();
  344. } catch (e) {
  345. console.log("E", e);
  346. }
  347. $("#video-hd").text(url.indexOf('hd') === -1 ? '标清' : '高清')
  348. setTimeout(() => {
  349. decoder = new EZUIKit.EZUIPlayer({
  350. id: "playWind",
  351. autoplay: true,
  352. audioId: audioId,
  353. url: url,
  354. accessToken: ezuikitTalkData.accessToken,
  355. decoderPath: ezuikitTalkData.decoderPath,
  356. width: width,
  357. height: height - (48 * 2),
  358. handleError: handleError,
  359. handleSuccess: handleSuccess,
  360. // env: {
  361. // domain: window.location.protocol + "//" + window.location.host
  362. // }
  363. // loading: {svg: '<svg t="1567688443823" class="icon" viewBox="0 0 1109 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1560" width="64" height="64"><path d="M490.766 47.13C247.531 67.91 50.692 251.203 10.699 494.152c-10.701 64.999-9.326 99.794 5.062 128.192 44.677 88.182 170.83 87.708 214.77-0.805 10.384-20.912 12.048-31.802 11.744-76.871-0.801-118.767 51.882-218.607 149.086-282.532 201.695-132.639 476.291-24.392 545.849 215.177 70.275 242.029-107.591 493.681-364.481 515.682-25.367 2.174-18.056 3.428 16.083 2.757 310.027-6.081 520.19-314.986 418.493-615.128-72.561-214.16-287.678-353.047-516.54-333.493z" fill="#ffffff" p-id="1561"></path></svg>'},
  364. });
  365. }, 100);
  366. // 延时函数 -- iframe未加载完成,宽高获取不到
  367. }
  368. $("#capturePicture").click(function () {
  369. /*截图方法1*/
  370. // decoder.capturePicture(0,'default');
  371. /*截图方法2*/
  372. var capturePicturePromise = decoder.capturePicture(0, 'default');
  373. capturePicturePromise.then(function (data) {
  374. console.log("截图成功,用户执行关闭成功后的操作", data);
  375. })
  376. })
  377. $("#startSave").click(function () {
  378. // decoder.startSave(0, (new Date().getTime() + 'video'));
  379. /*开始录制方法2*/
  380. var startSavePromise = decoder.startSave(0, (new Date().getTime() + 'video'));
  381. startSavePromise.then(function (data) {
  382. console.log("start save success", startSavePromise);
  383. $("#startSave").hide();
  384. $("#stopSave").show();
  385. })
  386. .catch(function (error) {
  387. console.log("start Save error", error)
  388. })
  389. })
  390. $("#stopSave").click(function () {
  391. /*结束录制方法1*/
  392. // decoder.stopSave(0);
  393. /*结束录制方法2*/
  394. var stopSavePromise = decoder.stopSave(0);
  395. stopSavePromise.then(function (data) {
  396. console.log("stop save success", stopSavePromise)
  397. $("#stopSave").hide();
  398. $("#startSave").show();
  399. })
  400. .catch(function (error) {
  401. console.log("stop Save error", error)
  402. })
  403. })
  404. $("#enableZoom").click(function () {
  405. decoder.enableZoom();
  406. $("#enableZoom").hide();
  407. $("#closeZoom").show();
  408. })
  409. $("#closeZoom").click(function () {
  410. decoder.closeZoom();
  411. $("#closeZoom").hide();
  412. $("#enableZoom").show();
  413. })
  414. $("#fullScreen").on('click', function () {
  415. decoder.fullScreen();
  416. });
  417. $("#video-hd").on('click', function () {
  418. if (url.indexOf('hd') === -1) {
  419. url = url.replace('.live', '.hd.live');
  420. $("#video-hd").text('高清');
  421. } else {
  422. url = url.replace('.hd.live', '.live');
  423. $("#video-hd").text('标清');
  424. }
  425. // var options = {
  426. // accessToken: accessToken,
  427. // url: url,
  428. // }
  429. init();
  430. })
  431. function getQueryString(name) {
  432. var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
  433. var r = window.location.search.substr(1).match(reg);
  434. if (r != null) return unescape(r[2]);
  435. return null;
  436. }
  437. function actionLog(e) {
  438. var extra = "";
  439. if (e && e.currentTarget && e.currentTarget.getAttribute("data-click-dclog")) {
  440. extra = e.currentTarget.getAttribute("data-click-dclog");
  441. }
  442. }
  443. function dclog(dclogUrl) {
  444. // 上报一次本地统计信息
  445. const img = new Image();
  446. img.src = dclogUrl;
  447. }
  448. })
  449. </script>
  450. <script>
  451. $(function () {
  452. // 初始化
  453. $("#stopTalk").hide();
  454. $("#stopBroadcast").hide();
  455. $("#stopSpeak").hide();
  456. $("#startSpeak").hide();
  457. var countTimer;
  458. // 录音时长
  459. var recodeTime = 0;
  460. var recodeTimer;
  461. var padding = false; // 是否等待接口响应
  462. $("#startTalk").on('click', function () {
  463. if (padding) {
  464. layer.msg("等待服务响应,请稍后重试")
  465. return false;
  466. }
  467. if (countTimer) {
  468. layer.msg("语音设备正忙,请稍后重试")
  469. return false;
  470. } else {
  471. $("#startTalk").hide();
  472. $("#stopTalk").show();
  473. countTime('add', 0);
  474. console.log("开始对讲,关闭声音")
  475. decoder && decoder.closeSound(0);
  476. EZUITalk.startTalk();
  477. }
  478. })
  479. $("#stopTalk").on('click', function () {
  480. $("#startTalk").show();
  481. $("#stopTalk").hide();
  482. countTime('destory', 0);
  483. console.log("结束对讲,开启声音")
  484. EZUITalk.stopTalk();
  485. decoder && decoder.openSound(0);
  486. })
  487. $("#startBroadcast").on('click', function () {
  488. $("#startBroadcast").hide();
  489. $("#stopBroadcast").show();
  490. })
  491. $("#stopBroadcast").on('click', function (e) {
  492. e.preventDefault();
  493. e.stopPropagation();
  494. $("#startBroadcast").show();
  495. $("#stopBroadcast").hide();
  496. })
  497. document.getElementById('startSpeak').addEventListener('mousedown', function (e) {
  498. console.log("鼠标按下");
  499. if (padding) {
  500. layer.msg("等待服务响应,请稍后重试")
  501. return false;
  502. }
  503. if (countTimer) {
  504. layer.msg("语音设备正忙,请稍后重试")
  505. return false;
  506. }
  507. $("#startSpeak").hide();
  508. $("#stopSpeak").show();
  509. countTime('add', 0);
  510. voiceInit();
  511. console.log("开始录音,关闭音频");
  512. decoder && decoder.closeSound(0);
  513. setTimeout(() => {
  514. recodeTime = 0;
  515. startRecording();
  516. if (recodeTimer) { // 先清空计数器
  517. clearInterval(recodeTimer);
  518. }
  519. recodeTimer = setInterval(function () {
  520. if (recodeTime >= 59) {
  521. stopSpeakFun()
  522. layer.msg("不超过1分钟")
  523. } else {
  524. recodeTime = recodeTime + 1;
  525. }
  526. }, 1000);
  527. }, 1000);
  528. })
  529. document.getElementById('stopSpeak').addEventListener('mouseup', function (e) {
  530. console.log("鼠标松开");
  531. stopSpeakFun()
  532. })
  533. function stopSpeakFun() {
  534. countTime('destory', 0);
  535. $("#startSpeak").show();
  536. $("#startSpeak").hide();
  537. $("#stopSpeak").hide();
  538. if (recodeTime < 1) {
  539. layer.msg("说话时间过短");
  540. clearInterval(recodeTimer);
  541. return false;
  542. }
  543. wavUpload();
  544. clearInterval(recodeTimer);
  545. }
  546. // 时间计数
  547. function countTime(type, start = 0) {
  548. clearInterval(countTimer);
  549. if (type === 'add') {
  550. var i = start;
  551. countTimer = setInterval(function () {
  552. ++i;
  553. document.getElementById("time-area").innerHTML = formatSeconds(i);
  554. }, 1000);
  555. } else if (type === 'sub') {
  556. var i = start;
  557. countTimer = setInterval(function () {
  558. if (i > 0) {
  559. i--;
  560. document.getElementById("time-area").innerHTML = formatSeconds(i);
  561. } else {
  562. clearInterval(countTimer);
  563. countTimer = undefined;
  564. console.log("倒计时结束,开启声音");
  565. decoder.openSound(0);
  566. }
  567. }, 1000);
  568. } else if (type === 'destory') {
  569. clearInterval(countTimer);
  570. countTimer = undefined;
  571. document.getElementById("time-area").innerHTML = '00:00';
  572. }
  573. //将秒数转换为时分秒格式
  574. function formatSeconds(value) {
  575. var theTime = parseInt(value);// 秒
  576. var middle = 0;// 分
  577. var hour = 0;// 小时
  578. var secondV = '00';
  579. var minV = '00';
  580. var hourV = '00'
  581. if (theTime > 59) {
  582. middle = parseInt(theTime / 60);
  583. theTime = parseInt(theTime % 60);
  584. if (middle > 59) {
  585. hour = parseInt(middle / 60);
  586. middle = parseInt(middle % 60);
  587. }
  588. }
  589. secondV = parseInt(theTime) > 9 ? parseInt(theTime) : ('0' + parseInt(theTime));
  590. minV = parseInt(middle) > 9 ? parseInt(middle) : ('0' + parseInt(middle));
  591. hourV = (parseInt(hour) > 9 ? parseInt(hour) : ('0' + parseInt(hour)));
  592. if (hour > 0) {
  593. return hourV + ':' + minV + ':' + secondV;
  594. } else if (middle > 0) {
  595. return minV + ':' + secondV;
  596. } else {
  597. return '00:' + secondV;
  598. }
  599. }
  600. }
  601. })
  602. </script>
  603. <script>
  604. var hasMore = false;
  605. var pageSize = 5;
  606. var page = 0;
  607. var loading = false;
  608. var fetchDefaultList = false;
  609. fetchVoiceList(0);
  610. $("#voice-custom").on("click", function () {
  611. console.log("点击自定义语音");
  612. // console.log
  613. $("#startSpeak").show();
  614. })
  615. function fetchVoiceList(page) {
  616. console.log("fetchVoiceList", page)
  617. loading = true;
  618. $.ajax({
  619. url: "https://open.ys7.com/api/lapp/voice/query",
  620. type: 'POST',
  621. data: {
  622. accessToken: ezuikitTalkData.accessToken,
  623. pageStart: page,
  624. pageSize: 5,
  625. default: fetchDefaultList ? 'true' : 'false'
  626. },
  627. dataType: 'json',
  628. success: function (data) {
  629. console.log("data.data", data.data)
  630. if (data.code == 200) {
  631. randerVoliceList(data.data, 5);
  632. page = data.page.page;
  633. if (page == 0 && data.data.length == 0 && !fetchDefaultList) {// 获取用户语音为空
  634. fetchDefaultList = true;
  635. fetchVoiceList(0);
  636. }
  637. }
  638. },
  639. error: function (err) {
  640. console.log("err", err);
  641. }
  642. });
  643. }
  644. function randerVoliceList(data, pageSize) {
  645. console.log("renderVoliceList")
  646. if (data && data.length > 0) {
  647. for (var i = 0; i < data.length; i++) {
  648. $("#voice-list ul").append("<li class='voice-item' id='voice-item-" + i + "' data-time=" + (data[i]["duration"] || 20) + " data-url=" + data[i]["fileUrl"] + ">" + (data[i]["voiceName"].length > 10 ? (data[i]["voiceName"].substr(0, 10) + "...") : data[i]["voiceName"]) + "</li>");
  649. }
  650. }
  651. $(".voice-item").on('click', function (e) {
  652. // console.log("d点击voice-item",e,e.target,e.target.dataset.url);
  653. if (padding) {
  654. layer.msg("等待服务响应,请稍后重试")
  655. return false;
  656. }
  657. if (countTimer) {
  658. layer.msg("语音设备正忙,请稍后重试")
  659. return false;
  660. }
  661. var voiceUrl = e.target.dataset.url;
  662. var time = e.target.dataset.time;
  663. playListOfVoice(voiceUrl, time);
  664. })
  665. if (data.length === pageSize) {
  666. $("#voice-list-end").html("向下滚动加载更多")
  667. } else {
  668. $("#voice-list-end").html("没有更多数据了")
  669. }
  670. }
  671. $("#voice-list").unbind("scroll").bind("scroll", function (e) {
  672. // console.log("e",e,this.scrollHeight, $(this).scrollTop() + $(this).height())
  673. var sum = this.scrollHeight;
  674. if (sum <= $(this).scrollTop() + $(this).height()) {
  675. console.log("拖动到底,执行加载", page);
  676. fetchVoiceList(++page);
  677. }
  678. loading = false;
  679. });
  680. function playListOfVoice(voiceUrl, time) {
  681. console.log("播放语音", voiceUrl, time);
  682. console.log("播放语音,关闭音频");
  683. decoder && decoder.closeSound(0);
  684. padding = true;
  685. $.ajax({
  686. url: "https://open.ys7.com/api/lapp/voice/send",
  687. type: 'POST',
  688. data: {
  689. accessToken: accessToken,
  690. deviceSerial: deviceSerial,
  691. channelNo: channelNo,
  692. fileUrl: voiceUrl,
  693. },
  694. dataType: 'json',
  695. success: function (data) {
  696. console.log("data.data", data.data)
  697. if (data.code == 200) {
  698. $("#startBroadcast").show();
  699. $("#stopBroadcast").hide();
  700. countTime('sub', parseInt(time));
  701. } else if (data.code == "10001") {
  702. layer.msg("未找到当前语音")
  703. } else {
  704. layer.msg(data.msg || '发送失败,请稍后再试')
  705. }
  706. padding = false;
  707. },
  708. error: function (err) {
  709. console.log("err", err);
  710. padding = false;
  711. layer.msg("网络异常,请稍后再试");
  712. }
  713. });
  714. }
  715. </script>
  716. </body>
  717. </html>