• vue3中播放flv流视频,以及组件封装超全


    实现以上功能的播放,只需要传入一个流的地址即可,当然组件也只有简单的实时播放功能

    下面直接上组件

    里面的flvjs通过npm i flv.js直接下载 

    1. <template>
    2. <div class="player" style="position: relative;">
    3. <p style="position: absolute !important;top: 10px;left: 20px;">通道{{ title }}p>
    4. <img src="@/assets/img/videostop.png" alt="" class="centeredVideo" v-show="url == ''">
    5. <video v-show="url" ref="videoElement" class="centeredVideo" controls autoplay
    6. muted>video>
    7. div>
    8. template>
    9. <script>
    10. import flvjs from "flv.js"; //引入flv
    11. export default {
    12. props: {
    13. title: {
    14. type: String,
    15. default: ''
    16. },
    17. url: {
    18. type: String,
    19. default: ''
    20. },
    21. },
    22. data() {
    23. return {
    24. flvPlayer: null,
    25. // src: ["http://172.21.1.111/live?port=1935&app=myapp&stream=streamname"],
    26. };
    27. },
    28. mounted() {
    29. this.flv_load(this.url);
    30. },
    31. methods: {
    32. flv_load(url) {
    33. if (flvjs.isSupported()) {
    34. let videoElement = this.$refs.videoElement;
    35. this.flvPlayer = flvjs.createPlayer(
    36. {
    37. type: "flv", //媒体类型
    38. url: url || '', //flv格式媒体URL
    39. isLive: true, //数据源是否为直播流
    40. hasAudio: false, //数据源是否包含有音频
    41. hasVideo: true, //数据源是否包含有视频
    42. enableStashBuffer: false, //是否启用缓存区
    43. },
    44. {
    45. enableWorker: false, // 是否启用分离的线程进行转换
    46. enableStashBuffer: false, //关闭IO隐藏缓冲区
    47. autoCleanupSourceBuffer: true, //自动清除缓存
    48. }
    49. );
    50. this.flvPlayer.attachMediaElement(videoElement); //将播放实例注册到节点
    51. this.flvPlayer.load(); //加载数据流
    52. this.flvPlayer.play(); //播放数据流
    53. }
    54. },
    55. //销毁断流方法
    56. destoryVideo() {
    57. if (this.flvPlayer) {
    58. this.flvPlayer.pause();
    59. this.flvPlayer.unload();
    60. this.flvPlayer.detachMediaElement();
    61. this.flvPlayer.destroy();
    62. this.flvPlayer = null;
    63. }
    64. },
    65. },
    66. //3.在销毁的声明周期中 必须要销毁掉播放器的容器!!!!血的教训
    67. beforeUnmount() {
    68. if (this.flvPlayer) {
    69. this.flvPlayer.pause();
    70. this.flvPlayer.unload();
    71. this.flvPlayer.detachMediaElement();
    72. this.flvPlayer.destroy();
    73. this.flvPlayer = null;
    74. }
    75. },
    76. watch: {
    77. url(val) {
    78. this.destoryVideo()
    79. this.flv_load(val, '变化后');
    80. }
    81. }
    82. }
    83. script>
    84. <style scoped lang="less">
    85. .player {
    86. background-color: black;
    87. height: 100%;
    88. width: 100%;
    89. border: 1px solid white;
    90. color: white;
    91. text-align: center;
    92. display: flex;
    93. align-items: center;
    94. }
    95. /* .video-container {
    96. display: inline-block;
    97. margin-right: 10px;
    98. width: 32%;
    99. height: 45%;
    100. } */
    101. .centeredVideo {
    102. width: 100%;
    103. height: 98%;
    104. }
    105. style>

     

    这里我封装了两个组件   ,一个是单个的播放,另外一个是窗口切换的

     这个是窗口切换的组件 

    下面是实际使用方法

    因为上面的组件暴露了,所以直接改组件里面的数据、直接播放了6路,下面两个arr是因为来回切换的数据需要

     

    player.value.cellCount = 6;

        player.value.cellData = arr;

        player.value.cellData2 = arr;

  • 相关阅读:
    数字化浪潮,中小企业的降本增效之举
    2.Vue — 模板语法、数据绑定、el与data的写法、数据代理
    前端web实现(@、At、艾特)选人或引用数据
    java 字符串初始化=“” 和=null的区别
    el-form重置后input无法输入问题
    云原生相关概念
    学校介绍静态HTML网页设计作品 DIV布局学校官网模板代码 DW大学网站制作成品下载 HTML5期末大作业
    Go语言进阶篇——泛型
    OS复习笔记ch7-2
    大二Web课程设计:HTML+CSS学校静态网页设计——南京师范大学泰州学院(11页)
  • 原文地址:https://blog.csdn.net/qq_35452726/article/details/137240404