当前位置:   article > 正文

使用video.js完成hls/m3u8格式的视频播放_videojs播放m3u8格式文件

videojs播放m3u8格式文件

近期项目中,需要播放视频,最开始给了个测试接口是hls格式的,查了一下,使用了video.js插件来进行播放。后期又改成了flv视频,这里简单记录一下。

1. 下载video.js插件,以及contrib-hls播放插件,页面引入,这两个插件,以及样式

    这里好像涉及到版本问题,高版本的video.js不用下载另一个插件,但是好像会有其他冲突。

  1. import Videojs from "video.js"
  2. import 'video.js/dist/video-js.css';
  3. import 'videojs-contrib-hls.js'

2. 页面相关配置

  1. return
  2. <video ref={videoRef} width="100%" height="80%" id='video' className="video-js"></video>

3. 方法

  1. const videoRef = React.useRef(null);
  2. //1.必须要声明一个播放器的容器 playerRef 就相当于播放器的容器
  3. const playerRef = React.useRef<any>(null);
  4. // -- 点击时去调接口,播放视频 --方法
  5. const getInfo = async () => {
  6. // 当前有视频时,先关闭视频,再重新创建、获取
  7. if (playerRef.current) {
  8. playerRef.current.dispose();
  9. playerRef.current = null;
  10. }
  11. // playerRef没有值时,去进行下一步
  12. if (!playerRef.current) {
  13. console.log('进入重新创建')
  14. // videoRef,video实例 -- current: video#video.video-js
  15. const videoElement = videoRef.current;
  16. // if (!videoElement) return;
  17. // 这些options属性也可直接设置在video标签上
  18. const options = {
  19. autoplay: true, // 设置自动播放
  20. controls: true, // 显示播放的控件,控制条
  21. preload: 'auto', // 自动加载
  22. muted: true, // 设置了它为true,才可实现自动播放,同时视频也被静音 (Chrome66及以上版本,禁止音视频的自动播放)
  23. language: 'zh-CN',
  24. fluid: true, //类型: boolean 何时true,Video.js播放器将具有流畅的大小。换句话说,它将扩展以适应其容器
  25. responsive: true, // 响应性:为true时,播放视频进度条会自动移动
  26. // sources: [
  27. // // 注意,如果是以option方式设置的src,是不能实现 换台的 (即使监听了hlsUrl也没实现)
  28. // {
  29. // src: 'http://39.173.75.10:10019/hls2/D17AC57A16F173E5BA55C0B106D10CC9.m3u8',
  30. // type: 'application/x-mpegURL' // 告诉videojs,这是一个hls流
  31. // },
  32. // {
  33. // src: `${Video_Api}/test/jishi.mp4?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=admin%2F20230323%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20230323T034640Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=4a17446110e1201c1c56bd9c4133ac98255f9ac4d54f708f6e24c42091a2e6a6`,
  34. // type: 'video/mp4'
  35. // }
  36. // ]
  37. }
  38. // handlePlayerReady所在的函数,就是播放器初始化完成时会执行的回调函数
  39. const handlePlayerReady = (player) => {
  40. playerRef.current = player;
  41. // you can handle player events here
  42. player.on('waiting', () => {
  43. console.log('player is waiting');
  44. });
  45. player.on('dispose', () => {
  46. console.log('player will dispose');
  47. });
  48. };
  49. const player = playerRef.current = Videojs(videoElement, options, () => {
  50. console.log("player is ready");
  51. // src地址设为了变量
  52. player.src({ src: address, type: "application/x-mpegURL" })
  53. player.play();
  54. handlePlayerReady(player);
  55. });
  56. }
  57. }

4. 每次页面退出时,关闭播放器

  1. React.useEffect(() => {
  2. const player = playerRef.current;
  3. return () => {
  4. console.log("player会为null,可能跟监听不到playerRef变化有关,旨在初始化的时候赋值player",player)
  5. console.log("playerRef",playerRef)
  6. };
  7. }, [playerRef]);

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/92516
推荐阅读
相关标签
  

闽ICP备14008679号

        
cppcmd=keepalive&