广告位联系
返回顶部
分享到

HTML5兼容HEVC视频格式且支持本地绝对路径访问的操作方法

html5 来源:互联网 作者:佚名 发布时间:2024-05-15 21:31:22 人浏览
摘要

通过PotPlayer发现该MP4文件的编码格式为HEVC,而video标签不支持该编码格式的视频文件 在HTML文件中首先需要引用libe265.js来负责处理HEVC格式文件 libde265.js/libde265.js at master strukturag/libde265.js GitHu

通过PotPlayer发现该MP4文件的编码格式为HEVC,而video标签不支持该编码格式的视频文件

在HTML文件中首先需要引用libe265.js来负责处理HEVC格式文件

libde265.js/libde265.js at master · strukturag/libde265.js · GitHub

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <meta http-equiv="X-UA-Compatible" content="IE=edge">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>Document</title>

</head>

<body>

    <canvas id="canvas"></canvas>

    <script src="./libde265.js"></script> 

    <script> 

    var VIDEO_URL = 'http://localhost/file/video?fileName=E:\\test\\1_monitor01_1668690540000.mp4' 

    var video = document.getElementById('canvas') 

     // var fpsWrap = document.querySelector('.hevc-fps')

      var status = document.querySelector('.hevc-status')

      var playback = function (event) {

        // event.preventDefault()

        // if (player) {

        //   player.stop()

        // }

        player = new libde265.RawPlayer(video)

        player.set_status_callback(function (msg, fps) {

          player.disable_filters(true)

          console.log(msg);

          switch (msg) {

            case 'loading':

              status.innerHTML = 'Loading movie...'

              break

            case 'initializing':

              status.innerHTML = 'Initializing...'

              break

            case 'playing':

              status.innerHTML = 'Playing...'

              break

            case 'stopped':

              status.innerHTML = 'stopped'

              break

            case 'fps':

              // fpsWrap.innerHTML = Number(fps).toFixed(2) + ' fps'

              break

            default:

              status.innerHTML = msg

          }

        })

        player.playback(VIDEO_URL)

      }

      playback()

    </script> 

</body>

</html>

而通过绝对路径来寻找本地视频文件则可通过后端(SpringBoot)编写接口进行操作

以下是Controller层代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

@RestController

@RequestMapping("/file")

@CrossOrigin(origins = "*")

public class FileController {

    @Resource

    public IFileService fileService;

    /**

     * 根据本地图片全路径,响应给浏览器1个图片流

     */

    @GetMapping("/image/{fileName}")

    public void showImage(HttpServletResponse response, @PathVariable("fileName") String fileName) {

        fileService.show(response, fileName, "image");

    }

    /**

     * 根据本地视频全路径,响应给浏览器1个视频

     */

    @GetMapping ("/video")

    public void showVideo(HttpServletResponse response, String fileName) {

        fileService.show(response, fileName, "video");

    }

}

以下是Sevice层代码 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

@Service

public class FileServiceImpl implements IFileService {

    /**

     * 响应文件

     *

     * @param response

     * @param fileName 文件全路径

     * @param type     响应流类型

     */

    public void show(HttpServletResponse response, String fileName, String type) {

        try {

            FileInputStream fis = new FileInputStream(fileName); // 以byte流的方式打开文件

            int i = fis.available(); //得到文件大小

            byte data[] = new byte[i];

            fis.read(data);  //读数据

            response.setContentType(type + "/*"); //设置返回的文件类型

            OutputStream toClient = response.getOutputStream(); //得到向客户端输出二进制数据的对象

            toClient.write(data);  //输出数据

            toClient.flush();

            toClient.close();

            fis.close();

        } catch (ClientAbortException cae) {

            cae.printStackTrace();

            System.out.println("播放中断");

        } catch (Exception e) {

            e.printStackTrace();

            System.out.println("文件不存在");

        }

    }

}


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 :
相关文章
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计