前端Web浏览器基于Flash如何实时播放监控视频画面(三)之使用ffmpeg‘推流’
本片文章只是起到抛砖引玉的作用,能从头到尾走通就行,并不做深入研究。为了让文章通俗易懂,尽量使用白话描述。
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‘推流’的更多相关文章
- 前端Web浏览器基于Flash如何实时播放监控视频画面(前言)之流程介绍
[关键字:前端浏览器如何播放RTSP流画面.前端浏览器如何播放RTMP流画面] 本片文章只是起到抛砖引玉的作用,能从头到尾走通就行,并不做深入研究.为了让文章通俗易懂,尽量使用白话描述. 考虑到视频延 ...
- 前端Web浏览器基于Flash如何实时播放监控视频画面(四)之使用videoJs‘拉流’
本片文章只是起到抛砖引玉的作用,能从头到尾走通就行,并不做深入研究.为了让文章通俗易懂,尽量使用白话描述. 0x001: 下载videoJs 对于Video.js 5.x及更低版本,Flash技术(v ...
- 前端Web浏览器基于Flash如何实时播放监控视频画面(一)之获取监控摄像头的RTSP流
本片文章只是起到抛砖引玉的作用,能从头到尾走通就行,并不做深入研究.为了让文章通俗易懂,尽量使用白话描述. 0x001: 获取 现在市场上普见的摄像头都支持RTSP协议,如果你不懂什么是RTSP协议, ...
- 前端Web浏览器基于Flash如何实时播放监控视频画面(二)之Windows搭建(RTMP)流媒体服务器
本片文章只是起到抛砖引玉的作用,能从头到尾走通就行,并不做深入研究.为了让文章通俗易懂,尽量使用白话描述. 0x001: 获取 流媒体服务器有很多,这里以nginx为例. nginx for Wind ...
- 前端Web浏览器基于H5如何实时播放监控视频画面(前言)之流程介绍
先看上边这张图.由于离2020年12月各浏览器禁用Flash的日子越来越近,又正恰巧要做新录播项目,所以有了以下内容. 还记得去年也是这个时候,大约是四五六月份,甲方来了个需求想把车间的监控系统接入到 ...
- 使用canvas来实时播放RTSP视频
HTML5的标签可以用使用下来面的方式来播放静态视频 <video width="320" height="240" controls="con ...
- K8S Canal基于Prometheus进行实时指标监控
文章来源于本人的印象笔记,如出现格式问题可访问该链接查看原文 部署canal的prometheus监控到k8s中 1.grafana的docker部署方式:https://grafana.com/gr ...
- QT 创建一个线程播放监控视频
1.创建一个线程类(PlayVideoThread): PlayVideoThread.h头文件 #pragma once #include <QObject> #include &quo ...
- 基于开源项目的在线网络视频直播项目---pc端的推流
https://github.com/winlinvip/simple-rtmp-server/issues/66 https://github.com/justinmakaila/iOS-Frame ...
随机推荐
- 第k大异或值
这道题与2018年十二省联考中的异或粽子很相像,可以算作一个简易版: 因为这不需要可持久化: 也就是说求任意两个数异或起来的第k大值: 首先把所有数放进trie里. 然后二分答案,枚举每个数,相应地在 ...
- Glide优化
几乎所有的 OOM 错误都是因为宿主应用出了问题,而不是 Glide 本身. 应用里两种常见的 OOM 错误分别是: 过大的内存分配 (Excessively large allocations) 内 ...
- c++11 跨平台多线程demo和qt 静态链接(std::thread有join函数,设置 QMAKE_LFLAGS = -static)
#include <stdio.h>#include <stdlib.h> #include <chrono> // std::chrono::seconds#in ...
- Codeforces 1244F. Chips
传送门 显然可以注意到连续的两个相同颜色的位置颜色是不会改变的,并且它还会把自己的颜色每秒往外扩展一个位置 同时对于 $BWBWBW...$ 这样的序列,它每个位置的颜色每一秒变化一次 然后可以发现, ...
- mysql+canal+kafka+elasticsearch构建数据查询平台
1. 实验环境 CPU:4 内存:8G ip:192.168.0.187 开启iptables防火墙 关闭selinux java >=1.5 使用yum方式安装的java,提前配置好JAVA_ ...
- tomcat 虚拟目录 连接池
- c#中异常捕获,回滚
语法: try { 有可能出现错误的代码写在这里 } catch { 出错后的处理 } 如果try中的代码没有出错,则程序正常运行try中的内容后,不会执行catch中的内容, 如果try中的代码一但 ...
- 使用WSAIoctl获取AcceptEx,Connectex,Getacceptexsockaddrs函数指针
运行WinNT和Win2000的系统上,这些APIs在Microsoft提供的DLL(mswsock.dll)里实现,可以通过链接mswsock.lib或者通过WSAioctl的SIO_GET_EXT ...
- httpclient 上传附件实例
httpclient 单附件上传实例 (扩展多附件上传实例,点我) /** * 上传附件 * @param host * @param uri * @param filePath 文件路径 * @p ...
- 1如何给devexpress的gridview控件绘制全选按钮
1 首先注册gridview的this.edibandedGridView.CustomDrawColumnHeader += EdibandedGridView_CustomDrawColumnHe ...