仲灏小栈 仲灏小栈
首页
大前端
后端&运维
其他技术
生活
关于我
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

仲灏

诚意, 正心, 格物, 致知
首页
大前端
后端&运维
其他技术
生活
关于我
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 《前端项目基础建设》
  • HTML&CSS

  • JavaScript&TypeScript

    • typescript 万金油
    • 缓缓滚动到顶部实现方式
    • js 精准和模糊获取dom
    • iframe 笔记
    • 文件上传安全问题
    • 时间处理
    • Web H5 接入海康录像机 (rtsp转flv)
      • 最终效果
      • 私网映射为公网
      • 搭建转流服务器(RTSP => RTMP)
      • 服务端相关命令
        • 添加视频流
      • 前端对接
        • 说明事项(最终转流为flv格式)
        • Vue 接入
    • 全局数据
    • 持久化数据
    • typescript 类型库
    • type
    • 前端开发这些年碰到不常见的api(不论新旧 持续更新)
    • js api常用详解
    • 搭建typescript环境刷LeetCode算法
    • typescript 类型联动
    • 前端避免一直try...catch...(ts装饰器)
    • 高效操作DOM
    • 用好DOM事件
    • 理解 AST 实现和编译原理
    • 常用正则
    • js面试技能拼图 this
    • for...in for...of 区别
    • js 获取元素大小
  • Node

  • 构建

  • Vue

  • React

  • 小程序

  • 跨端

  • Electron

  • WebGL&GIS

  • 浏览器

  • 面经

  • 其他

  • 大前端
  • JavaScript&TypeScript
仲灏
2021-12-24
目录

Web H5 接入海康录像机 (rtsp转flv)

# 最终效果

img

开始了~

# 私网映射为公网

  • 如果你需要非局域网内访问就需要做这一步
  • 映射好公网后 ip 可能会变动 建议用域名做动态映射

img

# 搭建转流服务器(RTSP => RTMP)

  • 可参考其他方法

通过FFmpeg将rtsp流摄像头视频转码为rtmp播放 (opens new window) https://blog.csdn.net/u012492535/article/details/79220398

  • 我用的现成的docker镜像部署的服务 原理一样的

    • GitHub地址: https://github.com/ossrs/srs
    • 搭建好后就可以通过服务器地址:8380默认端口 查看了
    • img

# 服务端相关命令

# 添加视频流

直播

  • 在容器外执行srs容器内的命令
docker exec -it ${你的srs容器地址} /bin/bash -c ffmpeg -rtsp_transport tcp -i rtsp://${账号:密码}@${映射为公网的ip或者域名地址ztzyjc.3322.org}:${端口 默认9002}/Streaming/channels/${你的摄像头通道地址}0${主流1 子流2}  -c:v libx264 -crf 300 -acodec aac -f flv rtmp://127.0.0.1:1935/live/mystream${地址要不一样的, 我的是通道地址}
1

以我的地址为例: 在9.20的服务器上部署的srs 命令为

docker exec e5e1135e7cf6 /bin/bash -c 'ffmpeg -rtsp_transport tcp -i rtsp://admin:******@www.***.com:9002/Streaming/channels/2001  -c:v libx264  -acodec aac -f flv rtmp://127.0.0.1:1935/live/mystream20'
1
  • 这样前端就能通过地址rtmp://192.168.9.20:8380/live/mystream20 或者 http://192.168.9.20:8380/live/mystream20

回放

  • 命令docker exec e5e1135e7cf6 /bin/bash -c 'ffmpeg -rtsp_transport tcp -i "rtsp://admin:******@www.***.com:9002/Streaming/tracks/2001?starttime=20201214t000000z&endtime=20201214t000000z" -c copy -f flv rtmp://127.0.0.1:1935/live/mytrack20201214t000000z'

    • 相应的前端播放地址: http://192.168.9.20:8380/live/mytrack20201214t000000z

# 前端对接

# 说明事项(最终转流为flv格式)

  • RTMP 需要 flash 插件播放(以下有说明), chrome 在2020年12月后已经不再支持, 现在相关api接口都已经关闭了, 需要操作flash本身去调用浏览器相关接口(放弃了)

    • https://segmentfault.com/a/1190000018582436
    • RTMP(Real Time Messaging Protocol)实时消息传送协议是Adobe Systems公司为Flash播放器和服务器之间音频、视频和数据传输开发的私有协议。
    • RTMP是一个应用层协议,有多路复用的特点,传输内容有视频、音频、控制命令
    • RTMP 在音视频相关的协议中,它的突出特点是:连接可靠、低延时
  • 使用flv

    • 视频加载快比hls的m3u8格式快得多(可能是个人情况,未作深究)
  • 前端添加设备需要写服务端cmd脚本, 我这边也是使用的 nodejs 的express搭建了权限校验和docker的添加视频流命令

    • 附上地址: https://gitee.com/Izhaong/node-srs-cmd

# Vue 接入

我使用了 **Dplayer**播放器, 附上链接: http://dplayer.js.org/zh/guide.html#flv

  1. public/index.js引入<script src="https://cdn.bootcdn.net/ajax/libs/flv.js/1.5.0/flv.min.js"></script>

    1. 可以使用其他的cdn
  2. cmd 运行cnpm i dplayer -S

  3. 视频加载页面(单个视频)

...
<div id="dplayer"></div>
...

import DPlayer from 'dplayer'

data: { dp: undefined }
mounted() { this.initPlayer() }
methods: {
	initPlayer() {
		this.$nextTick(() => {
        const liveBaseUrl = 'http://192.168.9.20:8380' // 你的srs服务地址
        // const url = live ? `${liveBaseUrl}/live/mystream${channelNo}.flv` : `${liveBaseUrl}/live/mytrack${this.datetimeValue[0]}.flv` // 回放后面再说
        const url = `${liveBaseUrl}/live/mystream${channelNo}.flv` // 直播地址
        // 测试flx地址: https://sf1-hscdn-tos.pstatp.com/obj/media-fe/xgplayer_doc_video/flv/xgplayer-demo-360p.flv
        this.dp = new DPlayer({
          container: document.getElementById('dplayer'),
          video: {
            url,
            type: 'flv'
          },
          // mutex: false, // api自己查查 不描述了 
          autoplay: true,
          live
        })
      })
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

a. 多个视频自己琢磨吧~我给个大概思路, 数组嘛~简单 如下循环就好了

img

到此应该就差不多了, 肯定还有很多遗漏 不想写了 累~

上次更新: 2022/06/05, 20:31:36
时间处理
全局数据

← 时间处理 全局数据→

最近更新
01
vim日常使用记录
04-02
02
滑动窗口最大值
04-02
03
有效的字母异位词
04-02
更多文章>
Theme by Vdoing | Copyright © 2021-2025 izhaong | github | 蜀ICP备2021031194号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式