首页 > 编程语言 >如何通过node实现实时视频的推流与拉流

如何通过node实现实时视频的推流与拉流

时间:2024-11-20 14:19:39浏览次数:3  
标签:node 流媒体 const http child 拉流 服务器 推流

1. 实现方式

  • 首先传统的视频实时传输是由设备视频流->流媒体服务器->客户端界面组成的。
  • 设备视频流

一般是屏幕流,网络摄像头,电脑摄像头或者是一些本地的视频文件等组成。

  • 流媒体服务器

我这里用的是node-media-sever这个插件去搭建一个流服务器,作为视频流的中转站,比如推流跟拉流都需要跟流媒体服务器进行打交道

  • 客户端界面

通过访问流服务器暴露的http接口拉取流媒体服务器的视频

  1. 代码实现
  • 流服务器搭建
npm i node-media-server //流媒体服务器插件
const NodeMediaServer = require('node-media-server');
 
const config = {
  rtmp: {
    port: 1935,
    chunk_size: 60000,
    gop_cache: true,
    ping: 60,
    ping_timeout: 30
  },//配置rtmp服务器,用于设备推流
  http: {
    port: 8000,
    allow_origin: '*'
  }//配置http服务器,用于客户端拉流
};
 
var nms = new NodeMediaServer(config)
nms.run();//启动流媒体服务器

访问http://localhost:8000/admin,可以进入流媒体服务器的后台,可查看当前推流节点跟拉流节点

  • 服务端推流代码
npm i fluent-ffmpeg //推流工具
const { exec } = require('child_process');//用于创建一个子进程

// RTMP 服务器地址和流名称
const rtmpServer = 'rtmp://192.168.3.12:1935/live';
const streamKey = 'home';

// 执行命令获取屏幕流
const command = `ffmpeg -f avfoundation -capture_cursor 1 -i 1 -vf "crop=in_w:in_h-100" -c:v libx264 -pix_fmt yuv420p -preset ultrafast -f flv ${rtmpServer}/${streamKey}`;

const child = exec(command);

child.stderr.on('data', (data) => {
  console.error(`stderr: ${data}`);
});

child.on('close', (code) => {
  console.log(`child process exited with code ${code}`);
});
  • 客户端拉流代码
<!DOCTYPE html>
<html>
<head>
   <meta charset="UTF-8">
   <title>直播</title>
</head>
<body>
   <script src="https://cdn.bootcss.com/flv.js/1.4.0/flv.min.js"></script>
   <video id="videoElement" width="100%" controls></video>
   <script>
       if (flvjs.isSupported()) {
           var videoElement = document.getElementById('videoElement');
           var flvPlayer = flvjs.createPlayer({
               type: 'flv',
               url: 'http://192.168.3.12:8000/live/home.flv'
           });
           flvPlayer.attachMediaElement(videoElement);
           flvPlayer.load();
           flvPlayer.play();
       }
   </script>
</body>
</html>

标签:node,流媒体,const,http,child,拉流,服务器,推流
From: https://blog.csdn.net/2301_77076782/article/details/143910222

相关文章

  • Node == Sequelize 使用文档
    目录1.简介2.安装3.连接到数据库4.测试连接5.关闭连接6.模型(Model)define.sync({force:true});belongsToparanoid7.增删改查(CRUD)7.1查询(Query)7.2插入(Create)7.3更新(Update)7.4删除(Delete)7.5 软删除(restore) 7.6分页(findAndCountAll)7.7查找单......
  • 基于node.js毕设汽车票网上预订系统程序+论文
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景随着互联网技术的飞速发展,在线票务系统在交通领域的应用日益广泛。关于交通票务预订系统的研究,现有研究主要以火车票预订系统为主,专门针对汽车票网上预......
  • 基于node.js毕设汽车商城系统程序+论文
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景关于汽车商城系统的研究,现有研究主要以汽车销售的某一环节为主,如单独的汽车销售管理系统或者单独的汽车信息展示平台等。专门针对集用户、汽车品牌、门......
  • 基于node.js毕设汽车售后服务管理系统程序+论文
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景关于汽车售后服务管理系统的研究,现有研究多集中在汽车售后服务的个别环节或传统管理模式方面。例如,部分研究主要关注维修保养流程优化或者售后人员管理......
  • 基于node.js毕设汽车资讯网站程序+论文
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景随着汽车产业的蓬勃发展,汽车在人们生活中的地位日益重要。关于汽车资讯的传播与整合,现有研究主要以综合性的汽车网站功能及运营模式为主,专门针对汽车资......
  • 基于node.js毕设汽车租赁公司小程序程序+论文
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景关于汽车租赁公司的相关研究,现有研究多侧重于汽车租赁行业的宏观发展趋势、市场格局等方面,如市场规模、企业竞争格局以及不同类型租赁业务的占比等11。......
  • 基于node.js毕设汽车租赁管理系统程序+论文
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景关于汽车租赁管理系统的研究,现有研究主要以实现基本的租赁流程管理为主,如车辆信息管理、订单处理等。专门针对租赁商家、汽车分类、会员类型以及租赁评......
  • python+vue基于django/flask的连锁超市销售管理系统(超市库存与销售管理平台)java+nodej
    目录技术栈和环境说明具体实现截图预期达到的目标系统设计详细视频演示技术路线解决的思路性能/安全/负载方面可行性分析论证python-flask核心代码部分展示python-django核心代码部分展示研究方法感恩大学老师和同学源码获取技术栈和环境说明本系统以Python开发语言......
  • python+vue基于django/flask的奖学金评定系统(奖学金申请与管理平台)java+nodejs+php-计
    目录技术栈和环境说明具体实现截图预期达到的目标系统设计详细视频演示技术路线解决的思路性能/安全/负载方面可行性分析论证python-flask核心代码部分展示python-django核心代码部分展示研究方法感恩大学老师和同学源码获取技术栈和环境说明本系统以Python开发语言......
  • python+vue基于django/flask的同城篮球赛事场地预约系统java+nodejs+PHP-计算机毕业设
    目录技术栈和环境说明具体实现截图预期达到的目标系统设计详细视频演示技术路线解决的思路性能/安全/负载方面可行性分析论证python-flask核心代码部分展示python-django核心代码部分展示研究方法感恩大学老师和同学源码获取技术栈和环境说明本系统以Python开发语言......