本片文章只是起到抛砖引玉的作用,能从头到尾走通就行,并不做深入研究。为了让文章通俗易懂,尽量使用白话描述。

0x001: 下载ffmpeg

开源免费的推流软件有很多,这里以 ffmpeg 为例。ffmpeg没有可视化界面,如果觉得ffmpeg不好用,当然也可以使用OBS,这款软件有操作界面,比较友好。

下载后解压,无需安装可直接使用,至于环境变量 配不配 都可以,区别是配了以后在使用CMD命令窗口调用ffmpeg时会方便一点,我这里没配。

0x002: 单元测试推流

为了减少出错概率,容易排查错误原因,在上一步骤的流媒体服务器环境搭建完成后 '首次推流时' 需要验证这个服务器的RTMP模块是否能正常访问。

将本地视频推流至RTMP流媒体服务器,找到ffmpeg.exe所在的文件,鼠标右键 '在此处打开命令窗口',敲入:

 ffmpeg -re -i "C:\Users\Administrator\Desktop\test.mp4" -f flv "rtmp://localhost:1935/mytv/test"

其中"C:\Users\Administrator\Desktop\test.mp4"为视频文件所在磁盘的目录,"rtmp://localhost:1935/mytv/test"为RTMP协议地址。

这里重点解释一下RTMP地址,rtmp为协议名称,localhost为协议地址,1935为开放端口号,mytv为nginx根目录/conf/nginx.conf内的rtmp模块application 后的 mytv(可以根据自己的需求改,但要互相对应),test为自定义名称,可以理解为房间ID,如rtmp://localhost:1935/mytv/test1或rtmp://localhost:1935/mytv/1001

之后敲回车,会输出以下信息,黄色圈起来的是当前ffmpeg配置信息和视频的元数据信息以及相应的转码信息,如下图

若推流成功,此CMD窗口内红色方框圈起来的的INFO会一直不停的输出滚动。如下图这样:

使用VLC播放此地址,观察是否能正常播放,下图左侧在实时推流,下图右侧在实时播放(若不能播放,说明上一步骤的流媒体服务器环境搭建的有问题,需要自己排查)

0x003: 正式推流

这里以海康监控RTSP流为例来演示推流

 ffmpeg -i "rtsp://admin:admin123@10.77.59.2:554/h264/ch1/sub/av_stream" -vcodec copy -acodec copy -f flv "rtmp://localhost:1935/mytv/test1"

推流成功后,同样可以使用VLC播放此地址,观察是否能正常播放。

经测试,生产环境下的ffmpeg,在保证RTSP流正规且稳定的前提下,使用时其实还是挺稳定的。
下图是使用ffmpeg推海康的RTSP流至搭建的RTMP服务器,可以看出,推了大约307小时后停止了,原因是厂房断电导致RTSP流不通导致。

0x004: 遗留问题

因为要转码推流的监控比较多,8个监控想要使用ffmpeg全部推流到RTMP服务器那就得需要开8个CMD窗口,这样的坏处就是在系统的任务栏占据了比较大的空间。将来监控的数量还有可能会扩充,16个,32个......,那这样以来使用 CMD命令窗口的方式 用ffmpeg来推流的方案 似乎有点不可行。

关于这个遗留问题,暂且解决办法是 通过设置任务栏进行相同程序合并隐藏,如果你有什么更好的解决方案,欢迎指出,不吝赐教,THANKS!

------------------------------------------------------------ 2020-06-01 00:07:46 -----------------------------------------------------------------------

关于上边这个遗留问题的解决有几个,如下

  • 根据业务需求推合并流,如甲方需要一个可见光配套一个热成像,那么可以2个合并后再推,这样就是4个CMD窗口。如果没需求可直接8个合并1个流后再推,或4个合并推2个,等等。
  • 上边的方案虽然可行,但还是用的CMD窗口的方式,如果技术条件允许,完全可以用程序控制FFmpeg去推流。写成简易化API,供平台随时调用。如开启、停止、监测等等
  • 当然对于一个不了解音视频编解码的普通程序员来说做到步骤2就已经可以了。如果你了解音视频编解码还可以直接使用FFmpeg官方提供的外部链接库来推流。

0x005: 下一步

