精华内容
下载资源
问答
  • Vue整合Rtmp实现无Flash播放[hls篇]

    千次阅读 2020-01-13 13:22:28
    ①采用nginx搭建媒体服务器,利用ffmpeg工具实现推和转码工作。 ②使用vue+原生hls.js来实现无flash播放m3u8直播 预备知识: linux(操作系统基本命令) nginx(配置参数,基础语法) docker(利用docker...

    小白心路历程篇,如有错误欢迎指出,感谢各位大佬


    本篇包括以下内容:

    ①采用nginx搭建流媒体服务器,利用ffmpeg工具实现推流和转码工作。

    ②使用vue+原生hls.js来实现无flash播放m3u8直播流

    预备知识:

    linux(操作系统基本命令)

    nginx(配置参数,基础语法)

    docker(利用docker搭建基于rtmp模块的nginx容器)

    ffmpeg(一款功能强大的视频处理工具,可以推流,转码,拉流…)

    vue基础

    实现效果:

    vue播放一个m3u8的直播流

    搭建流程步骤:

    1. 提供一个hls直播流(即http://xxx.m3u8此类格式)

    获取方式:

    ①可采用网上一些现成的hls测试网址(此方式可以跳过下面环境搭建环节,直接进入vue页面测试即可)

    ②可自行搭建本地化的流媒体服务器,并用ffmpeg转码成hls直播流

    2. 在vue中通过引入hls.js,并编写相应代码实现直播流播放

    以下为具体实现细节:

    一、环境搭建
    1.1. 服务端采用nginx+ffmpeg搭建
    使用docker构建基于rtmp模块nginx容器
    docker镜像名称:alfg/nginx-rtmp
    tip:该容器内对应的的配置文件所在位置(可以根据dockerfile查获)
    容器内html文件夹所在位置:/opt/nginx/html
    容器内logs日志文件夹所在位置:/opt/nginx/logs
    容器内nginx配置文件夹所在位置:/opt/nginx/nginx.conf
    docker 启动容器参数配置如下:
    docker run --name nginx-rtmp -d -p 80:80 \
    -v /docker/nginx-rtmp/conf/nginx.conf:/opt/nginx/nginx.conf:ro \
    -v /docker/nginx-rtmp/html:/opt/nginx/html \
    alfg/nginx-rtmp

             若启动后查看容器状态为exited,启动失败,可通过以下docker命令查看失败的原因:

    docker logs -f 容器id

             nginx中rtmp服务相关配置:

    rtmp {
        #开启一个rtmp应用服务
        server {
            listen 1935;
            chunk_size 4096; #默认流切片大小
            # create an application with rtmp
            application live {
                    live on;
                    record off;
                    hls on;
                    hls_path /opt/nginx/html/hls;
                    hls_fragment 2s;
                    #在接收到推流时,自动进行流格式转换并推送到本地的hls中,具体参数可以参考ffmpeg官方参数手册
                    #exec ffmpeg -i rtmp://localhost/live/$name -threads 1 -c:v libx264 -profile:v baseline -b:v 350K -s 640x360 -f flv -c:a aac -ac 1 -strict -2 -b:a 56k rtmp://localhost/live360p/$name;
                    #在启动nginx时就执行以下ffmpeg命令 将一个在线的rtmp转成本地的hls流(测试使用,替换成可使用的rtmp地址即可)
                    exec_static ffmpeg -i rtmp://xxxxx.hd -c copy -f flv rtmp://localhost/hls360p/bk;
              }
            application hls360p {
                    live on;
                    hls on;
                    #hls流保存位置,将该目录映射到宿主主机方便查看
                    hls_path /opt/nginx/html/hls2;
                    hls_fragment 2s;
            }
        }
    }
    
    http {
        access_log /dev/stdout combined;
        ssl_ciphers         HIGH:!aNULL:!MD5;
        ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
        ssl_session_cache   shared:SSL:10m;
        ssl_session_timeout 10m;
        server {
            listen 80;
            location /hls {
                types {
                    application/vnd.apple.mpegurl m3u8;
                    video/mp2t ts;
                }
                #hls的访问实际路径,例如访问http://localhost/hls/${name}.m3u8 则会访问对应目录下的m3u8文件
                alias /opt/nginx/html/hls2;
                expires -1;
                add_header Cache-Control no-cache;
                #设置允许跨域访问
                add_header Access-Control-Allow-Origin *;
            }
        }
    }

    踩坑记录:如果是在window操作下的nginx-rtmp模块,则配置中的exec_static指令是不生效的。可通过安装ffmpeg然后以命令行的形式实现推流。

    二、客户端实现
    采用vue+原生hls实现无flash播放m3u8
    在html中引入hls.js,注意,是在html页面中直接全局引入
    <script src="https://cdn.jsdelivr.net/npm/hls.js@latest"></script>

     

    在hls.vue中采用video+原生hls实现监控播放
    <template>
      <div id="hls">
        <video id="video" muted></video>
      </div>
    </template>
    <script>
    export default {
      name: 'hls-video',
      components: {
      },
      data() {
        return{
        }
      },
      methods: {
          //初始化video  
          initVideo () {
              let video = document.getElementById('video')
              if(Hls.isSupported()) {
                let hls = new Hls()
                //该hls地址为nginx配置中的地址
                hls.loadSource('http://172.16.1.72/hls/bk.m3u8')
                hls.attachMedia(video)
                hls.on(Hls.Events.MANIFEST_PARSED,()=>{
                    video.play()
                });
            }else if (video.canPlayType('application/vnd.apple.mpegurl')) {
              video.src = 'http://172.16.1.72/hls/bk.m3u8'
              video.addEventListener('loadedmetadata',function() {
                    video.play()
                })
            }
          }
      },
      created() {
      },
      mounted() {
        this.initVideo()
      },
      computed: {
      },
      watch: {
      }
    }
    </script>
    <style scoped>
    </style>

     

    剩下注册路由访问即可。
    该方式好处是,原生,简单,一个video标签即可。后续可自行进行vue组件二次封装。
    三、思路梳理
    3.1. 步骤
    ①使用ffmpeg进行推流和格式转换,使用nginx做流媒体服务器
    ②流媒体服务器通过映射路径实现转换后的视频流访问

    3.2. 网上还有一种则是采用后端websocket+ffmpeg+flv.js(B站开源的视频直播框架)的解决方案。道理也是相通的,利用ffmpeg进行转码实现无flash播放。

    2020年 chrome已经默认屏蔽flash播放了

    展开全文
  • } } 配置参考 # 工作流 spring: activiti: check-process-definitions: false db-identity-used: true # 自动生成Activiti相关表 第一次生成后建议关闭提高运行速度 database-schema-update: true # 保存历史数据...
    • 宣传官网 http://xb.exrick.cn
    • 在线Demo http://xboot.exrick.cn
    • 开源版Github地址 https://github.com/Exrick/x-boot
    • 开发文档 https://www.kancloud.cn/exrick/xboot/1009234
    • 获取完整版 http://xpay.exrick.cn/pay?xboot
      在这里插入图片描述

    集成Activiti 5.22,考虑到文档资料较多未选用新版本(模型设计器改动较大)或Flowable

    整合Activiti 5.22

    • 添加依赖,因项目已使用Mybatis-Plus,需在这里排除其mybatis依赖
    <!-- Activiti -->
    <dependency>
        <groupId>org.activiti</groupId>
        <artifactId>activiti-spring-boot-starter-basic</artifactId>
        <version>5.22.0</version>
        <exclusions>
            <exclusion>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <!-- Activiti流程图 -->
    <dependency>
        <groupId>org.activiti</groupId>
        <artifactId>activiti-diagram-rest</artifactId>
        <version>5.22.0</version>
    </dependency>
    <!-- Activiti在线设计 -->
    <dependency>
        <groupId>org.activiti</groupId>
        <artifactId>activiti-modeler</artifactId>
        <version>5.22.0</version>
    </dependency>
    
    • 入口类排除Activiti的Security校验
    // Activiti5.22需要排除Security
    @SpringBootApplication(exclude = SecurityAutoConfiguration.class)
    public class XbootApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(XbootApplication.class, args);
        }
    }
    
    • 配置参考
    # 工作流
    spring:
        activiti:
          check-process-definitions: false
          db-identity-used: true
          # 自动生成Activiti相关表 第一次生成后建议关闭提高运行速度
          database-schema-update: true
          # 保存历史数据级别设置为full最高级别,便于历史数据的追溯
          history-level: full
    

    整合模型设计器

    • 下载Activiti 5.22源码Source Code
      https://github.com/Activiti/Activiti/tree/activiti-5.22.0
      https://github.com/Activiti/Activiti/releases/tag/activiti-5.22.0
      -> https://github.com/Activiti/Activiti/archive/activiti-5.22.0.zip
    • 进入modules目录,拷贝图中圈出所需文件
      https://github.com/Activiti/Activiti/tree/activiti-5.22.0/modules
    • 其中stencilset.json可到网上找汉化版本替换,并确认该文件是否放到了resources目录下,如果不是需要修改StencilsetRestResource.java中"stencilset.json"为"xxx/stencilset.json",因此按上图配置此处需替换为InputStream stencilsetStream = this.getClass().getClassLoader().getResourceAsStream("static/stencilset.json");
    • 修改StencilsetRestResource.javaModelEditorJsonRestResource.javaModelSaveRestResource.java就是接口的请求路径前缀,加上@RequestMapping(“xxx”),XBoot中为/xboot/act
    • 接着修改对应app-cfg.js
    ACTIVITI.CONFIG = {'contextRoot' : '/xboot/act', };
    
    • 修改JsonpCallbackFilte.java加上@WebFilter("/xxx/*"),XBoot中为@WebFilter("/xboot/act/*")
    • ModelSaveRestResource.java参数修改
    public void saveModel(@PathVariable String modelId,
                          @RequestParam String name, @RequestParam String description,
                          @RequestParam String json_xml, @RequestParam String svg_xml)
    
    • 测试访问 localhost:8888/modeler.html?modelId=1会出现空白页,集成成功。由于modelId=1随意输入,后台并无id=1的数据,所以报错,具体新建一个模型的接口自行百度即可,当然也可付费获取完整版。
    展开全文
  • 宣传官网 xb.exrick.cn 在线Demo xboot.exrick.cn 开源版Github地址 github.com/Exrick/x-bo… ... Stomp是一种简单()文本定向消息协议,提供了一个可互操作的链接格式。允许stomp客户端与任意sto...

    Stomp是一种简单(流)文本定向消息协议,提供了一个可互操作的链接格式。允许stomp客户端与任意stomp消息代理(Broker)进行交互。STOMP协议由于设计简单,易于开发客户端,因此在多种语言和多种平台上得到广泛地应用。

    • 添加依赖
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-websocket</artifactId>
    </dependency>
    复制代码
    • 配置类
    /**
     * @author Exrickx
     */
    @Configuration
    @EnableWebSocketMessageBroker
    public class WebSocketStompConfig implements WebSocketMessageBrokerConfigurer {
    
        /**
         * 注册stomp端点
         * @param registry
         */
        @Override
        public void registerStompEndpoints(StompEndpointRegistry registry) {
    
            // 允许使用socketJs方式访问 即可通过http://IP:PORT/ws来和服务端websocket连接
            registry.addEndpoint("/ws").setAllowedOrigins("*").withSockJS();
        }
    
        /**
         * 配置信息代理
         * @param registry
         */
        @Override
        public void configureMessageBroker(MessageBrokerRegistry registry) {
    
            // 订阅Broker名称 user点对点 topic广播即群发
            registry.enableSimpleBroker("/user","/topic");
            // 全局(客户端)使用的消息前缀
            registry.setApplicationDestinationPrefixes("/app");
            // 点对点使用的前缀 无需配置 默认/user
            registry.setUserDestinationPrefix("/user");
        }
    }
    复制代码
    • 由于只做广播和点对点的消息推送,这里只用到订阅发布
        @Autowired
        private SimpMessagingTemplate messagingTemplate;
    
        // 广播
        messagingTemplate.convertAndSend("/topic/subscribe", "您收到了新的系统消息");
    
        // 通过用户ID实现点对点
        messagingTemplate.convertAndSendToUser(id,"/queue/subscribe", "您收到了新的消息");
    复制代码

    转载于:https://juejin.im/post/5cc1416e5188252e78449550

    展开全文
  • Stomp是一种简单()文本定向消息协议,提供了一个可互操作的链接格式。允许stomp客户端与任意stomp消息代理(Broker)进行交互。STOMP协议由于设计简单,易于开发客户端,因此在多种语言和多种平台上得到广泛地...
    
    

    Stomp是一种简单(流)文本定向消息协议,提供了一个可互操作的链接格式。允许stomp客户端与任意stomp消息代理(Broker)进行交互。STOMP协议由于设计简单,易于开发客户端,因此在多种语言和多种平台上得到广泛地应用。

    • 添加依赖
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-websocket</artifactId>
    </dependency>
    
    • 配置类
    /**
     * @author Exrickx
     */
    @Configuration
    @EnableWebSocketMessageBroker
    public class WebSocketStompConfig implements WebSocketMessageBrokerConfigurer {
    
        /**
         * 注册stomp端点
         * @param registry
         */
        @Override
        public void registerStompEndpoints(StompEndpointRegistry registry) {
    
            // 允许使用socketJs方式访问 即可通过http://IP:PORT/ws来和服务端websocket连接
            registry.addEndpoint("/ws").setAllowedOrigins("*").withSockJS();
        }
    
        /**
         * 配置信息代理
         * @param registry
         */
        @Override
        public void configureMessageBroker(MessageBrokerRegistry registry) {
    
            // 订阅Broker名称 user点对点 topic广播即群发
            registry.enableSimpleBroker("/user","/topic");
            // 全局(客户端)使用的消息前缀
            registry.setApplicationDestinationPrefixes("/app");
            // 点对点使用的前缀 无需配置 默认/user
            registry.setUserDestinationPrefix("/user");
        }
    }
    
    • 由于只做广播和点对点的消息推送,这里只用到订阅发布
        @Autowired
        private SimpMessagingTemplate messagingTemplate;
    
        // 广播
        messagingTemplate.convertAndSend("/topic/subscribe", "您收到了新的系统消息");
    
        // 通过用户ID实现点对点
        messagingTemplate.convertAndSendToUser(id,"/queue/subscribe", "您收到了新的消息");
    
    展开全文
  • golang整合vue打包文件dist静态文件 打包进exe1.需求描述2.下载工具3.dist文件打包4.golang中配置5.打包6.启动测试 1.需求描述 golang语言开发十分方便, 简洁,能够快速搭建一个webApi,前期工作很小,vue是最新...
  • 本代码为 Springboot 工作流 前后分离 + 跨域 版本 (权限控制到菜单和按钮) 后台框架:springboot2.3.0+ Flowable6.5.0+ mybaits+maven+接口 前端页面:html +vue.js 形式 jquery ajax 异步跨域 ...
  • 特别注意: Springboot 工作流 前后分离 + 跨域 版本 (权限控制到菜单和按钮) 后台框架:springboot2.3.0+ Flowable6.5.0+ mybaits+maven+接口 前端页面:html +vue.js 形式 jquery ajax 异步跨域 json 格式数据...
  • Vue_1 什么是Vue 是目前最火的前端框架,React是最流行的一个前端框架 (React除了开发网站,还可以开发手机App,...vue.js,不仅容易上手,还便于与第三方你库或既有项目整合。 前端主要工作,主要负责mvc中的v这一...
  • 初识Vue

    2021-01-16 18:02:06
    Vue.js 是目前最火的一个前端框架,React是最流行的一个前端框架(React除了开发网站,还可以开发手机App, Vue语法...(Vue有配套的第三方类库,可以整合起来做大型项目的开发) 前端的主要工作?主要负责MVC中的V..
  • 什么是Vue 是目前最火的前端框架,React是最流行的一个前端框架 (React除了开发网站,还可以开发手机...vue.js,不仅容易上手,还便于与第三方你库或既有项目整合。 前端主要工作,主要负责mvc中的v这一层;主要工作...
  • vue第一天 Vue指令

    2019-05-12 20:33:30
    前言:Vue.js 是一套构建用户界面的框架,**只关注视图层**,它不仅易于上手,还便于与第三方库或既有项目整合。(Vue有配套的第三方类库,可以整合起来做大型项目的开发) + 前端的主要工作?主要负责MVC中的V这一...
  • 此项目为Springboot工作流版本 windows 风格,浏览器访问操作使用,非桌面应用程序。 1.代码生成器: [正反双向](单表、主表、明细表、树形表,快速开发利器) freemaker模版技术 ,0个代码不用写,生成完整的一个模块,...
  • VUE笔记1

    2020-04-07 17:40:43
    vue笔记 1.什么是vue.js ...Vue.js 是一套构建用户界面的框架,只关注视图层,它不仅易于上手,还便于与第三方库或既有项目整合 前端的主要工作?主要负责MVC中 V 这一层;主要工作就是和界面打交道,...
  • 一、什么是Vue.js Vue.js是最火的前端框架,可以进行手机app的...Vue.js的主要工作就是负责MVC中V这一层,和界面打交道。 二、为什么要学习流行框架 提高开发效率。 发展历程:原生JS—>Jquery之类的类库—&g...
  • Vue基础介绍

    2020-06-15 16:40:09
    一、什么是Vue Vue.js 是最火的一个前端框架,React是最流行的一个前端框架,...(Vue有配套的第三方类库,可以整合起来做大型项目的开发)主要负责MVC中的V这一层;主要工作就是和界面打交道,来制作前端页面效果; 二
  • vue _DAY1

    2019-07-06 17:10:00
    一、VUE概念? Vue.js (打包工具Webpack) Vue.js 是最流行的前端框架(可以用于手机App开发,...Vue只关注视图层,方便与第三方库项目整合。 前端的主要工作? 前端主要负责MVC的V这一层主要工作就是和界面打...
  • 记录一下最近做camunda工作流时候整合VUE bpmn.js时候遇到的坑吧 1、VUE中引入bpmn.js,在package.json在原有的基础下加入以下内容后npm install "devDependencies": { "vue-template-compiler": "2.6.10", ...
  • ruoyi vue表单设计器

    2020-07-11 10:49:29
    工作流进行整合,在工作流中调用表单。 之前做过一个html标签的拖拽表单设计,感觉写的有点乱,判断各种属性标签生成数据库表字段有点麻烦,所以最近又做了一套vue版本的相比较 vue的操作简单一点, 参考几套oa...
  • 什么是Vue.js

    2020-11-27 19:44:47
    Vue.js 是目前最火的一个前端框架,React是最流行的一个前端框架(React除了开发网站,还可以开发手机App, Vue语法...(Vue有配套的第三方类库,可以整合起来做大型项目的开发) 前端的主要工作?主要负责MVC中的V..

空空如也

空空如也

1 2 3
收藏数 52
精华内容 20
关键字:

vue整合工作流

vue 订阅