node 实现h264视频流buffer转码flv并使用websocket发送

2023-11-16

背景

硬件海康旧监控, 编写node服务端以实现网页播放,调用了之前用C封装好的海康接口,视频数据由接口通过回调函数传参过来形成h64裸数据Buffer,本博客记录的就是如何从视频裸流 Buffer转码并回传给websocket。

直接上代码

代码自己参悟,不懂的地方见评论区

global.isWorking = false;
app_express.ws("/realplay", function(ws, req) {
    console.log("[server] coonected to ws video")
    if (global.isWorking) {
        return;
    }
    // ws.send("hello client ")

    var ret = hknode.realPlay(req.query.ch, function(type, buf) {
        // console.log("node server", type, buf.length, buf[0], buf[1], buf[2]);
        duplexStream.push(buf);
    });
    console.log('get node api realplay ret = ', ret);
    if (ret == 0) {
        global.isWorking = true;
        // var ffmpegStream = ffmpeg("rtsp://admin:bc123123@192.168.0.103:554/h264/ch33/main/av_stream").noAudio().videoCodec('libx264').format('flv')
        var ffmpegStream = ffmpeg(duplexStream).noAudio().videoCodec('libx264').format('flv')
            .on('data', function(data) {
                console.log("data len", data.length);
            })
            .on('error', function(error) {
                console.log("error ffmpeg", error);
            })
            .on('end', function() {
                console.log('exchanged end ffmpeg');
            }).pipe();
        ffmpegStream.on('data', (chunk) => {
            // console.log(chunk.length, chunk);
            // console.log("get the flv data", chunk.length, chunk[0], chunk[1], chunk[2]);
            ws.send(chunk);
        }).on('end', () => {
            console.log("ffmpeg pipe end");
        });
    }
});

编程小白,如有不足之处,请在评论区指出,不胜感激。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

node 实现h264视频流buffer转码flv并使用websocket发送 的相关文章