前端Web浏览器基于Flash如何实时播放监控视频画面(三)之使用ffmpeg‘推流’的更多相关文章

  1. 前端Web浏览器基于Flash如何实时播放监控视频画面(前言)之流程介绍

    [关键字:前端浏览器如何播放RTSP流画面.前端浏览器如何播放RTMP流画面] 本片文章只是起到抛砖引玉的作用,能从头到尾走通就行,并不做深入研究.为了让文章通俗易懂,尽量使用白话描述. 考虑到视频延 ...

  2. 前端Web浏览器基于Flash如何实时播放监控视频画面(四)之使用videoJs‘拉流’

    本片文章只是起到抛砖引玉的作用,能从头到尾走通就行,并不做深入研究.为了让文章通俗易懂,尽量使用白话描述. 0x001: 下载videoJs 对于Video.js 5.x及更低版本,Flash技术(v ...

  3. 前端Web浏览器基于Flash如何实时播放监控视频画面(一)之获取监控摄像头的RTSP流

    本片文章只是起到抛砖引玉的作用,能从头到尾走通就行,并不做深入研究.为了让文章通俗易懂,尽量使用白话描述. 0x001: 获取 现在市场上普见的摄像头都支持RTSP协议,如果你不懂什么是RTSP协议, ...

  4. 前端Web浏览器基于Flash如何实时播放监控视频画面(二)之Windows搭建(RTMP)流媒体服务器

    本片文章只是起到抛砖引玉的作用,能从头到尾走通就行,并不做深入研究.为了让文章通俗易懂,尽量使用白话描述. 0x001: 获取 流媒体服务器有很多,这里以nginx为例. nginx for Wind ...

  5. 前端Web浏览器基于H5如何实时播放监控视频画面(前言)之流程介绍

    先看上边这张图.由于离2020年12月各浏览器禁用Flash的日子越来越近,又正恰巧要做新录播项目,所以有了以下内容. 还记得去年也是这个时候,大约是四五六月份,甲方来了个需求想把车间的监控系统接入到 ...

  6. 使用canvas来实时播放RTSP视频

    HTML5的标签可以用使用下来面的方式来播放静态视频 <video width="320" height="240" controls="con ...

  7. K8S Canal基于Prometheus进行实时指标监控

    文章来源于本人的印象笔记,如出现格式问题可访问该链接查看原文 部署canal的prometheus监控到k8s中 1.grafana的docker部署方式:https://grafana.com/gr ...

  8. QT 创建一个线程播放监控视频

    1.创建一个线程类(PlayVideoThread): PlayVideoThread.h头文件 #pragma once #include <QObject> #include &quo ...

  9. 基于开源项目的在线网络视频直播项目---pc端的推流

    https://github.com/winlinvip/simple-rtmp-server/issues/66 https://github.com/justinmakaila/iOS-Frame ...

随机推荐

  1. dash shell 的一些总结

    最近写个一些dash shell 相关的代码,中间遇到了一些坑以及需要注意的地方,记录一下 1 参数 numberofargmuments(){ echo "The number of ar ...

  2. 一些基础的python小程序

    1.求下列数奇偶分数: list1 = [1,2,3,4,5,6,7,8,9,10] # 先创建两个空列表 jishu = [] oushu = [] # 使用for循环迭代list1一一取出进行判断 ...

  3. Jmeter之Linux安装(Xshell),分布式运行Linux作为slave机

    甲方爸爸要求,用Linux压测......   所以在公司服务器Linux上搭建Jmeter 但实际一个Jmeter程序也有程序瓶颈~ 所以在Jmeter瓶颈下,搭建分布式压测系统.(也许可以尝试在一 ...

  4. 怎样解决在执行 vue init 时提示 "vue : 无法加载文件" 的问题?

    注意, 以下操作需要 以管理员身份 在 PowerShell 中进行, 不能是 CMD / Git Bash 等. 1. 以 管理员身份 运行 PowerShell 2. 执行 get-Executi ...

  5. centos中mariadb的相关操作

    Tip 1 在使用mariadb中启动服务报错 : Failed to start mariadb.service: Unit not found. 解决办法: yum install -y mari ...

  6. js判断一个 object 对象是否为空

    方法一:使用for...in for...in... 遍历属性,为真则为“非空数组”:否则为“空数组” for (var i in obj) { return true  // 如果不为空,则会执行到 ...

  7. Centos7:MyCat安装,配置及使用

    解压缩 使用,默认端口8066 ./mycat start //启动 ./mycat stop //停止 ./mycat restart //重启

  8. webpack的postcss的基本应用

    PostCss是什么? PostCSS在webpack中的基本应用 一.PostCss是什么? 如果有深入学习PostCss需求的话可以参考大漠的资料:https://www.w3cplus.com/ ...

  9. angular实现对百度天气api跨域请求

    申请秘钥:http://lbsyun.baidu.com/apiconsole/key  ,有个百度账号就行ak=开发者秘钥 url地址  :http://api.map.baidu.com/tele ...

  10. HttpClient 源码阅读

    在项目中常用的HttpClient,与我们非常的亲密,为了能处理遇到的Http问题,我们应该去了解里面的机制和实现. 官方文档:http://hc.apache.org/httpcomponents- ...