1. 一、WebSocket
    2. // 封装各个阶段函数
    3. let Socket = ''
    4. let setIntervalWesocketPush = null
    5. /**建立连接 */
    6. export function createSocket(id) {
    7. if (!Socket) {
    8. const WSS_URL = "ws://socket链接"
    9. console.log('建立websocket连接')
    10. Socket = new WebSocket(WSS_URL)
    11. Socket.onopen = onopenWS
    12. Socket.onmessage = onmessageWS
    13. Socket.onerror = onerrorWS
    14. Socket.onclose = oncloseWS
    15. } else {
    16. console.log('websocket已连接')
    17. }
    18. }
    19. /**打开WS之后发送心跳 */
    20. export function onopenWS() {
    21. sendPing() //发送心跳
    22. }
    23. /**连接失败重连 */
    24. export function onerrorWS() {
    25. clearInterval(setIntervalWesocketPush)
    26. Socket.close()
    27. createSocket() //重连
    28. }
    29. /**WS数据接收统一处理 */
    30. export function onmessageWS(e) {
    31. window.dispatchEvent(new CustomEvent('onmessageWS', {
    32. detail: {
    33. data: e.data
    34. }
    35. }))
    36. }
    37. /**发送数据
    38. * @param eventType
    39. */
    40. export function sendWSPush(eventTypeArr) {
    41. const obj = {
    42. appId: 'airShip',
    43. cover: 0,
    44. event: eventTypeArr
    45. }
    46. if (Socket !== null && Socket.readyState === 3) {
    47. Socket.close();
    48. createSocket() //重连
    49. } else if (Socket.readyState === 1) {
    50. Socket.send(JSON.stringify(obj))
    51. } else if (Socket.readyState === 0) {
    52. setTimeout(() => {
    53. Socket.send(JSON.stringify(obj))
    54. }, 30000)
    55. }
    56. }
    57. /**关闭WS */
    58. export function oncloseWS() {
    59. clearInterval(setIntervalWesocketPush)
    60. console.log('websocket已断开')
    61. }
    62. /**发送心跳 */
    63. export function sendPing() {
    64. Socket.send('ping')
    65. setIntervalWesocketPush = setInterval(() => {
    66. Socket.send('ping')
    67. }, 60000)
    68. }
    69. // 使用
    70. createSocket(roomId) //创建
    71. sendWSPush() //发送数据
    72. const getDataFunc = function(e) {
    73. console.log(e) // Socket实时连接返回信息
    74. });
    75. // 监听
    76. window.addEventListener('onmessageWS', getDataFunc);
    77. 二、h5直播
    78. 1.使用CyberPlayer播放flv格式
    79. // 引用js
    80. <script src="cyberplayer.js"></script> // 查看或下载附件
    81. // 模板
    82. <video id="myPlayer" poster="" controls playsInline webkit-playsinline autoplay></video>
    83. // 使用
    84. var player = cyberplayer("myPlayer").setup({
    85. backcolor : "#FFFFFF",
    86. stretching : "fill",
    87. file : 'http://live-dev.shareitgames.com/live/stream_1_100_191115190445.flv', //视频url
    88. ak : "88abcbd72fbc4b809dfe9e5bc97ad759", // 公有云平台注册即可获得accessKey
    89. autoStart : true,
    90. repeat : false,
    91. volume : 100,
    92. controls : true,
    93. controlbar: {
    94. barLogo: false
    95. }
    96. });
    97. //播放事件监听方法
    98. player.on('play', function(e) {
    99. console.log(e)
    100. if (e.type == "playing") {
    101. // 正在播放
    102. };
    103. });
    104. // 类似事件还有ready, setupError, playlist, playlistItem, playlistComplete, bufferChange, play, pause, buffer, idle, complete, error, seek, seeked, time, mute, volume, fullscreen, resize, levels, levelsChanged, captionsList, captionsChange, controls, displayClick, meta
    105. //监听直播流状态
    106. // 成功建立连接
    107. player.onConnection(function(){
    108. console.log("连接成功");
    109. });
    110. // 有直播流时
    111. player.onAlive(function(){});
    112. // 无直播流时
    113. player.onNoLiveStream(function(){});
    114. // 直播暂停时
    115. player.onLiveStop(function(){});
    116. 2.播放mus8直播视频
    117. // 引入js
    118. <script src="http://cdn.bootcss.com/video.js/6.0.0-RC.5/video.js"></script>
    119. <script src="http://cdn.bootcss.com/videojs-contrib-hls/5.3.3/videojs-contrib-hls.js"></script>
    120. // 模板
    121. <video class="video-js vjs-default-skin" id="hls-video" width="100%" height="100%"
    122. controls="controls" autoplay="autoplay"
    123. x-webkit-airplay="true" x5-video-player-fullscreen="true"
    124. preload="auto" playsinline="true" webkit-playsinline
    125. x5-video-player-typ="h5">
    126. <source type="application/x-mpegURL" src="http://live-dev.shareitgames.com/live/p3/playlist.m3u8">
    127. </video>
    128. // 使用
    129. var player = videojs('hls-video');
    130. player.play();
    131. //影藏多余控件以及文本消息
    132. document.getElementsByClassName('vjs-modal-dialog')[0].setAttribute('style','display:none');
    133. document.getElementsByClassName('vjs-modal-dialog')[1].setAttribute('style','display:none');
    134. document.getElementsByClassName('vjs-control-bar')[0].setAttribute('style','display:none');
    135. document.getElementsByClassName('vjs-big-play-button')[0].setAttribute('style','display:none');
    136. // 监听播放状态(m3u8)
    137. player.on(['loadstart', 'play', 'playing', 'firstplay', 'pause', 'ended', 'adplay', 'adplaying', 'adfirstplay', 'adpause', 'adended', 'contentplay', 'contentplaying', 'contentfirstplay', 'contentpause', 'contentended', 'contentupdate', 'loadeddata', 'loadedmetadata'], function(e) {
    138. console.log(e)
    139. if (e.type == "playing") {};
    140. });
    141. 3.播放Flv直播视频
    142. // 引入js
    143. <script src="https://cdn.bootcss.com/flv.js/1.3.3/flv.min.js"></script>
    144. // 模板
    145. <video id="videoElement"> </video>
    146. // 使用(1)
    147. if (flvjs.isSupported()) {
    148. //检查flvjs能否正常使用
    149. var videoElement = document.getElementById("videoElement"); //使用id选择器找到第二步设置的dom元素
    150. var flvPlayer = flvjs.createPlayer({
    151. //创建一个新的flv播放器对象
    152. type: "flv", //类型flv
    153. url: "http://live-dev.shareitgames.com/live/p3.flv" //flv文件地址
    154. });
    155. flvPlayer.attachMediaElement(videoElement); //将flv视频装载进video元素内
    156. flvPlayer.load(); //载入视频
    157. flvPlayer.play(); //播放视频,如果不想要自动播放,去掉本行
    158. }
    159. // 使用(2) 解决高延时(跳帧方法)
    160. if (flvjs.isSupported()) {
    161. var videoElement = document.getElementById('videoElement');
    162. var video = videoElement
    163. var flvPlayer = flvjs.createPlayer({
    164. type: 'flv',
    165. isLive: true,
    166. url: 'http://live-dev.shareitgames.com/live/p3.flv',
    167. }, {
    168. enableStashBuffer: false
    169. });
    170. flvPlayer.attachMediaElement(videoElement);
    171. flvPlayer.load();
    172. setTimeout(() => {
    173. flvPlayer.play();
    174. }, 2000)
    175. setInterval(() => {
    176. if (!video.buffered.length) {
    177. return;
    178. }
    179. let end = video.buffered.end(0);
    180. let diff = end - video.currentTime;
    181. if (diff >= 1.5) {
    182. video.currentTime = end;
    183. }
    184. }, 3000);
    185. }
    186. // 监听flv视频流信息
    187. flvjs.LoggingControl.addLogListener(function(type, str) {
    188. // 开始播放
    189. if (str == '[FLVDemuxer] > Parsed AudioSpecificConfig') {};
    190. // 播放结束
    191. if (str == '[MSEController] > MediaSource onSourceEnded') {};
    192. });

    cyberplayer.js