simple.html 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <!--<meta http-equiv="Content-Security-Policy" content="default-src 'self' 'unsafe-inline' 'unsafe-eval'">-->
  6. <title>demo</title>
  7. </head>
  8. <body>
  9. <div>
  10. <button id="startBtn" style="display:none;"></button>
  11. <canvas id="testCanvas" style="background-color:#000;width:500px;height:360px;"></canvas>
  12. <div style="display:none;">
  13. <video id="testVideo" style="background-color:#000;width:500px;height:360px;" muted></video>
  14. </div>
  15. </div>
  16. </body>
  17. <script src="module/playerControl.js"></script>
  18. <script>
  19. var player = null;
  20. var canvas = document.getElementById('testCanvas');
  21. var video = document.getElementById('testVideo');
  22. var startBtn = document.getElementById('startBtn');
  23. // 按钮始终隐藏,只用于自动播放失败时的备用触发
  24. function showManualButton() {
  25. // 按钮始终隐藏,不显示
  26. startBtn.style.display = 'none';
  27. }
  28. function markPlaying() {
  29. startBtn.innerText = '';
  30. startBtn.disabled = true;
  31. }
  32. const startPlayback = function(muted){
  33. var options = {
  34. wsURL: 'ws://10.10.43.220/rtspoverwebsocket',
  35. rtspURL: 'rtsp://10.10.43.220/cam/realmonitor?channel=1&subtype=0&proto=Private3',
  36. username: 'admin',
  37. password: 'l1234567',
  38. // 在部分 Chrome 新版本上,开启 H.265 硬件加速会走 video 解码路径,可能导致有声无画
  39. // 先关闭硬件加速,强制使用 canvas / 软件解码路径,提升兼容性
  40. h265AccelerationEnabled: false
  41. };
  42. // 静音可提升自动播放成功率
  43. var enableMute = !!muted;
  44. video.muted = enableMute;
  45. if (enableMute) {
  46. video.setAttribute('muted','');
  47. } else {
  48. video.removeAttribute('muted');
  49. }
  50. player = new PlayerControl(options);
  51. player.on('WorkerReady', function(){
  52. player.connect();
  53. });
  54. player.on('DecodeStart', function(rs){
  55. console.log('start decode');
  56. console.log(rs);
  57. });
  58. player.on('PlayStart', function(rs){
  59. console.log('play');
  60. console.log(rs);
  61. markPlaying();
  62. });
  63. player.on('Error', function(rs){
  64. console.log('error');
  65. console.log(rs);
  66. // 按钮始终隐藏,错误时也不显示
  67. });
  68. player.on('FileOver', function(rs){
  69. console.log('recorder play over');
  70. console.log(rs);
  71. });
  72. player.on('MSEResolutionChanged', function(rs){
  73. console.log('resolution changed');
  74. console.log(rs);
  75. });
  76. player.on('FrameTypeChange', function(rs){
  77. console.log('video encode mode changed');
  78. console.log(rs);
  79. });
  80. player.on('audioChange', function(rs){
  81. console.log('audio encode changed');
  82. console.log(rs);
  83. });
  84. player.init(canvas, video);
  85. }
  86. document.getElementById('startBtn').addEventListener('click', function(){
  87. startPlayback(false); // 用户点击时可以尝试带声音
  88. this.disabled = true;
  89. this.innerText = '';
  90. }, { once: true });
  91. // 页面加载后自动尝试静音播放,按钮始终隐藏
  92. window.addEventListener('load', function(){
  93. try {
  94. startPlayback(true);
  95. } catch (e) {
  96. console.warn('autoplay failed', e);
  97. // 按钮始终隐藏,不显示
  98. }
  99. });
  100. </script>
  101. </html>