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

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. 第k大异或值

    这道题与2018年十二省联考中的异或粽子很相像,可以算作一个简易版: 因为这不需要可持久化: 也就是说求任意两个数异或起来的第k大值: 首先把所有数放进trie里. 然后二分答案,枚举每个数,相应地在 ...

  2. Glide优化

    几乎所有的 OOM 错误都是因为宿主应用出了问题,而不是 Glide 本身. 应用里两种常见的 OOM 错误分别是: 过大的内存分配 (Excessively large allocations) 内 ...

  3. c++11 跨平台多线程demo和qt 静态链接(std::thread有join函数,设置 QMAKE_LFLAGS = -static)

    #include <stdio.h>#include <stdlib.h> #include <chrono> // std::chrono::seconds#in ...

  4. Codeforces 1244F. Chips

    传送门 显然可以注意到连续的两个相同颜色的位置颜色是不会改变的,并且它还会把自己的颜色每秒往外扩展一个位置 同时对于 $BWBWBW...$ 这样的序列,它每个位置的颜色每一秒变化一次 然后可以发现, ...

  5. mysql+canal+kafka+elasticsearch构建数据查询平台

    1. 实验环境 CPU:4 内存:8G ip:192.168.0.187 开启iptables防火墙 关闭selinux java >=1.5 使用yum方式安装的java,提前配置好JAVA_ ...

  6. tomcat 虚拟目录 连接池

  7. c#中异常捕获,回滚

    语法: try { 有可能出现错误的代码写在这里 } catch { 出错后的处理 } 如果try中的代码没有出错,则程序正常运行try中的内容后,不会执行catch中的内容, 如果try中的代码一但 ...

  8. 使用WSAIoctl获取AcceptEx,Connectex,Getacceptexsockaddrs函数指针

    运行WinNT和Win2000的系统上,这些APIs在Microsoft提供的DLL(mswsock.dll)里实现,可以通过链接mswsock.lib或者通过WSAioctl的SIO_GET_EXT ...

  9. httpclient 上传附件实例

    httpclient 单附件上传实例  (扩展多附件上传实例,点我) /** * 上传附件 * @param host * @param uri * @param filePath 文件路径 * @p ...

  10. 1如何给devexpress的gridview控件绘制全选按钮

    1 首先注册gridview的this.edibandedGridView.CustomDrawColumnHeader += EdibandedGridView_CustomDrawColumnHe ...