react中实现将一个视频流为m3u8格式的转换

 更新时间:2024年07月02日 10:09:57   作者:kurhar  
这篇文章主要介绍了react中实现将一个视频流为m3u8格式的转换方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

react将一个视频流为m3u8格式的转换

在React中实现M3U8格式的视频流转换需要使用一些库和工具。

一个简单的示例,演示如何将M3U8格式的视频流转换为可播放的URL。

首先:

你需要安装videojs-contrib-hls库,它是一个用于处理M3U8格式的视频流的React组件。

npm install --save video.js videojs-contrib-hls

接下来:

你需要在你的React组件中引入所需的库和样式文件。

import React from 'react';
import videojs from 'video.js';
import 'video.js/dist/video-js.css';
import 'videojs-contrib-hls/dist/videojs-contrib-hls';

class VideoPlayer extends React.Component {
  componentDidMount() {
    // 在组件挂载后初始化视频播放器
    this.player = videojs(this.videoNode, this.props, function onPlayerReady() {
      console.log('视频播放器已准备好');
    });
  }

  componentWillUnmount() {
    // 在组件卸载前销毁视频播放器
    if (this.player) {
      this.player.dispose();
    }
  }

  render() {
    return (
      <div>
        <div data-vjs-player>
          <video ref={(node) => (this.videoNode = node)} className="video-js"></video>
        </div>
      </div>
    );
  }
}

export default VideoPlayer;

以上是一个简单的视频播放器组件示例。

你可以将其用作React应用中显示M3U8格式视频流的容器。

你可以通过将M3U8地址作为组件的props传递给它来播放视频。

例如:

<VideoPlayer src="https://example.com/video.m3u8" />

react实现网页播放m3u8

m3u8是直播常见的格式,如何在网页上播放它呢?

一、如果是safari,则非常简单

因为safari本身就可以支持这种格式,直接用video标签即可,唯一注意的是type一定要指定成application/x-mpegURL

<video height="100%" width="100%" controls>
      <source src={m3u8Url} type="application/x-mpegURL" />
</video>

二、如果用chrome,则需要用到video.js包

具体的解决步骤如下:

1、安装video.js相关的包

npm install --save video.js

网上说还要安装videojs-contrib-hls,但似乎没有装它也是可以正常播放的,这个库具体的作用,待研究

2、写一个videoPlayer.js

import React, { Component } from "react";
import Videojs from "video.js";
//import "videojs-contrib-hls";
import "video.js/dist/video-js.css";

class VideoPlayer extends Component {
  constructor(props) {
    super(props);
  }

  componentWillUnmount() {
    // 销毁播放器
    if (this.player) {
      this.player.dispose();
    }
  }
  componentDidMount() {
    const { height, width, src } = this.props;
    this.player = Videojs(
      "custom-video",
      {
        height,
        width,
        bigPlayButton: true,
        textTrackDisplay: false,
        errorDisplay: false,
        controlBar: true,
        type: "application/x-mpegURL",
      },
      function () {
        this.play();
      }
    );
    this.player.src({ src });
  }

  render() {
    return (
      <video
        id="custom-video"
        className="video-js"
        controls
        preload="auto"
      ></video>
    );
  }
}

export default VideoPlayer;

注意:

1)this.player中的id与video标签中的id一定要一致,react就是用这个id进行绑定的;

2)this.player.src({ src });这行一定要放在player的定义的后面,直接放到Vediojs的初始化的src字段中是没用的。

3)className=“video-js” 这个className一定要用video-js,否则视频播放控件就没有样式了

3、在调用页直接引用VedioPlayer

<VideoPlayer src={m3u8url} width="250" />

这里的m3u8url如果是从服务端获取的,则一定要保证先获取成功了再加载VideoPlayer,否则m3u8url为空,页面依然是播放不了

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • react中事件处理与柯里化的实现

    react中事件处理与柯里化的实现

    本文主要介绍了react中事件处理与柯里化的实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • 详解React 和 Redux的关系

    详解React 和 Redux的关系

    这篇文章主要为大家介绍了React 和 Redux的关系,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-11-11
  • react开发中如何使用require.ensure加载es6风格的组件

    react开发中如何使用require.ensure加载es6风格的组件

    本篇文章主要介绍了react开发中如何使用require.ensure加载es6风格的组件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • JavaScript中的useRef 和 useState介绍

    JavaScript中的useRef 和 useState介绍

    这篇文章主要给大家分享的是 JavaScript中的useRef 和 useState介绍,下列文章,我们将学习 useRef 和 useState hook是什么,它们的区别以及何时使用哪个。 这篇文章中的代码示例将仅涉及功能组件,但是大多数差异和用途涵盖了类和功能组件,需要的朋友可以参考一下
    2021-11-11
  • 详解react中的state的简写方式

    详解react中的state的简写方式

    React是一个状态机主要体现在state上,通过与用户交易实现不同的状态,state是组件的私有属性,是用来初始化的,本文重点给大家介绍react中的state的简写方式,感兴趣的朋友一起看看吧
    2021-08-08
  • 详解react服务端渲染(同构)的方法

    详解react服务端渲染(同构)的方法

    这篇文章主要介绍了详解react服务端渲染(同构)的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • 如何强制刷新react hooks组件

    如何强制刷新react hooks组件

    这篇文章主要介绍了如何强制刷新react hooks组件问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • React实现一个通用骨架屏组件示例

    React实现一个通用骨架屏组件示例

    骨架屏就是在页面数据尚未加载前先给用户展示出页面的大致结构,直到请求数据返回后再渲染页面,补充进需要显示的数据内容,本文就介绍了React实现一个通用骨架屏组件示例,分享给大家,感兴趣的可以了解一下
    2021-12-12
  • 关于React Native使用axios进行网络请求的方法

    关于React Native使用axios进行网络请求的方法

    axios是一个基于Promise的Http网络库,可运行在浏览器端和Node.js中,Vue应用的网络请求基本都是使用它完成的。这篇文章主要介绍了React Native使用axios进行网络请求,需要的朋友可以参考下
    2021-08-08
  • React Fragment介绍与使用详解

    React Fragment介绍与使用详解

    本文主要介绍了React Fragment介绍与使用详解,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11

最新评论