webrtc视频播放器(ZLMRTCClient.js)

这篇具有很好参考价值的文章主要介绍了webrtc视频播放器(ZLMRTCClient.js)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

引言

在播放实时视频时,视频播放器一般会有延迟,此时,就可以使用webrtc来拉流,延迟在1s或者基本没有延迟。与zlm配套的rtc js客户端.(国标)

1.开源项目地址

ZLMRTCClient.js: 与zlm配套的rtc js客户端

ZLMRTCClient.js: 与zlm配套的rtc js客户端https://gitee.com/xiongguangjie/zlmrtcclient.js

按照 下图执行命令行,则自动生成ZLMRTCClient.js文件

webrtc视频播放器(ZLMRTCClient.js)

2.引入ZLMRTCClient.js

将ZLMRTCClient.js文件,存放到public文件中;

在index.html文件中引入文件;

webrtc视频播放器(ZLMRTCClient.js)webrtc视频播放器(ZLMRTCClient.js)

3.封装视频播放器组件(子组件)

<template>
  <!-- webrtc播放器 -->
  <video :id="videoId"
         ref="jswebrtc"
         :controls="controls"
         style="width: 100%; height: 100%; object-fit: fill;"
         muted></video>
</template>

<script>
export default {
  name: 'webrtcPlayer',
  props: {
    videoId: {
      type: String,
      default: 'jswebrtc'
    },
    videoSrc: {
      type: String,
      default: ''
    },
    controls: {
      type: Boolean,
      default: true
    }
  },
  data () {
    return {
      player: null
    }
  },
  mounted () {
    this.$watch('videoSrc', () => {
      console.log('videoSrc', this.videoSrc)
      if (this.videoSrc) {
        this.initVideo(this.videoSrc);
      } else {
        this.stop()
      }
    }, { immediate: true, deep: true })
  },
  methods: {
    initVideo (url) {

      console.log('播放器', this.player)
      //关闭流
      if (this.player) {
        this.player.pc.close()
        this.player = null;
      }

      let videoDom = document.getElementById(this.videoId);


      this.player = new ZLMRTCClient.Endpoint({
        element: videoDom, // video 标签
        debug: true, // 是否打印日志
        zlmsdpUrl: url, //流地址
        simulcast: true,
        useCamera: true,
        audioEnable: true,
        videoEnable: true,
        recvOnly: true,
        resolution: {
          w: 600,
          h: 340
        },
        usedatachannel: true,
      });

      this.player.on(ZLMRTCClient.Events.WEBRTC_ICE_CANDIDATE_ERROR, function (e) { // ICE 协商出错
        console.log('ICE 协商出错')
      });

      this.player.on(ZLMRTCClient.Events.WEBRTC_ON_REMOTE_STREAMS, function (e) { //获取到了远端流,可以播放
        console.log('播放成功', e.streams)
        videoDom.addEventListener('canplay', function (e) {
          videoDom.play();
        })
      });
      this.player.on(ZLMRTCClient.Events.WEBRTC_OFFER_ANWSER_EXCHANGE_FAILED, function (e) { // offer anwser 交换失败
        console.log('offer anwser 交换失败', e)
        // this.player.destroy();
        // this.player = null;

      });

      this.player.on(ZLMRTCClient.Events.WEBRTC_ON_LOCAL_STREAM, function (s) { // 获取到了本地流

        console.log('offer anwser 交换失败', e)
      });

      this.player.on(ZLMRTCClient.Events.CAPTURE_STREAM_FAILED, function (s) { // 获取本地流失败
        console.log('获取本地流失败')
      });

      this.player.on(ZLMRTCClient.Events.WEBRTC_ON_CONNECTION_STATE_CHANGE, function (
        state
      ) { // RTC 状态变化 ,详情参考 https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection/connectionState
        console.log('当前状态==>', state)
      });

      this.player.on(ZLMRTCClient.Events.WEBRTC_ON_DATA_CHANNEL_OPEN, function (event) {
        console.log('rtc datachannel 打开 :', event)
      });

      this.player.on(ZLMRTCClient.Events.WEBRTC_ON_DATA_CHANNEL_MSG, function (event) {
        console.log('rtc datachannel 消息 :', event.data)
      });
      this.player.on(ZLMRTCClient.Events.WEBRTC_ON_DATA_CHANNEL_ERR, function (event) {
        console.log('rtc datachannel 错误 :', event)
      });
      this.player.on(ZLMRTCClient.Events.WEBRTC_ON_DATA_CHANNEL_CLOSE, function (event) {
        console.log('rtc datachannel 关闭 :', event)
      });

    },
    stop () {
      let videoDom = document.getElementById(this.videoId);
      videoDom.pause()
      //关闭流
      this.player.pc.close()
      this.player = null
    }
  },
  beforeDestroy () {

    if (this.player) {
     //关闭流
      this.player.pc.close()
      this.player = null;
    }
  }
}
</script>

<style>
</style>

 4.使用(引入播放器组件)

//HTML
 <WebrtcPlayer v-if="videoUrl[indexL]"
               class="video-window"
                :videoSrc="videoUrl[indexL]"
                :videoId="'videoId'+indexL"
                ref="videoWindow"
                 :key="indexL">
 </WebrtcPlayer>

//JS
import WebrtcPlayer from '@/components/webrtc/webrtcPlayer.vue'
export default {
  directives: { elDragDialog },
  components: {
    LivePlayer,
    WebrtcPlayer
  },
...
}

