当前位置: 首页 > news >正文

使用ffmpeg+node-media-server实现从rtsp服务器拉流再推送至rtmp服务器,实现http+flv进行web播放

      最近由于项目的需要,需要从海康的摄像头中读取视频流然后在web页面上展示。

      由于海康摄像头使用了rtsp协议提供视频拉流服务,而web页面目前使用的插件不支持直接播放rtsp协议的视频流;因此考虑使用ffmpeg从rtsp中拉流,再推流至rtmp服务器,由于现在使用的测试环境是一台window的服务器,一般的rtmp服务器支持最多的是linux版本;这个rtmp服务器window版本的选择又转了一大圈;

       首先想到的是使用srs的window版本,但发现在ffmpeg推流时,从srs中读取流时,过了1分钟左右,播放的流就中断了,再也读取不到流了,也没有明显的错误日志;

       然后想到了nginx的rtmp模块和flv模块,但这个nginx配置rtmp模块+flv模块在window上,有点麻烦;只好继续找有没有更合适的服务器框架;

无意间,查到了node-media-server服务器也可以提供支持rtmp+http+flv的服务,安装后推流拉流,发现在window上还非常稳定;最后就选型了node-media-server。

下面把整体的ffmpeg推流,node-media-server配置,web播放视频流记录如下:

一、配置node-media-server支持rtmp服务器
  1.使用npm安装node-media-server模块

       在powershell中执行npm install node-media-server来安装node-media-server模块;

  2.编写rtmp-server.js调用node-media-server提供rtmp和http+flv服务

       完成node-media-server的安装后,编写rtmp-server.js调用node-media-server提供rtmp和http+flv服务,rtmp-server.js内容如下:

const NodeMediaServer= require('node-media-server');
const config = {
  rtmp: {
    port: 1935,
    chunk_size: 60000,
    gop_cache: true,
    ping: 60,
    ping_timeout: 30
  },
//端口是登录nms服务器后台查看界面  
  http: {
    port: 8099,
    allow_origin: '*',
  }
};
 
var nms = new NodeMediaServer(config)

nms.run();

3.启动运行rtmp-server.js,开始rtmp服务

   在powershell中执行: node rtmp-server.js,开启服务;这时rrtmp的服务端口为1935,http服务的端口为8099;

   可以通过http://127.0.0.1:8099/admin查看node-media-server的服务是否正常、查看对应的视频流列表。

二、使用ffmpeg从rtsp中拉流+推流至rtmp服务器(node-media-server)

     ffmpeg -i "rtsp服务器url地址" -vcodec h264 -acodec aac -f flv rtmp://127.0.0.1:1935/live/livestream

三、web页面中播放视频流

     在html中的video标签中配置src为http://127.0.0.1:8099/live/livestream.flv进行视频播放;

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 线性查找表的应用:用户登录注册程序
  • 分页查询--条件查询
  • 可以根据手机的折叠状态改变播放音效:nova Flip 的妙趣音效
  • iOS 收集打印日志
  • 进程程序替换
  • 亚马逊云(AWS)技术深度解析及代码使用案例
  • 华为od全面介绍!!!
  • Redis/ElaticSearch/kafka入门
  • 每日OJ_牛客_mkdir(排序+模拟)
  • android 离线的方式使用下载到本地的gradle
  • 【云原生系列之SkyWalking的部署】
  • 【QNX+Android虚拟化方案】112 - 获取 88Q5152 Switch Port1、Port2 端口的主从模式 / 传输速率 / 链路状态
  • C++系列-STL容器之list
  • C++中的异常处理与资源管理
  • 银河麒麟v10-sp3-x86系统安装k8s-1.30.4
  • Android 初级面试者拾遗(前台界面篇)之 Activity 和 Fragment
  • canvas绘制圆角头像
  • CEF与代理
  • CSS居中完全指南——构建CSS居中决策树
  • Docker容器管理
  • DOM的那些事
  • GitUp, 你不可错过的秀外慧中的git工具
  • JavaScript中的对象个人分享
  • LeetCode算法系列_0891_子序列宽度之和
  • Nacos系列:Nacos的Java SDK使用
  • nodejs调试方法
  • Python进阶细节
  • Sass 快速入门教程
  • TCP拥塞控制
  • 初识 webpack
  • 构造函数(constructor)与原型链(prototype)关系
  • 关于extract.autodesk.io的一些说明
  • 前端每日实战:61# 视频演示如何用纯 CSS 创作一只咖啡壶
  • 试着探索高并发下的系统架构面貌
  • CMake 入门1/5:基于阿里云 ECS搭建体验环境
  • 没有任何编程基础可以直接学习python语言吗?学会后能够做什么? ...
  • ​Benvista PhotoZoom Pro 9.0.4新功能介绍
  • ​必胜客礼品卡回收多少钱,回收平台哪家好
  • ​补​充​经​纬​恒​润​一​面​
  • #微信小程序:微信小程序常见的配置传值
  • $(document).ready(function(){}), $().ready(function(){})和$(function(){})三者区别
  • (0)Nginx 功能特性
  • (C11) 泛型表达式
  • (C语言)二分查找 超详细
  • (阿里云万网)-域名注册购买实名流程
  • (附源码)springboot 房产中介系统 毕业设计 312341
  • (附源码)springboot家庭财务分析系统 毕业设计641323
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (南京观海微电子)——I3C协议介绍
  • (四)汇编语言——简单程序
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (五)关系数据库标准语言SQL
  • (转)AS3正则:元子符,元序列,标志,数量表达符
  • (转)C语言家族扩展收藏 (转)C语言家族扩展
  • (转)Oracle存储过程编写经验和优化措施