V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
yangheng4922
V2EX  ?  问与答

nodejs 推送图片到 RTMP 延时和花屏 有什么办法优化

  •  
  •   yangheng4922 · 2022-07-06 17:58:53 +08:00 · 604 次点击
    这是一个创建于 675 天前的主题,其中的信息可能已经有所发展或是发生改变。

    腾讯云最新优惠活动来了:云产品限时1折,云服务器低至88元/年 ,点击这里立即抢购:9i0i.cn/qcloud,更有2860元代金券免费领取,付款直接抵现金用,点击这里立即领取:9i0i.cn/qcloudquan

    (福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

    实现思路

    • nodeJS 获取到图片的 base64 数据
    • 通过 ffmpeg pipe 推送到 rtmp

    代码实现

    const child_process = require('child_process')
    let child = child_process.spawn('ffmpeg', [
      '-f', 'image2pipe',
      '-i', '-',
      '-vcodec', 'libx264',
      '-f', 'flv',
      'rtmp://127.0.0.1:56413/live/test'
    ]);
    
    child.stdout.on('data', function (data) {
      console.log(data.toString());
    });
    
    child.stderr.on('data', function (data) {
      console.log(data.toString());
    });
    
    child.on('close', (code, signal) => {
      console.log('ffmpeg 进程中断', code, signal);
    });
    
    
    // 图片数据写入管道
    function writeImg (base64) {
      let imgData = Buffer.from(base64, 'base64')
      child.stdin.write(imgData)
    }
    
    
    // 模拟循环获取图片数据
    for (let i = 0; i < 100; i ++) {
      writeImg('/9j/4AAQSkZJRgABAQAA........')
    }
    
    

    存在问题

    • 花屏问题
    • 延时累计

    不知道有什么方法可以优化

    2 条回复  ?  2022-07-12 00:47:33 +08:00
    codefredzeng
        1
    codefredzeng  
       2022-07-11 01:27:38 +08:00
    最先获取到的图片数据一定是 base64 吗?是不是可以考虑直接将图片的二进制数据喂给 ffmpeg ,不用经过 base64 转换?
    yangheng4922
        2
    yangheng4922  
    OP
       2022-07-12 00:47:33 +08:00
    @codefredzeng #1 转格式这一步没啥问题 我这边是应用层 算法那边给的就是 base64 的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1023 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 19:57 · PVG 03:57 · LAX 12:57 · JFK 15:57
    Developed with CodeLauncher
    ? Do have faith in what you're doing.


    http://www.vxiaotou.com