• video记录视频播放时长


    一、背景:需要记录视频播放时长

    html使用video控件,需每隔一段时间记录前端视频的播放时长。

    二、应用:选择timeupdate的监听事件

    由于该事件是每隔250毫秒运行一次,太频繁了,而且回传结果是毫秒,需要改写为 分/秒  的格式。

    1. // 14、timeupdate:目前的播放位置已更改时,播放时间更新
    2. video.addEventListener('timeupdate', function(e) {
    3. console.log('timeupdate')
    4. console.log(e)
    5. })

    三、改写:转为计量单位

    1. video.addEventListener('timeupdate', (e)=> {
    2. //每250毫秒运行一次。转为秒
    3. var duration = e.timeStamp/1000;
    4. //每5秒更新数据库;
    5. if(Math.round(duration)%5==0){
    6. // TODO
    7. int h = duration::int / 3600;
    8. int m = (duration::int % 3600) / 60;
    9. int s = (duration::int % 3600) % 60;
    10. }
    11. })

    四、video 事件监听

    1. <script>
    2. var video = document.getElementById('video')
    3. // 或用var video = document.querySelector('video')
    4. // 1、loadstart:视频查找。当浏览器开始寻找指定的音频/视频时触发,也就是当加载过程开始时
    5. video.addEventListener('loadstart', function(e) {
    6. console.log('提示视频的元数据已加载')
    7. console.log(e)
    8. console.log(video.duration) // NaN
    9. })
    10. // 2、durationchange:时长变化。当指定的音频/视频的时长数据发生变化时触发,加载后,时长由 NaN 变为音频/视频的实际时长
    11. video.addEventListener('durationchange', function(e) {
    12. console.log('提示视频的时长已改变')
    13. console.log(e)
    14. console.log(video.duration) // 528.981333 视频的实际时长(单位:秒)
    15. })
    16. // 3、loadedmetadata :元数据加载。当指定的音频/视频的元数据已加载时触发,元数据包括:时长、尺寸(仅视频)以及文本轨道
    17. video.addEventListener('loadedmetadata', function(e) {
    18. console.log('提示视频的元数据已加载')
    19. console.log(e)
    20. })
    21. // 4、loadeddata:视频下载监听。当当前帧的数据已加载,但没有足够的数据来播放指定音频/视频的下一帧时触发
    22. video.addEventListener('loadeddata', function(e) {
    23. console.log('提示当前帧的数据是可用的')
    24. console.log(e)
    25. })
    26. // 5、progress:浏览器下载监听。当浏览器正在下载指定的音频/视频时触发
    27. video.addEventListener('progress', function(e) {
    28. console.log('提示视频正在下载中')
    29. console.log(e)
    30. })
    31. // 6、canplay:可播放监听。当浏览器能够开始播放指定的音频/视频时触发
    32. video.addEventListener('canplay', function(e) {
    33. console.log('提示该视频已准备好开始播放')
    34. console.log(e)
    35. })
    36. // 7、canplaythrough:可流畅播放。当浏览器预计能够在不停下来进行缓冲的情况下持续播放指定的音频/视频时触发
    37. video.addEventListener('canplaythrough', function(e) {
    38. console.log('提示视频能够不停顿地一直播放')
    39. console.log(e)
    40. })
    41. // 8、play:播放监听
    42. video.addEventListener('play', function(e) {
    43. console.log('提示该视频正在播放中')
    44. console.log(e)
    45. })
    46. // 9、pause:暂停监听
    47. video.addEventListener('pause', function(e) {
    48. console.log('暂停播放')
    49. console.log(e)
    50. })
    51. // 10、seeking:查找开始。当用户开始移动/跳跃到音频/视频中新的位置时触发
    52. video.addEventListener('seeking', function(e) {
    53. console.log('开始移动进度条')
    54. console.log(e)
    55. })
    56. // 11、seeked:查找结束。当用户已经移动/跳跃到视频中新的位置时触发
    57. video.addEventListener('seeked', function(e) {
    58. console.log('进度条已经移动到了新的位置')
    59. console.log(e)
    60. })
    61. // 12、waiting:视频加载等待。当视频由于需要缓冲下一帧而停止,等待时触发
    62. video.addEventListener('waiting', function(e) {
    63. console.log('视频加载等待')
    64. console.log(e)
    65. })
    66. // 13、playing:当视频在已因缓冲而暂停或停止后已就绪时触发
    67. video.addEventListener('playing', function(e) {
    68. console.log('playing')
    69. console.log(e)
    70. })
    71. // 14、timeupdate:目前的播放位置已更改时,播放时间更新
    72. video.addEventListener('timeupdate', function(e) {
    73. console.log('timeupdate')
    74. console.log(e)
    75. })
    76. // 15、ended:播放结束
    77. video.addEventListener('ended', function(e) {
    78. console.log('视频播放完了')
    79. console.log(e)
    80. })
    81. // 16、error:播放错误
    82. video.addEventListener('error', function(e) {
    83. console.log('视频出错了')
    84. console.log(e)
    85. })
    86. // 17、volumechange:当音量更改时
    87. video.addEventListener('volumechange', function(e) {
    88. console.log('volumechange')
    89. console.log(e)
    90. })
    91. // 18、stalled:当浏览器尝试获取媒体数据,但数据不可用时
    92. video.addEventListener('stalled', function(e) {
    93. console.log('stalled')
    94. console.log(e)
    95. })
    96. // 19、ratechange:当视频的播放速度已更改时
    97. video.addEventListener('ratechange', function(e) {
    98. console.log('ratechange')
    99. console.log(e)
    100. })
    101. script>

    相关链接:video 标签 各种属性及所有事件监听大全_video标签事件监听-CSDN博客

  • 相关阅读:
    从“新零售”到“即时零售”看中国电商之变
    《前端框架开发技术》HTML+CSS+JavaScript 制作个人简历模板
    如何可视化编写和编排你的 K8s 任务
    Spring基础(1):两个概念
    Python 图_系列之基于<链接表>实现无向图最短路径搜索
    0031力扣191题---位1的个数
    k8s-mysql主从部署
    SQL的CASE WHEN函数、CAST函数、CONVERT() 函数、COALESCE()函数、DATEDIFF()函数
    Apache Spark 的基本概念和在大数据分析中的应用
    PMP第七版考还是不考?最全第七版PMBOK知识解析!提前知晓
  • 原文地址:https://blog.csdn.net/qiuweifan/article/details/133945245