2021SC@SDUSC 软件工程应用与实践(8)——知识图谱视频的获取与播放(下)

本文详细介绍了如何在老年健康知识图谱系统中使用ElementUI的Table组件展示数据,并实现视频播放功能。通过点击表格中的“查看详情”按钮,调用showDetail方法获取视频链接,利用对话框展示视频。同时,对话框还支持关闭前的确认操作,确保视频播放的顺畅。此外,对于文字文件,文章也展示了如何转换为HTML并显示。

2021SC@SDUSC

一、引言

本篇博客将对老年健康知识图谱系统中的播放视频功能的前端代码进行分析。

二、代码分析

1.知识图谱视频的获取

Element UI组件 Table 表格

在系统中,我们使用Element的Table表格组件,用于展示多条结构类似的数据,可对数据进行排序、筛选、对比或其他自定义操作。

<el-table
        :header-cell-style="{background:'#fafafa',color:black}"
        :data="tableData"
        style="width: 100%">
        <el-table-column
          type="index"
          label="序号">
        </el-table-column>
        <el-table-column
          prop="indexName"
          width="200"
          label="指标名称">
        </el-table-column>
        <el-table-column
          prop="fileName"
          width="400"
          label="文件名称">
        </el-table-column>
        <el-table-column
          prop="fileType"
          width="100"
          label="文件类型">
        </el-table-column>
        <el-table-column label="操作">
          <template slot-scope="scope">
            <el-button
              size="mini"
              type="primary"
              round
              @click="showDetail(scope.$index, scope.row)">查看详情</el-button>
          </template>
        </el-table-column>
      </el-table>

其中,在表格的“操作”这一列中,提供了“查看详情”的按钮,通过点击这个按钮可以实现对视频和word文档等的播放与查看。

showDetail方法

“查看详情”的功能被定义在showdetails的方法内。

  methods:{
    //查看详情
    showDetail(index,row){
      //获取文件名称
      let fileName = row.fileName;
      let fileType = row.fileType;
      //根据文件名和文件类型发送axios请求获取链接
      if(fileType == '视频'){
        this.videoSrc = "http://localhost:8989/video/" + fileName;
        //显示视频对话框
        this.videoDialogVisible = true;
      }
      else if(fileType == '文字'){
        this.wordSrc = "http://localhost:8989/word/" + fileName;
        this.audioSrc = "http://localhost:8989/audio/" + fileName.substring(0,fileName.indexOf('.')) + ".wav";
        //读取word文档对应的路径,转为html,并显示在页面上
        let vm = this;
        const xhr = new XMLHttpRequest();
        xhr.open("get", this.wordSrc, true);
        xhr.responseType = "arraybuffer";
        xhr.onload = function () {
          if (xhr.status == 200) {
            mammoth
              .convertToHtml({ arrayBuffer: new Uint8Array(xhr.response) })
              .then(function (resultObject) {
                vm.$nextTick(() => {
                  vm.word=resultObject.value;
                });
              });
          }
        };
        xhr.send();
        this.wordDialogVisible = true;
      }
    },

2.知识图谱视频的对话框

在获取到视频链接后执行 this.videoDialogVisible = true语句,显示视频对话框。
:visible指的是属性绑定,表示弹框的显示隐藏,当:visible的值为ture的时候,弹框显示,当为false的时候,弹框隐藏

后面的.sync是什么意思呢,指的就是同步动态双向的来表示visible的值,当我们关闭窗口的时候,这个弹框隐藏了,visible的值发生了变化,但是关闭窗口这个动作,我们没法用确定的动作去判断这个值,所以用到了vue中的双向绑定的原则,在vue中统一加上了.sync来表示同步的修改了visible的值。

知识图谱中的相关视频会通过dialog对话框播放。
before-close 仅当用户通过点击关闭图标或遮罩关闭 Dialog 时起效。如果你在 footer 具名 slot 里添加了用于关闭 Dialog 的按钮,那么可以在按钮的点击回调函数里加入 before-close 的相关逻辑。

<el-dialog
      title="视频"
      :visible.sync="videoDialogVisible"
      :before-close="closeVideoDialog"
      width="640">
      <video ref="video" :src="videoSrc" width="100%" height="360" controls>
        <source type="video/mp4">
      </video>
    </el-dialog>

当关闭对话框时,会停止视频的播放。

    closeVideoDialog(done){
      this.$refs.video.pause();
      done()
    },

pause() 方法停止(暂停)当前播放的音频或视频。this.$refs.video.pause()语句使视频的播放暂停,done()将播放视频的对话框关闭。
HTMLVideoElement 接口提供了用于操作视频对象的特殊属性和方法。它同时还继承了HTMLMediaElement 和 HTMLElement 的属性与方法。
在不同浏览器中 支持的媒体格式 是不一样的。因此在提供媒体文件的时候,或者提供一种所有浏览器都支持的格式,或者提供格式不同的多个视频源来支持不同浏览器,保证你想要支持的浏览器都能够播放。

### 2021 SC SDUSC IT相关信息 #### ByteToMessageDecoder解析 `ByteToMessageDecoder` 是Netty框架中的一个重要解码器类,用于处理字节流到消息对象的转换过程。此类实现了入站处理器接口,在接收到的数据被读取之后触发调用方法来执行具体的解码逻辑[^1]。 ```java public abstract class ByteToMessageDecoder extends ChannelInboundHandlerAdapter { protected void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) throws Exception; } ``` 该类提供了一个抽象方法 `decode()` ,子类需实现此方法完成特定的应用层协议解析工作。当有新的数据到达时会自动调用这个函数来进行逐步解码操作直到所有可用输入都被消耗完毕为止。 #### 后端文件夹sdudoc-mbg分析 针对项目后端部分中名为 `sdudoc-mbg` 的模块进行了深入探讨。这部分主要涉及数据库映射生成工具MyBatis Generator (MBG),它能够自动生成持久化所需的Java实体类以及相应的DAO访问代码,大大提高了开发效率并减少了手工编写重复SQL语句的工作量[^2]。 #### 数据结构定义EVP_CIPHER_CTX 在OpenSSL库中存在一种称为 `EVP_CIPHER_CTX` 的数据类型,其实际是一个指向内部结构体指针类型的别名声明。这种上下文环境主要用于加密算法的操作过程中保存状态信息和其他必要的参数设置等[^3]: ```c typedef struct evp_cipher_ctx_st EVP_CIPHER_CTX; ``` 上述代码片段展示了如何通过宏定义的方式创建一个新的类型名称以便于后续编程使用更加直观易懂。 #### Senta输入变量说明 Senta作为自然语言处理平台之一,在接收外部传入的数据时支持多种基础数值型张量形式作为模型训练样本集的一部分。具体来说就是允许用户指定维度大小不固定的矩阵或者向量,并且限定了所含元素仅能采用浮点数或整数两种基本类别以确保计算精度满足需求[^4]。 #### 组件特性描述 为了增强系统的灵活性和健壮性,某些组件设计上融入了几项重要的机制:日志记录能力使得开发者可以在运行期间获取详细的调试线索;配置管理则让用户可以根据实际情况调整行为模式而无需修改源代码本身;资源清理功能保证了即使发生异常也能安全地终止程序而不遗留未关闭的对象实例;最后循环利用策略有助于降低垃圾收集频率进而优化整体性能表现并缓解潜在内存压力问题[^5]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LiuFangdi145

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值