• 售前

  • 售后

热门帖子
入门百科

使用node-media-server搭建一个浅显的流媒体服务器

[复制链接]
123457242 显示全部楼层 发表于 2021-10-25 20:11:38 |阅读模式 打印 上一主题 下一主题
记录一下使用node-media-server的一些过程。本文章环境为windows。本文章恰当初学者。
使用到的东西:
  1. nodeJs
复制代码
  1. ffmpeg
复制代码
  1. node-media-server
复制代码

这里说一点(如果有错欢迎指出):
node-media-server是作为流媒体服务器,你可以把他理解为中转站,用于转换流格式或者对视频流做一些操纵以及向外推送流地址。
ffmpeg是作为推流工具,将你需要转换的视频或者视频流推流到流媒体服务器中。
拉流的意思是从流媒体服务器上拉去视频流,观看者通过拉取流媒体服务器发布的流地址进行观看。你用视频播放器播放就是在拉流。
安装

node-media-server是基于node.Js开发的,以是需要先使用npm安装。
  1. npm install node-media-server
复制代码
编写并运行node-media-server

新建app.js。并编写下述代码,然后运行app.js
  1. const NodeMediaServer= require('node-media-server');
  2. const config = {
  3.   rtmp: {
  4.     port: 1935,
  5.     chunk_size: 60000,
  6.     gop_cache: true,
  7.     ping: 60,
  8.     ping_timeout: 30
  9.   },
  10.   http: {
  11.     port: 8000,
  12.     allow_origin: '*',
  13.   }
  14. };
  15. var nms = new NodeMediaServer(config)
  16. nms.run();
复制代码
可以访问localhost:8000/admin地址,访问node-media-server的管理端界面。截图如下:

使用FFmpeg下令推送地址。

推送视频文件
在实行下面的代码的时间,需要将node-media-server启动起来。
  1. ffmpeg -re -i ./video.mp4 -c copy -f flv rtmp://localhost:1935/live/STREAM_NAME
复制代码
上述的下令颠末node-media-server后会产生两种流地址。一种rtmp。一种flv。前者可以在电脑上播放,后者可以在手机和电脑上播放。rtmp地址为FFmpeg里的下令地址
flv地址为: http://localhost:8000/live/STREAM_NAME.flv
推送rtsp流

推送rtsp(摄像头视频流)只要将上述的./video.mp4该一下就行。博主在测试过程中发现,推送rtsp流要么会出现绿屏要么会出现丢包征象,特殊是和hls联合在一起,丢包率更大,以是不建议使用下令去推送rtsp流。
转hls流格式

转hls流需要注意一点,需要指明一下mediaroot参数,固然node-media-server内部有设置默认值,但是还是推荐在设置一次。然后使用下述配置即可。
  1. const NodeMediaServer= require('node-media-server');
  2. const ff = require('ffmpeg');
  3. const config = {
  4.   rtmp: {
  5.     port: 1935,
  6.     chunk_size: 60000,
  7.     gop_cache: true,
  8.     ping: 60,
  9.     ping_timeout: 30
  10.   },
  11.   http: {
  12.     port: 8979,
  13.     mediaroot: './media/', // 建议写
  14.     allow_origin: '*',
  15.   },
  16.   trans: { // 这里参数是trans参数,不是relay参数,relay参数中配置hls无效
  17.     ffmpeg: './bin/ffmpeg.exe',//指明FFmpeg位置
  18.     tasks: [
  19.       {
  20.         app: 'live',
  21.         ac: 'acc',
  22.         vc: 'libx264',
  23.         hls: true,
  24.         hlsFlags: '[hls_time=2:hls_list_size=3:hls_flags=delete_segments]',
  25.         dash: true,
  26.         dashFlags: '[f=dash:window_size=3:extra_window_size=5]'
  27.       }
  28.     ]
  29.   }
  30. };
  31. var nms = new NodeMediaServer(config)
  32. nms.run();
复制代码
启动上述代码后,使用FFmpeg进行推流,稍等一会,你就会发如今mediaroot指向的目次下生成一个live/STREAM_NAME的文件夹,里面存放着m3u8文件。由于需要先生成m3u8文件,以是如果是推流摄像头的话,会存在比较大的耽误。
m3u8地址为:http://localhost:8000/live/STREAM_NAME/index.m3u8
如果发现m3u8播放有问题,把ac和vc两个参数去掉试试。楼主在现实使用的时间,这两个参数并没有使用。
使用代码对rtsp流转流

对于有的使用者有可能需要将rtsp摄像头视频流进行推流,以便进行跨端预览,博主这里建议使用这种方法。这种方法无需使用cmd实行FFmpeg下令,而且耽误经博主测试为3s(内网,由于没有外网地址,以是外网不是很清晰)。耽误较小。
代码如下:
  1. const NodeMediaServer= require('node-media-server');
  2. const config = {
  3.   rtmp: {
  4.     port: 1935,
  5.     chunk_size: 60000,
  6.     gop_cache: true,
  7.     ping: 60,
  8.     ping_timeout: 30
  9.   },
  10.   http: {
  11.     port: 8979,
  12.     mediaroot: './media/',
  13.     allow_origin: '*',
  14.   },
  15.   relay: {
  16.     ffmpeg: './bin/ffmpeg.exe',
  17.     tasks: [
  18.       {
  19.         app: 'live',
  20.         mode: 'static',
  21.         edge: 'rtsp://admin:****@192.168.4.167:554/Streaming/Channels/101',//rtsp
  22.         name: 'technology',
  23.         rtsp_transport : 'tcp', //['udp', 'tcp', 'udp_multicast', 'http']
  24.       }
  25.     ]
  26.   },
  27. };
  28. var nms = new NodeMediaServer(config)
  29. nms.run();
复制代码
这种方法可以产生两种视频流,一种rtmp一种flv。
总结

因为博主搭建流媒体服务器重要是为了项目中对摄像头进行转流,但是之前JAVA同事有处置处罚过发现会斲丧大量的硬件资源,不外博主使用node-media-server倒是没有发现斲丧多大的资源,终极还是需要各位具体测试。而且对于摄像头转流,为了避免不须要的性能斲丧,楼主打算仅当观察者发起预览的时间,才让服务端启动流媒体转流功能(使用代码对rtsp流转流),当观察者关闭预览,就立刻把流媒体功能关闭。这样能避免性能的不须要斲丧。究竟可以直接通过代码直接操纵,这样就比较方便,也能降低服务器的肯定压力。
到此这篇关于使用node-media-server搭建一个浅易的流媒体服务器的文章就先容到这了,更多干系node-media-server搭建流媒体服务器内容请搜索脚本之家从前的文章或继续浏览下面的干系文章希望大家以后多多支持脚本之家!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作