随机推荐

  • 【MySQL】MySQL 自增主键一定是连续的吗?

    1 概述 转载 美团 MySQL 自增主键一定是连续的吗 建议去看原文 人家原创不易 我也是学习防丢失 美团问数据库比较多 分享一位读者面试美团遇到的关于 MySQL 自增主键的问题 下面是正文 众所周知 自增主键可以让聚集索引尽量地保持递
  • 阿里云ECS共享型服务器带宽选多少合适呢?

    服务器带宽的选择没有一个标准的固定的答案 需要根据自己的预算和需求来考虑 我们一般需要明白这几个知识点 关于服务器的带宽问题 其实不管是共享型 标准型 计算型 突发型等各种类型的服务器实例都是这个道理的 并没有区别 尤其共享型实例 其实共享
  • 使用Matlab绘制正弦信号

    产生一个正弦波 进行傅里叶变换 并绘图展示时域和频域 该正弦波的函数表示是 y s i n
  • Navicat16安装教程

    注 因版权原因 本文已去除破解相关的文件和内容 1 在本站下载解压后即可获得Navicat16安装包和破解补丁 如图所示 2 双击 navicat160 premium cs x64 exe 程序 即可进入安装界面 3 点击下一步 4 如图
  • version `GLIBCXX_3.4.14‘ not found

    Gate usr lib64 libstdc so 6 version GLIBCXX 3 4 14 not found required by Gate 本人测试gcc 8 3 0装不上 可考虑7 30亲测可装 4 81也测试过了 可以装
  • java list map 去重复_Java中List集合去除重复数据的六种方法

    1 循环list中的所有元素然后删除重复 public static List removeDuplicate List list for int i 0 i lt list size 1 i for int j list size 1 j
  • Android对于外置TF卡的读写操作(读写外置SD卡)

    上一篇介绍如何获得权限uri 在获得权限uri后 我们也不能直接对外卡直接操作 可以通过documentFile来进行 创建 添加修改和删除等操作 documentFile创建文件的过程可能与以往的File不同 它是通过mimeType和d
  • ROS turtlebot_follower :让机器人跟随我们移动

    ROS turtlebot follower 学习 首先在catkin ws src目录下载源码 地址 https github com turtlebot turtlebot apps git 了解代码见注释 其中有些地方我也不是很明白
  • 老胡的周刊(第108期)

    老胡的信息周刊 1 记录这周我看到的有价值的信息 主要针对计算机领域 内容主题极大程度被我个人喜好主导 这个项目核心目的在于记录让自己有印象的信息做一个留存以及共享 项目 plane 2 概念比较新的项目管理工具 开源的 JIRA Line
  • DCGAN项目总结之生成器、识别器中: tcl.fully_connected、tcl.conv2d_transpose、 tcl.conv2d函数讲解

    首先全连接函数 fully connected 卷积操作 conv2d 反置卷积操作 conv2d transpose 的引用方式 import tensorflow contrib layers as tcl 适合刚接触深度学习的人 会的
  • 趋势拟合策略量化分析

    根据趋势拟合的量化分析方法 是对股票价格历史数据进行曲线拟合 从而预测出未来几天的股价 在本文所示的程序中 用fndays表示所用历史数据的天数 pndays表示预测未来的天数 例如我们可以用过去10天的价格预测未来3天的股票价格 1 数据
  • 什么是MFC中的“单个文档”和“多个文档”?

    2023年5月14日 周日中午 单个文档 比如windows自带的记事本软件就是单个文档的 因为如果你想再创建一个新的文本 必须在外面新建一个新的记事本程序 或者说 如果你想同时写两个文本 就必须在外面新建一个新的记事本程序 你不能在一个文
  • IOS手机上点击input 输入框,页面会自动放大

    解决办法 使用禁止缩放页面来完成
  • XY提供面试题

    1 软件测试的流程是什么 1 需求调查 全面了解系统概况 应用领域 软件开发周期 软件开发环境 开发组织 时间安排 功能需求 性能需求 质量需求及测试要求等 根据系统概况进行项目所需的人员 时间和工作量估计以及项目报价 2 制定初步的项目计
  • Python图像处理-1.pil读取图像,显示图像

    from PIL import Image import matplotlib pyplot as plt pil im1 Image open pic1 png pil im2 Image open pic1 png convert L
  • 聊聊大数据(一)——大数据的存储

    大数据 现在可谓越来越火了 不管是什么行业 也不敢是不是搞计算机的 都要赶个集 借着这股热潮 亦或炒作 亦或大干一番 尤其是从事IT行业的 不跟 大数据 沾点边 都不好意思出去说自己是干IT的 大数据 一词 已无从考证具体是什么时候兴起的
  • GAMES101 Lec 07~09:Shading 定义、着色模型、着色频率、图形渲染管线、纹理

    3dMax 导出一个模型文件包含内容 顶点坐标 法线 边的关系 model 模型 空间中有了一个摄像机 Model 通过变换可以让摄像机放在原点 View 三维空间的模型变换到屏幕上 Projection 通过采样进行光栅化 Rasteri
  • Java方法求最大值

    package Methoud 用方法求最值 public class M5 public static void main String args int ages 23 58 64 75 64 int max getArryMaxDat
  • 诺基亚如何利用计算机上网,诺基亚E63的WIFI上网功能全教程

    手机端设置 依次点击 功能表 工具 设置 连接 接入点 选中 增加新接入点 1 连接名称 诺基亚e63连接wifi 任意设定 最好设中文或数字 没测试过英文得 2 选择承载方式 为 无线局域网 3 WLAN网络名称 推荐用 搜索图片名称 获
  • node 实现h264视频流buffer转码flv并使用websocket发送

    背景 硬件海康旧监控 编写node服务端以实现网页播放 调用了之前用C封装好的海康接口 视频数据由接口通过回调函数传参过来形成h64裸数据Buffer 本博客记录的就是如何从视频裸流 Buffer转码并回传给websocket 直接上代码