当前位置: 首页 > article >正文

vue视频流播放,支持多种视频格式,如rmvb、mkv

先将视频转码为ts

ffmpeg -i C:\test\3.rmvb -codec: copy -start_number 0 -hls_time 10 -hls_list_size 0 -f hls C:\test\a\output.m3u8
在这里插入图片描述

后端配置接口


import org.springframework.core.io.Resource;
import org.springframework.core.io.UrlResource;
import org.springframework.http.HttpHeaders;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.net.MalformedURLException;
import java.nio.file.Path;
import java.nio.file.Paths;

@RestController
@RequestMapping("/api/video")
public class VideoController4 {

    private final Path videoStorageLocation = Paths.get("C:\\test\\a");

    @GetMapping("/stream/{fileName}")
    public ResponseEntity<Resource> streamVideo(@PathVariable String fileName) {
        try {
            Path filePath = this.videoStorageLocation.resolve(fileName).normalize();
            System.out.println(filePath);
            Resource resource = new UrlResource(filePath.toUri());

            if (resource.exists()) {
                return ResponseEntity.ok()
                        .header(HttpHeaders.CONTENT_TYPE, "application/x-mpegURL")
                        .body(resource);
            } else {
                return ResponseEntity.notFound().build();
            }
        } catch (MalformedURLException ex) {
            return ResponseEntity.badRequest().build();
        }
    }
}

vue代码

<template>
    <div>
        <video ref="videoPlayer" controls >
            
        </video>
    </div>
</template>
import Hls from 'hls.js';
onMounted(() => {
    const video = videoPlayer.value;
    const videoSrc = 'http://localhost:9500/api/video/stream/5.m3u8'; // 替换为你的 .m3u8 视频流地址



    if (Hls.isSupported() && video) {
        const hls = new Hls();
        hls.loadSource(videoSrc);

        hls.attachMedia(video);
        hls.on(Hls.Events.MANIFEST_PARSED, () => {
            // video.play();
        });

    } else if (video && video.canPlayType('application/vnd.apple.mpegurl')) {
        // 如果浏览器原生支持 HLS(如 Safari)
        video.src = videoSrc;
        video.addEventListener('loadedmetadata', () => {
            video.play();
        });

    }
});

在这里插入图片描述


http://www.kler.cn/a/515119.html

相关文章:

  • SQL-leetcode—1164. 指定日期的产品价格
  • 25/1/22 算法笔记<ROS2> TF变换
  • linux网络 | 传输层TCP | 认识tcp报头字段与分离
  • 1/20赛后总结
  • pytorch 多机多卡训练方法
  • 内存 管理
  • vector的使用,以及部分功能的模拟实现(C++)
  • Unity入门1
  • iptables和ipvs差异
  • 攻防世界GFSJ1012 pwnstack
  • GaussDB数据库故障定位手段
  • 詳細講一下mobx的在ReactNative中的用法,包含下載,配置。
  • java开发常用指令整理
  • 【jmeter】下载及使用教程【mac】
  • .NET Framework
  • 【Elasticsearch】RestClient操作文档
  • 数据库-多表查询
  • git远程仓库如何修改
  • 简单排序算法
  • MATLAB绘图时线段颜色、数据点形状与颜色等设置,介绍
  • 手机版扫描王导出 PDF、快速文本识别工具扫描纸张
  • 9. 神经网络(一.神经元模型)
  • 5.SQLAlchemy对两张有关联关系表查询
  • IM系统设计
  • 4.JoranConfigurator解析logbak.xml
  • IDEA中将String类型转json格式