5.关闭视频流

由于webrtc会不断拉去视频流,如何让关闭视频流可以使用如下方法,具体如上文章来源地址https://www.toymoban.com/news/detail-513512.html

    if (this.player) {
     //关闭流
      this.player.pc.close()
      this.player = null;
    }
  

到了这里,关于webrtc视频播放器(ZLMRTCClient.js)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Qt推流程序(视频文件/视频流/摄像头/桌面转成流媒体rtmp+hls+webrtc)可在网页和播放器远程观看

    推流直播就是把采集阶段封包好的内容传输到服务器的过程。其实就是将现场的视频信号从手机端,电脑端,摄影机端打包传到服务器的过程。“推流”对网络要求比较高,如果网络不稳定,直播效果就会很差,观众观看直播时就会发生卡顿等现象,观看体验比较糟糕。主流

    2024年02月04日
    浏览(73)
  • 【VideoJs】初识videojs && video.js 视频播放器的基本使用 && videojs基础用法 && videojs视频播放器 && vue3中使用videojs

    免费,开源 插件多 可自定义 【推】 虽然,但是Videojs算好了,但我觉得有点杂,特别是文档与插件,且自定义插件有点困难,也可能是我比较菜吧 相比之下,我还是强烈推荐 【Xgplayer ——点我进入】 备用地址 http://t.csdn.cn/H0cAV Xgplayer 优点 优雅、美观 文档清晰明了 大厂出

    2024年02月03日
    浏览(62)
  • vue项目中视频实时播放时播放器遇到的问题和解决过程 flv.js - EasyPlayer - LivePlayer

    需要画面监控设备实时播放,支持HTTP-FLV直播流,支持其他流后续可能会更换 需要类似于安防监控多个视频实时画面同步 播放器可控制度强,完全由我们来控制播放暂停进行拉流断流 项目使用的是的vue3+ts 原本使用的video.js 但是不支持HTTP-FLV播放,改用flv.js 引入flv.js 开发问

    2024年02月01日
    浏览(48)
  • vue项目中视频实时播放时 播放器遇到的问题和解决过程 flv.js - EasyPlayer - LivePlayer

    需要画面监控设备实时播放,支持HTTP-FLV直播流,支持其他流后续可能会更换 需要类似于安防监控多个视频实时画面同步 播放器可控制度强,完全由我们来控制播放暂停进行拉流断流 项目使用的是的vue3+ts 原本使用的video.js 但是不支持HTTP-FLV播放,改用flv.js 引入flv.js 开发问

    2024年01月24日
    浏览(48)
  • springboot + vue3实现视频播放Demo(video.js & Vue3-video-play视频播放器)

    ffmpeg官网 长时长视频java存储及vue播放解决方法 【 攻城略地 】vue3 + video.js播放m3u8视频流格式 Vue3-video-play组件官网 Vue3视频播放器组件Vue3-video-play入门教程 vue-video-player播放m3u8格式的视频 Spring boot视频播放(解决MP4大文件无法播放),整合ffmpeg,用m3u8切片播放。 Java获取MP4视频文

    2024年02月07日
    浏览(75)
  • 【Unity】代码控制视频的播放(视频播放器-更新)

     结果如上图,之前写过一个使用代码控制视频播放器的Demo,但是好多小伙伴说我附带的链接没法下载,这次我直接做一个完整版的,不用下载,照着一步一步做就能做出来。 之前写了如何设置RawImage进行自动播放,大家可以看一下基础操作这篇文章:,大佬勿怪。 【Unity】

    2024年02月09日
    浏览(59)
  • 【Xgplayer】xgplayer基本使用 | xgplayer使用 | 超好的前端视频播放器 | xgplayer前端最好视频播放器

    开发团队——字节跳动,字节跳动出品,必属精品。 xgplayer是一个超级牛逼的前端视频播放器,以下几个观点足以证明它的强大 大厂出品——稳 简洁 实用 优雅 文档清晰明了 支持弹幕 对移动端非常友好 自定义插件方便且强大 强就是了 xgplayer官网-点我进入 备用地址 https:

    2024年02月06日
    浏览(76)
  • 阿里云视频播放器

    阿里云的视频播放器类比 HTML5视频播放标签video和音频播放标签audio标签 只是阿里云视频播放器是针对阿里云上传的视频进行多功能配置和操作。 最终:阿里云视频播放器就是基于阿里云视频的前端播放标签 阿里云播放器 SDK ( ApsaraVideo Player SDK)是阿里视频服务的重要一环

    2023年04月09日
    浏览(61)
  • 学习笔记(1)——粤嵌gec6818实现电子相册,音乐播放器,视频播放器。

    (1)设计一个初始界面,并且设置电子相册,音乐播放器,视频播放器三个触摸按键。 (2)电子相册——能够实现相册的幻灯片功能,实现相册左右滑动切换相片。 (3)音乐播放器实现——切歌,播放和暂停功能。 (4)视频播放器实现——播放、暂停、音量大小、快进倒

    2024年02月11日
    浏览(61)
  • 电脑自带播放器怎么倍速播放视频

    1.选择视频文件,鼠标右击在打开方式中选择Windows Media Player播放器打开视频 2. 在Windows Media Player视频播放器中鼠标右击选择“播放速度设置”,再选择增强功能即可调整播放速度了。    

    2024年02月11日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包