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

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

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

    实现思路

    • 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   ·   我们的愿景   ·   实用小工具   ·   3094 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 14:31 · PVG 22:31 · LAX 07:31 · JFK 10:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.