【使用webrtc-streamer解析rtsp视频流】

webrtc-streamer

  • WebRTC (Web Real-Time Communications) 是一项实时通讯技术,它允许网络应用或者站点,在不借助中间媒介的情况下,建立浏览器之间点对点(Peer-to-Peer)的连接,实现视频流和(或)音频流或者其他任意数据的传输。WebRTC 包含的这些标准使用户在无需安装任何插件或者第三方的软件的情况下,创建点对点(Peer-to-Peer)的数据分享和电话会议成为可能。

    简单的说:WebRTC 是一种 HTML5规范,他无需在浏览器中安装任何插件可以在网页内进行实时通信工作的开源技术,它直接在浏览器和设备之间添加实时媒体通信。
    
  • rtsp(Real Time Streaming Protocol,RTSP)是实时视频网络传输主流的实现方式,是一种网络流媒体协议。低延时高清晰度的RTSP视频流传输是网络直播、在线会议系统等行业的核心技术。

  • webrtc-streamer是一个使用简单机制通过 WebRTC 流式传输视频捕获设备和 RTSP 源的项目,它内置了一个小型的 HTTP server 来对 WebRTC需要的相关接口提供支持。

使用方法

1、下载webrtc-streamer

https://github.com/mpromonet/webrtc-streamer/releases

2、运行

双击解压后的.exe文件运行,默认抛出本机8000端口(172.0.0.1:8000)
  • 由于 webrtc 的核心库还不支持H265的视频编码,所以要配置设备视频编码方式为H264
  • 命令:-o ,默认情况video会进行编码、解码,占用资源,可能导致cpu拉满,使用-o将取消编码解码
  • 自定义端口:创建.bat文件,并双击执行,文件内容如下:
    @echo off
    start "" ".\webrtc-streamer.exe"  -H 0.0.0.0:9998 -o
    exit
    
  • 运行成功后,可在浏览器中查询所有api
    //192.168.3.33:9998/api/help
    http: [
      '/api/addIceCandidate',
      '/api/call',
      '/api/createOffer',
      '/api/getAudioDeviceList',
      '/api/getAudioPlayoutList',
      '/api/getIceCandidate',
      '/api/getIceServers',
      '/api/getMediaList',
      '/api/getPeerConnectionList', // 判断当前的webrtc-streamer正在连接的通道
      '/api/getStreamList',
      '/api/getVideoDeviceList',
      '/api/hangup',
      '/api/help',
      '/api/log',
      '/api/setAnswer',
      '/api/version',
      '/api/whep'
    ]
    

3、引用开发包

  • 将下载包html文件夹下webrtcstreamer.js文件和html/libs文件夹下adapter.min.js文件复制到VUE项目public目录下 、在index.html文件里引入这两个js文件
    <head>
      <!-- rtsp -->
      <script src="/data/webrtcstreamer.js" charset="utf-8"></script>
      <script src="/data/adapter.min.js" charset="utf-8"></script>
    </head>
    

4、页面中使用

<template>
  <div class="ev-player">
    <CommonDragWindow v-model="innerShow" :width="600" :height="400" :resize="true" :position="position">
      <template v-slot:title>{{ title }}</template>
      <template #default>
        <video :id="`video-${equipId}`" autoplay width="100%" height="98%"></video>
      </template>
    </CommonDragWindow>
  </div>
</template>

<script setup>
  import CommonDragWindow from './CommonDragWindow.vue'
  import { getConfigList } from '@/api/common.js'
  import { ref, onMounted, watchEffect, watch, nextTick } from 'vue'
  const show = defineModel({ type: Boolean, default: false })
  const props = defineProps({
    title: {
      type: String,
      default: '监控视频'
    },
    equipId: {
      type: [Number, String]
    }
  })
  const innerShow = ref(false)
  const position = ref({
    top: 500,
    left: 20
  })
  let webRtcServer = null
  watchEffect(() => {
    innerShow.value = show.value
  })
  watch(
    () => innerShow.value,
    async (val) => {
      if (val) {
        const rtspStr = 'rtsp://132.239.12.145:554/axis-media/media.amp'
        if (rtspStr) {
          await nextTick() // 待dom加载完毕
          let videoDocument = document.getElementById('video')
          webRtcServer = new WebRtcStreamer(videoDocument, `http://${window.appConfig.localhost}:8000`)
          webRtcServer.connect(rtspStr, null, `rtptransport=tcp&timeout=60`)
        }
      } else {
        webRtcServer?.disconnect()
        webRtcServer = null
      }
      show.value = val
    }
  )
  onMounted(() => {})
</script>

<style scoped lang="scss">
  .ev-player {
    :deep(video) {
      width: 100%;
      height: calc(100% - 5px);
    }
  }
</style>
  • 13
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用webrtc-streamer实现rtsp在公网访问视频的步骤如下: 1. 首先,确保你的服务端已经安装了webrtc-streamer。如果没有安装,你可以请服务端同事帮忙安装,或者自己尝试安装。你可以从webrtc-streamer的git仓库下载压缩包,并解压提取出libs/adapter.min.js和webrtcstreamer.js两个文件。 2. 将adapter.min.js和webrtcstreamer.js文件拷贝到你的项目中。你可以将它们放在public文件夹下,并在index.html中引入这两个文件。 3. 在前端代码中,你需要使用webrtc-streamer提供的API来实现rtsp在公网访问视频。具体的实现步骤如下: - 首先,创建一个video元素,用于显示视频流。你可以在HTML中添加一个video标签,并为其指定一个id,例如: ```html <video id="videoElement" autoplay></video> ``` - 在JavaScript代码中,使用webrtc-streamer的API来获取视频流并将其显示在video元素中。你可以使用webrtcstreamer.js中提供的`WebRTCStreamer`对象来实现这一功能。具体的代码如下: ```javascript const videoElement = document.getElementById('videoElement'); const streamer = new WebRTCStreamer(); // 设置视频流的URL,替换成你的rtsp流的URL const streamUrl = 'your_rtsp_stream_url'; streamer.setStreamUrl(streamUrl); // 将视频流绑定到video元素 streamer.attachToElement(videoElement); // 开始播放视频流 streamer.play(); ``` - 替换`your_rtsp_stream_url`为你的rtsp流的URL。确保URL的格式正确,并且可以在公网中访问到。 4. 保存并运行你的前端代码。视频流应该会在video元素中显示出来,并可以在公网中访问到。 请注意,使用webrtc-streamer实现rtsp在公网访问视频需要在服务端和前端都进行相应的配置和代码编写。以上步骤仅涉及前端部分的实现,你还需要确保服务端的配置和网络环境的支持。 #### 引用[.reference_title] - *1* *2* *3* [记浏览器使用webrtc-streamer 播放rtsp 流](https://blog.csdn.net/weixin_41838201/article/details/125783057)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值