webrtc视频播放器(ZLMRTCClient.js)

2023-05-16

引言

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

1.开源项目地址

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

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

2.引入ZLMRTCClient.js

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

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

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

<template>
  <!-- webrtc播放器 -->
  <video :id="videoId"
         ref="jswebrtc"
         :controls="controls"
         style="width: 100%; height: 100%; object-fit: fill;"></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) {
      if (this.player) {
        // this.player.destroy();
        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 = null
    }
  },
  beforeDestroy () {
    if (this.player) {
      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
  },
...
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

webrtc视频播放器(ZLMRTCClient.js) 的相关文章

  • 在网络浏览器中实现一个好的 redis 客户端需要什么?

    之前已经有人问过这个问题我可以从浏览器中运行的 JavaScript 直接连接到 Redis 服务器吗 https stackoverflow com questions 5759120 can i connect directly to
  • 本地网络上的 WebRTC? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我一直在阅读有关 WebRTC 的内容 它看起来非常有前途 我想制作一个简单的局域网游戏 自动连接同一网络上的人们 尽管我可以找到人们
  • iOS 11(Beta)中的webKit支持WebRTC吗?

    我有一个 URL 可以在 iOS11 测试版 上的 Safari 上正常工作 音频 视频也可以正常工作 但是 当我使用 WKWebView 加载此 URL 时 它会给我一个错误 不兼容的浏览器 当我在 WebKit 中检查浏览器版本时 它会
  • 为Windows应用程序实现webrtc数据通道[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 有谁知道如何向用 C 构建的 Windows 应用程序实现 WebRTC DataChannel API 以便在 NAT 后面的客户端
  • 是否可以从具有跨源数据的元素中捕获?

    我在 webRTC 文档中找到了这个简单的脚本 我尝试运行它 但似乎我遗漏了一些东西 const leftVideo document getElementById leftVideo const rightVideo document g
  • Android WebRTC 自定义捕获器

    我已经编译了 webRTC 演示应用程序 我看到捕获帧是由VideoCaptureAndroid java与本机代码紧密耦合的文件 我需要添加将我自己的帧推送到 webRTC 库以在视频通道上发送的功能 我可以用 C NDK 或 Java
  • 在 Objective C 中使用 static init 有什么好处?

    最近我发现来自 Github 的 webrtc ios 示例 https github com gandg webrtc ios 当我浏览该项目时 我注意到 VideoView 类使用静态方法 但我不确定这是否必要 VideoView 是
  • WebRTC 局域网内是否需要 STUN 服务器?

    我使用Webrtc开发了一个p2p视频聊天 我知道需要 STUN 或 TURN 服务器来识别 NAT 后面的公共 IP 目前正在使用 Google 的 STUN 服务器 我的应用程序安装在连接到 LAN 的服务器上 但无法访问互联网 我是否
  • WebRTC 暂停和恢复流

    我正在尝试使用 WebRTC 构建一个 Web 应用程序 当某些事件触发时需要暂停 恢复视频 音频流 我已经尝试过getTracks 0 stop 但我不知道如何恢复流 对此有什么建议吗 谢谢 getTracks 0 stop 是永久的 U
  • Websocket 连接失败并显示星号 11

    我正在尝试将 websocket 配置为与 asterisk 11 一起使用 但是存在一些问题 我遵循的步骤是 在 http conf 中启用以下内容 enabled yes bindaddr 0 0 0 0 bindport 8088 我
  • 通过 Websockets 进行 WebRTC 视频聊天

    我正在尝试使用 webRTC 和 WebSockets 进行信号发送来开发视频聊天应用程序 我的问题是 我不知道创建 RTCPeerConnection 并通过 webSocket 连接两个对等点 2 个浏览器 的过程是什么 至少在本地 我
  • p2p 通信中的对等方如何相互验证?

    WebRTC 中的对等点如何相互验证 WebRTC 中的 DTLS 使用自签名证书 RFC 5763 https www rfc editor org rfc rfc5763具有详细信息 简而言之 证书指纹与 SDP 的 a fingerp
  • 使用 HTML5 或 Javascript 的 P2P 视频会议

    我正在尝试使用 html5 和 javascript 构建视频会议 直到现在我能够流式传输我的相机捕获并将其显示在画布上 这是代码
  • 为arm构建WebRTC

    我想为我的带有arm926ej s处理器的小机器构建webrtc 安装 depot tools 后 我执行了以下步骤 gclient config http webrtc googlecode com svn trunk gclient s
  • 如何在服务器上使用 ffmpeg 从 WebRTC 流获取音频和视频

    我正在尝试从 WebRTC 流获取音频和视频 并在 ubuntu 服务器上使用 ffmpeg 处理它 转码或转储 我天真地期望它能简单地解释 WebRTC 提供的 sdp 但我错了 我怀疑 ffmpeg 无法发回答案 sdp 必须手动完成
  • WebRTC - 消除/减少共享视频流的设备之间的延迟?

    我很抱歉没有发布任何代码 但我正在尝试了解更多有关延迟和webRTC 最好的方法是什么remove latency between two or more devices that are sharing a video stream 或者
  • 如何提高webrtc的码率?

    我正在使用 webrtc 将 1080p 视频流从一个选项卡发送到同一台计算机 windows10 chrome 76 上的另一个选项卡 而且接收方的视频质量不如发送方 码率只有2400kbps 300kb s 左右 1080p和720p没
  • mime.lookup 的 webrtc 错误

    我在我的电脑上尝试了 webrtc 演示 但在演示步骤 04 中 当我使用 npm install 和 node index js 时 它显示 类型错误 mime lookup 不是一个函数 即使我通过输入 npm install mime
  • 检查 WebRTC 连接 - 可靠的方法

    我有一个实时视频聊天应用程序 并且使用支持 STUN TURN 和 UPD TCP 传输的 TURN 服务器 有时用户可以连接到网络blocksWebRTC 连接的端口和协议就这么多不可能发生 通常这些是公司网络 我想在用户尝试相互连接之前
  • 音频 blob 的 URL.createObjectURL 在 Firefox 中给出 TypeError

    我正在尝试从创建的音频 blob 创建对象 URLgetUserMedia 该代码在 Chrome 中可以运行 但在 Firefox 中存在问题 错误 当我打电话时stopAudioRecorder 它停在audio player src

随机推荐

  • NFC协议概述

    NFC协议概述 NFC相关的标准化组织 ISO 国际标准化组织 xff08 International Organization for Standardization xff09 简称ISO xff0c 是世界上最大的非政府性标准化机构
  • 计算机网络

    计算机网络 计算机网络是利用通信线路和通信设备 xff0c 把地理上分散并且具有独立功能的多个计算机系统互相连接 xff0c 按照网络协议进行数据通信 xff0c 通过功能完善的网络软件实现资源共享的计算机系统集合 计算机网络的功能 计算机
  • html标签手册

    完整的HTML页面 x1f4d1 基础标签 x1f4d1 x1f4d1 x1f4d1 HTML lt DOCTYPE gt 声明 DOCTYPE声明必须是 HTML 文档的第一行 xff0c 位于 html标签之前 DOCTYPE 声明不是
  • BCD码的作用和实现

    内容部分摘抄于朱有朋老师 BCD码本质是对数字的一种编码 xff0c 用来解决这种问题 xff1a 由56得到0x56 或者反过来 也就是说我们希望十进制的56被编码成56 xff08 这里56不是十进制的56 xff0c 而是两个数字5和
  • window和虚拟机(Linux)通过串口通讯

    准备工具 虚拟串口驱动 虚拟机 xff08 我的是乌班图版本 xff09 串口调试助手 xff08 以上网上自己找来下载 xff09 利用虚拟机串口驱动添加2个虚拟串口 xff08 com1和com2 xff09 xff0c 然后打开串口调
  • 关于‘QByteArray::operator QNoImplicitBoolCast() const’ is private

    home hins Qt5 9 8 5 9 8 gcc 64 include QtCore qbytearray h 436 error QByteArray operator QNoImplicitBoolCast const is pr
  • Linux创建虚拟CAN

    创建 xff1a 加载vcan内核模块 sudo modprobe vcan创建虚拟CAN接口 sudo ip link add dev can0 type vcan xff08 can0就是你要创建的设备 xff09 将虚拟CAN接口处于
  • 解决ubuntu20.04 连接xshell显示ssh拒绝服务

    近两天在弄linux系统 xff0c 突然xshell就连接不上了 xff0c 连接的时候一直显示ssh拒绝访问 折腾几个小时总算解决了 xff0c 现对其进行记录 报错情况 xff1a 手动分界效果 首先看下本机IP和虚拟机设置的IP是否
  • C++文件的建立

    C 43 43 文件的建立 include include int main using namespace std ofstream ofs jar txt ios out ofs lt lt 小明 lt lt endl ofs lt l
  • DB2数据库的安装-for linux

    DB2的安装 1 安装DB2服务端 将db2v8 iso文件 FP6 tar 安装响应文件db2ese rsp 复制到 home install 目录下 root cd home install mkdir iso fp root moun
  • ROS学习笔记-Gazebo安装与闪退、卡顿问题解决

    1 安装 在安装完整版的ROS后 xff0c 就包括了Gazebo的安装了 xff0c 因此在终端输入下载指令时 xff0c 出现已存在的反馈信息 安装完整版ROS的指令是 xff1a sudo apt get install ros me
  • win10+vs2015+Intel RealSense D435i深度相机配置

    第一步 xff1a Intel RealSense D435i的SDK下载 链接 xff1a https pan baidu com s 1sIDlkbk8U9PFmJLhGJndxg 提取码 xff1a lppa 第二步 xff1a 测试
  • Vue中使用element-ui的el-dialog对话框,实现拖拽效果

    效果图 xff1a element ui的el dialog对话框 xff0c 没有拖拽移动的效果 xff0c 需要自定义指令来实现对话框拖拽 1 准备 xff1a 在准备一个vue组件 xff08 点击按钮弹出对话框 xff09 功能 x
  • 前端知识点(六):网页中有大量图片时加载很慢,如何优化?

    1 图片懒加载 在图片未可视区域加一个滚动条事件 xff0c 判断图片位置与浏览器顶端和页面的距离 xff0c 当图片到浏览器顶端的距离 xff0c 小于图片到页面的距离时 xff0c 优先加载 2 图片预加载 将当前展示图片的前一张和后一
  • 请求类型get,delete,post,put 的用法(传参)

    1 get delete传参 注意 xff1a xff08 1 xff09 传参格式 xff1a 96 URL key 61 value amp key2 61 value2 96 xff08 2 xff09 注意使用反引号 xff0c 而
  • 关于前端--RSA加密(对登录密码加密)

    安装 npm install jsencrypt 1 在utils文件中封装一个jsencrypt js文件 密匙对生成链接 xff1a http web chacuo net netrsakeypair import JSEncrypt
  • Vue+Uniapp实现直播功能(推流拉流)

    提示 xff1a 前言 目前有一个项目 需要做一个APP和一个PC端网页 xff0c 主要功能是类似直播 xff0c 经查阅资料 xff0c 可采用uniapp 43 vue 43 推流拉流的技术 xff0c 前端使用uniapp打开摄像头
  • web菜单--自定义样式

    1 文件src styles variables scss 定义变量 sidebar menuText var menuText bfcbd9 menuActiveText var menuActiveText 409EFF subMenu
  • vue3拖拽布局+动态组件+自适应布局

    1 拖拽布局插件 Vue Grid Layout 适用Vue js的栅格布局系统 可拖动和可调整大小栅格布局的Vue组件 https jbaysolutions github io vue grid layout zh 在package j
  • webrtc视频播放器(ZLMRTCClient.js)

    引言 在播放实时视频时 xff0c 视频播放器一般会有延迟 xff0c 此时 xff0c 就可以使用webrtc来拉流 xff0c 延迟在1s或者基本没有延迟 与zlm配套的rtc js客户端 国标 1 开源项目地址 ZLMRTCClien